In this article we will turn Zubax Babel into simple UAVCAN publisher. All the code here includes the code from previous tutorials and extends it.
Out goal is to publish couple different values to UAVCAN and to check if everything works properly plotting graphs in UAVCAN GUI Tool plotter.
We will use UAVCAN message
uavcan.protocol.debug.KeyValue. UAVCAN specification says
float32 values can be broadcasted this way. We can use it to broadcast some custom sensor data, ADC data or just any named value. For the sake of simplicity in this tutorial we will broadcast sin values. But assuming MCU resources are quite constrained we will take values from lookup table. We will also broadcast the second value - current table index.
Important note. Integer and float values have very different bit-structure. As libcanard expects float data type for
uavcan.protocol.debug.KeyValue it is important to give exactly what it wants - a float value. So despite we have unsigned integer (in fact even
uint8_t) sinus table, it is important to provide
canardEncodeScalar function with
float type parameter.
Now let's add our publisher to main, so now it looks like this:
Now its time to flash the firmware to Babel and check if everything is working as expected. You should find a bunch of new messages in Bus monitor panel:
Now lets go to
UAVCAN Plotter which may be found in
Tools -> Plotter menu.
Firstly lets just plot every message of
uavcan.protocol.debug.KeyValue type. For that open the Plotter and hit that '+' button in bottom left corner of the window. Fill in the plot details as shown below and hit
Now you should see something like this:
Important note You may adjust the scale of time and value axes by moving the mouse while holding right button pressed
The plot looks pretty weird because plotter tries to display all values of
debug.KeyValue type and Babel transmitss two diifferent values: sinus value and step. Lets delete this plot and add two more, one for each separate value:
Now graphs look properly: