底层的电机控制已经基本完成,还需要解决的最后一个问题就是根据机械臂的运动,将机械臂的位姿状态信息发回到上位机的ROS,让RVIZ中的机械臂和现实中的机械臂保持一致。
目前没有反馈的信息发回到上位机,所以每当点击 Update ,然后Plan and Execute之后,机械臂都是从初始位置重新规划,而不是接着上一次运动到的位置作为起点规划。
在修改move_group配置文件的时候,做过如下修改,意思就是使用真实机械臂发布的关节信息 /joint_states 更新机械臂位姿,而不是使用虚拟的机械臂。
<!-- We do not have a robot connected, so publish fake joint states -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
<param name="/use_gui" value="$(arg use_gui)"/>
<!--rosparam param="/source_list">[/move_group/fake_controller_joint_states]</rosparam -->
<rosparam param="/source_list">[/joint_states]</rosparam >
</node>
运行程序之后 通过 rostopic echo 命令查看信息如下:
$ rostopic echo /joint_states
---
header:
seq: 1333
stamp:
secs: 1573198571
nsecs: 845865011
frame_id: ''
name: ['Link1', 'Link2', 'Link3', 'Link4', 'Link5']
position: [0.0, 0.0, 0.0, 0.0, 0.0]
velocity: []
effort: []
---
header:
seq: 1334
stamp:
secs: 1573198571
nsecs: 945868015
frame_id: ''
name: ['Link1', 'Link2', 'Link3', 'Link4', 'Link5']
position: [0.0, 0.0, 0.0, 0.0, 0.0]
velocity: []
effort: []
---