Глава** 5. **ROS**2 **API
5.1 Начало работы с ROS2
Начало работы с ROS2 API на TrackimgCam3 не требует дополнительных настроек ‒ все пакеты устанавливаются в рабочее пространство одноплатного компьютера при обновлении камеры. При подключении питания пакеты запустятся.
Для того чтобы получить доступ к ROS2 системе, необходимо подключиться к TrackimgCam3 по ssh:
5.1.1 Windows
Для чтения сообщений с одноплатного компьютера достаточно предустановленного ПО операционной системы PowerShell.
Подключитесь к сети Wi-Fi, которую раздает TrackingCam3.
Запустите PowerShell.


Введите команду:
ssh root@trackingcam3.local
При первом запуске система уточнит, действительно ли необходимо подключение, введите «yes».
После этого система запросит пароль ‒ 12345. Обратите внимание, что во время ввода пароля, символы не будут видны.

Если подключение прошло успешно, префикс поменяется на trackingcam3:~#

Для работы с файлами ROS2 и создания собственных проектов на персональном компьютере требуется установка ROS2.
5.1.2 Linux
Для подключения к одноплатному компьютеру зайдите в Терминал (командную строку).
Подключитесь к сети Wi-Fi, которую раздает TrackingCam3.
Введите команду:
ssh root@trackingcam3.local
При первом запуске система уточнит, действительно ли необходимо подключение, введите «yes».
После этого система запросит пароль ‒ 12345. Обратите внимание, что во время ввода пароля, символы не будут видны.
Если подключение прошло успешно, префикс поменяется на trackingcam3:~#.
Для работы с файлами ROS2 и создания собственных проектов на персональном компьютере требуется установка ROS2.
5.2 Просмотр топиков и сервисов
Для просмотра всех содержащихся топиков введите команду:
ros2 topic list
Вывод:
/altitude
/aruco_image/compressed
/arucos
/attitude
/barometer
/battery
/beeper_control
/blob_mask/compressed
/blobs
/camera_poses_from_markers
/cmd_vel
/diod_control
/flags
/imu
/light
/mag
/magnet
/odom
/opticflow
/parameter_events
/rc_in
/rosout
/target_height
/tf
/tf_static
/ultrasonicДля просмотра всех доступных сервисов, введите команду:
ros2 service list:
Вывод:
/camera_driver/describe_parameters
/camera_driver/get_parameter_types
/camera_driver/get_parameters
/camera_driver/list_parameters
/camera_driver/set_parameters
/camera_driver/set_parameters_atomically
/go_to_xy
/height_control/describe_parameters
/height_control/get_parameter_types
/height_control/get_parameters
/height_control/list_parameters
/height_control/set_parameters
/height_control/set_parameters_atomically
/image_api/describe_parameters
/image_api/get_parameter_types
/image_api/get_parameters
/image_api/list_parameters
/image_api/set_parameters
/image_api/set_parameters_atomically
/msp_node_ros2/describe_parameters
/msp_node_ros2/get_parameter_types
/msp_node_ros2/get_parameters
/msp_node_ros2/list_parameters
/msp_node_ros2/set_parameters
/msp_node_ros2/set_parameters_atomically
/odom_calculation/describe_parameters
/odom_calculation/get_parameter_types
/odom_calculation/get_parameters
/odom_calculation/list_parameters
/odom_calculation/set_parameters
/odom_calculation/set_parameters_atomically
/odom_control/describe_parameters
/odom_control/get_parameter_types
/odom_control/get_parameters
/odom_control/list_parameters
/odom_control/set_parameters
/odom_control/set_parameters_atomically
/set_arm
/set_height
/set_odometry
/set_yaw
/take_off_board
/websocket_api/describe_parameters
/websocket_api/get_parameter_types
/websocket_api/get_parameters
/websocket_api/list_parameters
/websocket_api/set_parameters
/websocket_api/set_parameters_atomically
/yaw_control/describe_parameters
/yaw_control/get_parameter_types
/yaw_control/get_parameters
/yaw_control/list_parameters
/yaw_control/set_parameters
/yaw_control/set_parameters_atomically5.3 Используемые топики
Ниже приведено описание основных топиков и сервисов через которые можно осуществлять взаимодействие с дроном.
Чтобы запустить чтение топика, введите команду:
ros2 topic **echo** /<имя топика>
Пример:
ros2 topic **echo** /altitude
Чтобы запустить чтение топика через сообщение введите команду:
ros2 topic pub /<имя топика> <тип сообщения> Пример:
ros2 topic pub /imu sensor_msgs/msg/Imu
Все типы сообщений и сервисов можно вызвать командой:
ros2 interface list
Сообщения и сервисы установлены на TrackingCam3 вместе с образом. Если вам необходимы файлы, они доступны по ссылке: https://disk.yandex.ru/d/J3EiL50kVhrrcw.
Топик imu:
Используемый тип сообщения: sensor_msgs/msg/Imu
Поля:
geometry_msgs/Quaternion orientation - ориентация в формате кватерниона
float64 x
float64 y
float64 z
float64 w
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity - угловая скорость рад/c
float64 x
float64 y
float64 z
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration - линейные ускорения
float64 x
float64 y
float64 z
float64[9] linear_acceleration_covarianceОписание: данный топик содержит в себе показания инерциального датчика.
Топик opticalflow:
Используемый тип сообщения: eagle_eye_msgs/msg/OpticFlow
Поля:
float32 flow_rate_x # показания датчика по оси X
float32 flow_rate_y # показания датчика по оси Y
float32 body_rate_x # приведенные показания IMU по оси X
float32 body_rate_y # приведенные показания IMU по оси YОписание: данный топик содержит в себе показания датчика оптического потока.
Топик battery:
Используемый тип сообщения: eagle_eye_msgs/msg/Battery
Поля:
float32 voltage #текущий вольтаж
float32 amperage #текущий ампераж
float32 mah #сколько мАч потрачено
int8 percent_of_voltage #оставшийся процент заряда батареи
string count_of_cells #количество ячеек в батарееОписание: данный топик содержит в себе текущее состояние батареи.
Топик /altitude:
Используемый тип сообщения: eagle_eye_msgs/msg/Altitude
Поля:
std_msgs/Header header
flot32 monotonic # усредненная высота
float32 amsl # вертикальная скорость по барометру
float32 local # не используется
float32 relative # высота полученная с датчика opticalflow
float32 terrain # высота по барометру
float32 bottom_clearance # не используетсяОписание: данный топик содержит в себе текущие данные с различных датчиков высоты.
Топик /attitude:
Используемый тип сообщения: eagle_eye_msgs/msg/Attitude
Поля:
std_msgs/Header header - #хэдер сообщения
uint16 channels # не используется
geometry_msgs/Quaternion orientation #фильтрованная ориентация в формате кватерниона
float64 x
float64 y
float64 z
float64 z
geometry_msgs/Vector3 body_rate # Фильтрованная ориентация в формате углов Эйлера
float64 x float64 y float64 zОписание: отфильтрованная ориентация БПЛА в различных форматах.
Топик rc_in:
Используемый тип сообщения: eagle_eye_msgs/msg/Channels
Поля:
std_msgs/Header header
uint8 rssi # не используется
uint16[] channels # массив содержащий текущие показания каналов управленияОписание: текущие показания каналов управления, получаемых с пульта.
Топик /flags:
Используемый тип сообщения: eagle_eye_msgs/msg/Flags
Поля:
std_msgs/Header header
int32 cycle_time #не используется
int32 cpuload # не используется
int32 arming_disable_count # число флагов запрещающих arm
**string**[] arming_disable_flags # флаги запрещающие arm
**string**[] active_sensors # активные датчики
**string**[] mode # текущий режим управленияОписание: топик содержащий текущие флаги полетного контроллера.
Топик cmd_vel:
Используемый тип сообщения: geometry_msgs/msg/Twist
Поля:
| Vector3 linear float64 x #целевая линейная скорость по оси x float64 y # целевая линейная скорость по оси y float64 z # не используетсяVector3 angular float64 x # не используется float64 y # не используется
| float64 z # целевая угловая скорость вокруг оси Z |
|---|
Описание: через данный топик задается целевая скорость дрона при автономном полете с включенным 8-ым каналом на пульте управления.
Топик odom:
Используемый тип сообщения: nav_msgs/msg/Odometry
Поля:
std_msgs/Header header #хэдер сообщения
string child_frame_id #tf фрейм сообщения
geometry_msgs/PoseWithCovariance pose #текущая позиция
geometry_msgs/TwistWithCovariance twist #текущая скоростьОписание: данный топик позволяет получить текущие показания визуальной одометрии.
Топик /arucos:
Используемый тип сообщения: eagle_eye_msgs/msg/MarkerArray
Поля:
std_msgs/Header header #хэдер
eagle_eye_msgs/Marker[] markers # массив маркеровГде eagle_eye_msgs/Marker:
std_msgs/Header header
uint32 id #id маркера
geometry_msgs/PoseWithCovariance pose #позиция маркера
float64 confidence
Описание: данный топик позволяет получить текущие детектируемые аруко маркеры.
Топик /camera_poses_from_markers:
Используемый тип сообщения: eagle_eye_msgs/msg/MarkerArray
Поля:
std_msgs/Header header #хэдер
eagle_eye_msgs/Marker[] markers # массив маркеровГде eagle_eye_msgs/Marker:
std_msgs/Header header
uint32 id #id маркера
geometry_msgs/PoseWithCovariance pose #позиция маркера
float64 confidence
Описание: данный топик позволяет получить массив положений камеры относительно детектируемых маркеров.
5.4 Используемые сервисы
Сервис set_yaw:
Используемый тип сервиса: eagle_eye_msgs/srv/SetYaw
Поля:
float32 yaw #целевой угол поворота
bool result #ответ сервиса: True/FalseОписание: данный сервис принимает на вход целевой угол поворота для дрона, на который он должен повернуться. Угол задается в радианах, угол в 0 радиан является стартовым при инициализации полетного контроллера. При задании угла > pi или < -pi, дрон повернется на угол, нормализованный до интервала [-pi, pi]. Если дрон не достиг целевого угла за 20 секунд, или вследствие какой-нибудь ошибки - сервис выдаст ответ False.
Сервис set_height:
Используемый тип сервиса: eagle_eye_msgs/srv/SetHeight
Поля:
float32 height #целевая высота, отправляемая на полетный контроллер
bool result #ответ сервиса: True/False
string comment #комментарий к ответу сервисаОписание: данный сервис принимает на вход целевую высоту для дрона в метрах, отправляя ее в полетный контроллер. В случае, если задаваемая в сервисе высота выше текущей, целевая высота будет выставлена сразу, иначе будет плавное снижение высоты с фиксированным шагом. Максимальная высота взлета задается в настройках полетного контроллера, и она должна совпадать с параметрами сервиса в коде файла ноды.
Сервис takeoff_board:
Используемый тип сервиса: eagle_eye_msgs/srv/TakeOffBoard
Поля:
bool takeoff #флаг взлета
bool board #флаг посадки
bool result #ответ сервиса: True/FalseОписание: данный сервис принимает на вход один из двух флагов для осуществления взлета/посадки. Для правильной работы сервиса необходимо задание одного из флагов равным True, другого False, иначе вызов сервиса будет пропущен и выдан отрицательный ответ. Взлет дрона осуществляется на высоту 1 метр.
Сервис go_to_xy:
Используемый тип сервиса: eagle_eye_msgs/srv/GoToXY
Поля:
float32 x # координата по оси x
float32 y # координата по оси y
std_msgs/String frame # название системы координат, относительно которой осуществляется полет: odom/base_link
bool result # ответ сервиса: True/FalseОписание: данный сервис принимает на вход название системы координат [frame]: odom (одометрия) или base_link (система координат дрона) и целевую точку в этой системе координат. После получения целевых координат дрон начинает движение в заданную точку в заданной системе координат. По достижении точки сервис возвращает результат True; False, если произошла ошибка в получении одометрии или дрон не достиг точки за заданное время (по умолчанию 20 секунд).
Сервис set_odometry:
Используемый тип сервиса: eagle_eye_msgs/srv/SetOdometry
Поля:
float32 x # значение по x
float32 y # значение по y
std_msgs/Bool result #результатОписание: позволяет принудительно выставить текущие показания одометрии, может использоваться для обнуления.