One of the things that we’ve been working on for the last week is the parameter and logging systems.
Since the start of this project we’ve had a protocol in place for logging data from the Crazyflie but it’s been a bit hackish. It has relied on that the client/Crazyflie has been in sync regarding what to log and how to log it. The problem that we had was that as we start development on a new feature our logging needs change and we start tweaking what we log. Sometimes we change the size of variables to fit more data in or we switch them out completely. This has resulted in the logging breaking frequently which has been a pain…the three of us was hardly ever in sync The solution that we have been working on now is more dynamic.
At start-up the client will download a TOC (table of contents) of loggable variables. By using macros when defining a variable in the Crazyflie code the variable will automatically be included in the TOC and will be loggable. It is then possible to setup a log configuration where a number of variables are pushed over the radio at a specific interval. Multiple configurations can be added so one usage is to log the battery voltage every second but to log the roll/pitch/yaw 100 times per second.
We have also been developing a similar system for getting/setting parameters. Like the logging there’s been a hackish system in place until now that’s been used to set regulation parameters during tuning. With the new system it’s possible to declare a variable using macros so it will be automatically included in the param TOC and will be gettable/settable from the client. One typical use is for tuning the regulation but it could also be used to switch between flying configurations (normal/X).
The biggest reason for implementing these systems is to make it easier for other people to tune and modify the program of the Crazyflie (also it’s a lot of fun :-D).