Перейти к основному содержимому

ROS-топики

В процессе работы ровера все данные и команды передаются через ROS-топики. Они используются для обмена информацией между нодами: управления движением, получения данных с сенсоров и взаимодействия с внешними интерфейсами.

Актуальный список доступных топиков можно получить командой:

ros2 topic list

Для базовой конфигурации BRover-E5 список включает следующие основные топики.

Краткая таблица топиков

ГруппаОсновные топикиНазначение
Камера/camera1/image_raw, /camera1/image_compressed, /camera1/camera_infoвидеопоток и параметры камеры
Управление моторами/m_vel1/m_vel6целевые скорости отдельных двигателей
Обратная связь от моторов/m_odom1/m_odom6текущие скорости двигателей
Одометрия/odom_pose2dкоординаты и угол поворота ровера
IMU/bhi360/imuускорения, угловые скорости и ориентация
Батарея/batсостояние питания и аккумулятора
Джойстик/joyоси и кнопки радиомодельного пульта
Команды движения/cmd_velцелевая линейная и угловая скорость ровера
Кнопки/user_buttonсостояние кнопки питания и пользовательской кнопки

Подробное описание каждой группы приведено ниже.

Топики камеры

Топики, связанные с получением и передачей видеопотока с USB-камеры:

/camera1
/camera1/image_raw
/camera1/image_compressed
/camera1/camera_info
/camera1/compressedDepth
/camera1/image_raw/theora
/image_raw/zstd

Они используются для передачи изображений и параметров камеры. В большинстве случаев применяются топики /camera1/image_raw, /camera1/image_compressed и /camera1/camera_info.

Управление моторами

Для задания скоростей вращения каждого двигателя используются отдельные топики:

/m_vel1
/m_vel2
/m_vel3
/m_vel4
/m_vel5
/m_vel6

Тип сообщения:

std_msgs/msg/Float32

В эти топики публикуются значения скоростей, которые затем через ноду cyphal_bridge передаются на драйверы моторов.

Соответствие моторов:

  • /m_vel1 – /m_vel3 — левая ось ровера (переднее, среднее, заднее)
  • /m_vel4 – /m_vel6 — правая ось ровера (переднее, среднее, заднее)

Обратная связь от моторов

Каждый драйвер двигателя передаёт данные о текущей скорости вращения в соответствующий топик:

/m_odom1
/m_odom2
/m_odom3
/m_odom4
/m_odom5
/m_odom6

Тип сообщения:

std_msgs/msg/Float32

Эти данные используются для анализа состояния системы и расчёта одометрии.

Соответствие одометрии:

  • /m_odom1 – /m_odom3 — левая ось ровера (переднее, среднее, заднее)
  • /m_odom4 – /m_odom6 — правая ось ровера (переднее, среднее, заднее)

Одометрия робота

Положение ровера в пространстве публикуется в топик:

/odom_pose2d

Тип сообщения:

geometry_msgs/msg/Pose2D

Топик содержит координаты x, y и угол поворота θ, описывающие положение ровера в пространстве.

Правило "правой руки"

Данные IMU

Инерциальный датчик публикует данные в топик:

/bhi360/imu

Тип сообщения:

sensor_msgs/msg/Imu

Включает ускорения, угловые скорости и ориентацию робота.

Состояние батареи

Информация о питании доступна в топике:

/bat

Тип сообщения:

sensor_msgs/msg/BatteryState

Содержит данные о напряжении, токе и уровне заряда аккумулятора.

Джойстик

Данные от джойстика публикуются в топик:

/joy

Тип сообщения:

sensor_msgs/msg/Joy

Используется для передачи состояния кнопок и осей управления.

Команды движения

Команды движения ровера передаются через топик:

/cmd_vel

Тип сообщения:

geometry_msgs/msg/Twist

Топик используется для передачи целевой линейной и угловой скорости ровера. Нода /radiolink_control публикует в него команды, сформированные на основе данных джойстика, а нода /control_move подписывается на этот топик и рассчитывает скорости отдельных двигателей.

При управлении через веб-интерфейс команды движения также отправляются в /cmd_vel через rosbridge_server.

Кнопки питания и пользователя

Состояние кнопок ровера передаётся через топик:

/user_button

Тип сообщения:

cyphal_ros2_bridge/msg/PowerButtons

Сообщение содержит два логических поля:

  • emergency — состояние кнопки аварийного отключения
  • user — состояние пользовательской кнопки

Получение информации о топиках

Для получения подробной информации о любом топике можно использовать команду:

ros2 topic info <имя_топика>

Например:

ros2 topic info /odom_pose2d

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