先完成<上一篇>任务。
使用新服务启动项目
要获得arm_mover节点,并伴随着safe_move服务与其他所有节点一起启动,您将修改robot_spawn.launch。
启动文件位于catkin包根目录的launch目录中。
simple_arm的启动文件位于~/catkin_ws/src/simple_arm/launch。
要启动arm_mover节点,只需添加以下内容:
<!-- The arm mover node -->
<node name="arm_mover" type="arm_mover" pkg="simple_arm">
<rosparam>
min_joint_1_angle: 0
max_joint_1_angle: 1.57
min_joint_2_angle: 0
max_joint_2_angle: 1.0
</rosparam>
</node>
有关启动文件格式的更多信息可以在这里找到。
测试新服务
现在您已经修改了启动文件,您已准备好测试所有内容。
为此,请启动simple_arm,确认arm_mover节点正在运行,并列出了safe_move服务:
注意:在重新启动之前,您需要确保退出之前的roslaunch会话。
cd ~/catkin_ws
catkin_make
source devel/setup.bash
roslaunch simple_arm robot_spawn.launch
然后,在一个新终端中,验证节点和服务确实已启动。
rosnode list
rosservice list
假设服务(/ arm_mover / safe_move)和节点(/ arm_mover)都按预期显示(如果他们没有,请检查roscore控制台中的日志),现在可以使用rosservice与服务交互。
要查看摄像机图像流,您可以使用命令rqt_image_view(您可以在此处了解有关rqt和相关工具的更多信息)
rqt_image_view /rgb_camera/image_raw
调整视图
相机正在显示灰色图像。 这是预料之中的,因为它是向上的,朝向我们的gazebo世界的灰色天空。
要将摄像机指向计数器顶部的编号块,我们需要将接点1和接点2旋转大约π/ 2弧度。 试一试吧:
rosservice call /arm_mover/safe_move "joint_1: 1.57
joint_2: 1.57"
注意:rosservice call可以tab完成请求消息,以便您不必担心手动写出请求消息。 另外,请确保在两个联合参数之间包含换行符。
输入命令后,您应该能够看到手臂移动并最终停止,并报告将手臂移动到控制台所花费的时间。 这是预期的。
不期望的是手臂的结果位置。看看roscore控制台,我们可以清楚地看到问题所在。关节2的要求角度超出了安全范围。我们要求1.57弧度,但最大关节角度设为1.0弧度。
通过在参数服务器上设置max_joint_2_angle设置,我们应该能够在下一次进行服务呼叫时查看块。 要增加关节2的最大角度,可以使用rosparam命令
rosparam set /arm_mover/max_joint_2_angle 1.57
现在,我们应该能够移动手臂,使所有的块都位于相机的视野范围内:
rosservice call /arm_mover/safe_move "joint_1: 1.57
joint_2: 1.57"