Моторы робота

На роботе установлено два мотора с энкодерами для контроля скорости вращения моторов. Моторы подключены в шестипиновые разъемы, расположенные снизу платы. Моторы рассчитаны на работу с напряжением питания 12V, максимальная скорость вращения мотора 70RPM.

Настройка моторов

Параметры моторов, можно поменять с помощью DIP переключателя платы

DIP2: Motor inversion

Направление движения колеса, если необходимо изменить.

DIP3: Odom inversion

Направление вращения магнита энкодера.

Настройка передаточного числа

Настройка передаточного числа редуктора мотора возможна через указание параметра wheelparam ноды tm_serial_node.

ros2 param set stm_serial_node wheelparam 12280
ros2 param get stm_serial_node wheelparam

Также, значение по умолчанию задается в файле .ros_params

export ROBOT_WHEEL_PARAM=12280

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

Для управления скоростью вращения моторов, создан стандартный для такого вида робота топик /cmd_vel, который управляет скоростью движения платформы робота.

Управление роботом возможно линейной скоростью по оси X и угловой по оси Z.

Например, команда движения робота со скоростью 0.1 м/с прямо, вперед

ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "linear:
  x: 0.1
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

Получение данных о положении робота

Данные, полученные от моторов (о скорости) и датчика IMU (ориентация робота), преобразуются в информацию о положении робота в пространстве.

Изначально данные от платы робота доступны в упрощенном топике /pose, это сделано для оптимизации serial порта.

ros2 topic echo /pose

position:
  x: -0.00037499982863664627
  y: -3.6113851820118725e-07
  z: 0.0
orientation:
  x: 0.0
  y: 0.0
  z: -0.0005555555690079927
  w: 0.9999998211860657

Далее данные преобразуются в стандартный топик /odom (nav_msgs/msg/Odometry)

ros2 topic echo /odom

header:
  stamp:
    sec: 1750766546
    nanosec: 549143615
  frame_id: odom
child_frame_id: base_footprint
pose:
  pose:
    position:
      x: -0.00037499982863664627
      y: -3.6113851820118725e-07
      z: 0.0
    orientation:
      x: 0.0
      y: 0.0
      z: -0.0005555555690079927
      w: 0.9999998211860657
  covariance:
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
twist:
  twist:
    linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0
  covariance:
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
  - 0.0
---

Для упрощенной работы с данными о положении робота создан топик /pose2d, в котором данные приведены в наиболее простой вид, где theta — угол эйлера по оси Z в радианах.

ros2 topic echo /pose2d

x: -0.00037499982863664627
y: -3.6113851820118725e-07
theta: -0.0011111111380159855

results matching ""

    No results matching ""