Отправка и получение сообщений по cyphal

В примере ниже, мы собираемся отправлять в соответствующие топики угол положения мотора и угловую скорость мотора.

В спецификации сказано, что нода также должна отправлять сообщение типа Heartbeat:

В сообщении Heartbeat есть поля Health и Mode, подробнее можно почитать в спецификации. Нам также нужны сообщения типа угловая скорость и угол. Идем в репозиторий со стандартными типами сообщений и выбираем то, что подходит под наши задачи. В нашем примере это: uavcan/si/unit/angle/Scalar.1.0.dsdl и uavcan/si/unit/angular_velocity/Scalar.1.0.dsdl

Подключаем их как библиотеки вместе со стандартными библиотеками для работы с модулем и can-ом:

#include <utility>

#include <VBCoreG4_arduino_system.h>
#include <cyphal.h>

#include <uavcan/node/Heartbeat_1_0.h>
#include <uavcan/node/Health_1_0.h>
#include <uavcan/node/Mode_1_0.h>
#include <uavcan/si/unit/angular_velocity/Scalar_1_0.h>
#include <uavcan/si/unit/angle/Scalar_1_0.h>

Чтобы не использовать длинные названия типов, переименуем их:

TYPE_ALIAS(HBeat, uavcan_node_Heartbeat_1_0)
TYPE_ALIAS(Angle, uavcan_si_unit_angle_Scalar_1_0)
TYPE_ALIAS(AngularVelocity, uavcan_si_unit_angular_velocity_Scalar_1_0)

В основном цикле будет вызываться функция, которая в качестве аргумента принимает

comms_loop(current_millis);

Last updated