Logging

The Crazyflie’s logging feature allows data to be streamed from the Crazyflie to a PC. By defining so called Log Blocks, the user can define which variables should be logged. A Log Block consists of several variables. A list of Logging groups and variables is available on the bitcraze website. Depending on your firmware version some variables might not be available.

Depending on your used Implementation the logging framework is implemented differently.

CPP Implementation

For the cpp-crazyflie it is currently not possible to start and end LogBlock during runtime. Checkout /dependencies/crazyflie_hardware/src/crazyflie_hardware_cpp/src/crtp_driver/logging.cpp to see how the state logging is implemented.

The cpp implementation automatically logs one log block to the topic /cfID/state consisting of the following variables:

If the crazyflie is also set to default (no external tracking) there will be an additional log block. This block will not be published as a GenericLogBlock topic but insted on the global /cf_positions topic.

Python Implementation

For the python implementation the logging framework is implemented as a ROS2 topic interface:

The first time you connect a crazyflie to this library, a folder called home/.crazyflies will be created. In this folder you will find the downloaded table of contents (the variables that are actually available).

When using the webots simulation, a limited subset of logging variables is available. Calling the cfID/get_logging_toc_info topic will print all available logging variables to the console. (You should avoid calling this on a hardware Crazyflie).

Creating a Log Block

When a Crazyflie is connected, a ROS topic called cfID/create_log_block is available (where ID is the id of the Crazyflie). The msg definition is as follows and can be found here:

LogBlock.msg
string[] variables
string name

In variables you can add multiple log variables, e.g. pm.vbat. The name can be choosen freely. In the following we assume that we have chosen pm_log as the name.

After sending this, 3 new topics will be created:

  • cfID/log/pm_log/start

  • cfID/log/pm_log/stop

  • cfID/log/pm_log/data

Note

There is a maximum of 28 bytes available for each log block. Ensure that you do not have too many variables in your block.

Starting a LogBlock

The start topic starts the log block on the crazyflie with the frequency passed, defining the logging periode. The type of the topic is encoded using an std_msgs/Int16.

Note

The unit is a 10th of a ms. A frequency of 1 Hz is obtained by setting this to 100.

Receiving Data

When the log block is started, the data streamed by the crazyflie is posted to the data topic as GenericLogBlock messages:

GenericLogBlock.msg
float64[] values

The values are sorted as described when the log block was created.

Stopping a Log Block

A log block can be stopped by sending an Empty message to the provided topic.