Подглава 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