如何仅通过Launch文件调用ROS服务并集成运行turtlesim与自定义节点?
在ROS Launch文件中添加服务调用
当然可以将这些服务调用写入Launch文件,下面是具体实现方法:
你的核心需求是在turtlesim和自定义节点启动后,自动执行rosservice /turtle1/teleport_absolute和rosservice clear命令。由于ROS服务需要等待节点完全启动并注册服务后才能调用,所以必须加入服务等待逻辑,避免调用失败。
修改后的Launch文件
<launch> <!-- 启动turtlesim节点 --> <node name="turtlesim" pkg="turtlesim" type="turtlesim_node"/> <!-- 启动自定义割草节点 --> <node name="turtle_lawnmower" pkg="turtle_lawnmower" type="turtle_lawnmower_node"/> <!-- 初始化turtle位置并清除画布 --> <node name="turtle_init" pkg="bash" type="bash" args="-c 'rosservice wait /turtle1/teleport_absolute; rosservice call /turtle1/teleport_absolute x=1.0 y=1.0 theta=0.0; rosservice wait /clear; rosservice call /clear'" output="screen" required="false"/> </launch>
关键说明
- 服务等待逻辑:使用
rosservice wait /服务名确保目标服务已经可用后再执行调用,避免因节点未完全启动导致的调用失败。 - bash节点执行命令:通过
bash包的bash节点,将多个服务命令串联执行,一次性完成初始化操作。 - 参数说明:
required="false":即使这个初始化节点执行完成退出,也不会导致整个launch进程终止。output="screen":可以在终端看到服务调用的输出信息,方便调试。
如果你的turtle不是默认的turtle1,只需要把命令中的/turtle1/teleport_absolute替换成对应的/turtleX/teleport_absolute即可。
内容的提问来源于stack exchange,提问作者nino dragičević
相关产品推荐
相关产品推荐

