Подглава 12.10.3 Перечисление топиков контроллеров и мониторинг состояния шарниров
Когда dynamixels.launch файла запущен и работает, вызовите другой терминал и перечислите активные топики:
$ rostopic list
Среди перечисленных топиков вы должны увидеть следующие, связанные с dynamixel:
/diagnostics
/head_pan_joint/command
/head_pan_joint/state
/head_tilt_joint/command
/head_tilt_joint/state
/joint_states
/motor_states/dynamixel_ax12
На данный момент мы рассмотрим следующие топики:
/head_pan_joint/command
/head_tilt_joint/command
/head_pan_joint/state
/head_tilt_joint/state
/joint_states
Эти два command топика предназначены для установки позиций сервопривода, как мы видели ранее, и мы протестируем их ниже. Топик /joint_states (который на самом деле публикуется нашим вспомогательным узлом dynamixel_joint_state_publisher.py) содержит текущее состояние сервоприводов в виде сообщения JointState. Используйте команду rostopic echo для просмотра сообщений:
$ rostopic echo /joint_states
что должно привести к потоку сообщений, которые выглядят примерно так:
header:
seq: 11323
stamp:
secs: 1344138755
nsecs: 412811040
frame_id: 'base_link'
name: ['head_pan_joint', 'head_tilt_joint']
position: [-0.5266667371740702, 0.08692557798018634]
velocity: [0.0, 0.0]
effort: [0.0, 0.0]
Здесь мы видим заголовок с порядковым номером и меткой времени, frame_id, установленный в base_link, а затем четыре массива для имени, положения, скорости и усилия. Поскольку наши сервоприводы не двигаются, скорости равны 0, а поскольку они не находятся под нагрузкой, усилие (крутящий момент) равно 0.
Пока сообщения все еще идут потоком на экране, попробуйте перемещать сервоприводы вручную. Вы должны немедленно увидеть, что значения положения, скорости и усилия изменяются в соответствии с вашими движениями. Вы также должны видеть движения в RViz.
Возвращаясь к полному списку топиков dynamixel выше, два state топика(топика состояния) контроллера полезны для мониторинга температуры сервопривода и других параметров. Попробуйте просмотреть сообщения в теме Состояние для контроллера head pan:
$ rostopic echo /head_pan_joint/state
Возвращаясь к полному списку топиков dynamixel выше, два state топика(топика состояния) контроллера полезны для мониторинга температуры сервопривода и других параметров. Попробуйте просмотреть сообщения в state топике для контроллера head pan:
$ rostopic echo /head_pan_joint/state
Типичное сообщение выглядит так:
header:
seq: 25204
stamp:
secs: 1344221332
nsecs: 748966932
frame_id: ''
name: head_pan_joint
motor_ids: [1]
motor_temps: [37]
goal_pos: 0.0
current_pos: -0.00511326929295
error: -0.00511326929295
velocity: 0.0
load: 0.0
is_moving: False
Возможно, самое важное число здесь - это температура сервопривода, указанная в поле motor_temps. Значение 37 градусов довольно типично для покоящегося сервопривода AX-12. Когда температура начинает подниматься примерно до 50 градусов или выше, то, вероятно, неплохой идеей будет дать ему отдохнуть. Чтобы визуально контролировать температуру обоих сервоприводов, вы можете сохранить запущенный график с помощью rqt_plot:
$ rqt_plot /head_pan_joint/state/motor_temps[0], /head_tilt_joint/state/motor_temps[0]
(Мы должны индексировать поля motor_temps, так как пакет dynamixel_controllers использует переменную массива для этого поля, чтобы разместить шарниры, которые используют более одного двигателя.)
Примечание: Если вы видите только одну линию графика на графике rqt_plot, измените внутренний механизм построения графика на PyQtGraph вместо MathPlot, нажав на маленький значок шестеренки настроек в правом верхнем углу окна. По какой-то причине настройка математического графика не масштабируется автоматически, и поэтому линия графика сервопривода с более высокой температурой может быть удалена от верхней части графика.
Поскольку теперь вы знаете топики, содержащие температуру сервоприводов, вы можете подписаться на эти топики в своих скриптах и расслабить сервоприводы или переместить их в нейтральное положение, если температура становится слишком высокой. Более сложный подход использует диагностику ROS, которая рассматривается в Volume 2.
Last updated
Was this helpful?