Подглава 12.5 Понимание типа сообщения ROS JointState
Тип сообщения ROS Joint State предназначен для отслеживания всех шарниров робота. Как и во всех типах сообщений, мы можем отображать его поля с помощью команды rosmsg:
$ rosmsg show sensor_msgs/JointState
что должно привести к следующему результату:
Header header
uint32 seq
time stamp
string frame_id
string[] name
float64[] position
float64[] velocity
float64[] effort
Как вы можете видеть, сообщение JointState включает стандартный компонент заголовка ROS, состоящий из порядкового номера (seq), временной метки (stamp) и идентификатора frame_id. За этим следуют четыре массива: строковый массив под названием name для хранения названий шарниров, затем сервоприводы Dynamixel и три вещественных массива ROS - 225 для хранения положения, скорости и усилия (обычно крутящего момента) для каждого шарнира.
Теперь мы можем понять, почему сервоприводы Dynamixel хорошо подходят для ROS: а именно, мы можем запросить у каждого сервопривода его текущее положение, скорость и крутящий момент, которые являются именно теми данными,которые нам нужны для заполнения сообщения JointState. Как только мы выбрали аппаратный контроллер для сервоприводов Dynamixel, драйвер ROS для этого контроллера должен был бы публиковать состояния сервопривода в виде сообщения JointState в некотором топике. Этот топик обычно называется /joint_states, и другие узлы могут подписаться на него, чтобы узнать текущее состояние всех шарниров.
В то время как большинство шарниров, используемых на роботах, являются вращающимися, как сервоприводы, ROS может также иметь дело с линейными шарнирами, которые называются призматическими. Призматический шарнир может использоваться для перемещения туловища робота вверх и вниз, как на PR2, или для вытягивания или втягивания руки. В любом случае положение, скорость и крутящий момент призматического соединения могут быть заданы таким же образом, как и сервомоторное соединение, и поэтому ROS легко справляется с обоими.
Last updated