Моторы робота
На роботе установлено два мотора с энкодерами для контроля скорости вращения моторов. Моторы подключены в шестипиновые разъемы, расположенные снизу платы. Моторы рассчитаны на работу с напряжением питания 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