Skip to content

Глава** 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_atomically

5.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 #результат

Описание: позволяет принудительно выставить текущие показания одометрии, может использоваться для обнуления.