浅谈Ros中使用launch启动文件的方法(三):更多launch文件示例
首先附上古月居老师的教程地址:古月居
古月居老师《Ros入门21讲》的全部代码在资源链接中分享给大家共同学习
1.turtlesim_parameter_config.launch(对应《Ros入门21讲》第16讲有关内容
<launch>
<param name="/turtle_number" value="2"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
实现功能:
- 设置名为"/turtle_number"的参数,赋值为2,将参数名与参数值以一个字典值的形式存入Ros的参数服务器中;
- 启动Ros中的"小乌龟"turtlesim_node节点,在节点运行后设置两个参数并赋值;
- 利用rosparam标签加载参数文件param.yaml中的所有参数并上传到参数服务器;
- 启动小海龟的键盘控制节点用于控制其运动。
附说明:
1.param.yaml参数文件内容(可直接在功能包内新建config/param.yaml复制使用),其中,A、B参数无命名空间,C、D设置在命名空间group中,用以避免资源冲突:
A: 123
B: "hello"
group:
C: 456
D: "hello"
2.通过launch文件存入参数服务器中的参数,可运行以下命令全部显示出来。
rosparam list
可以通过以下命令输出参数值:
rosparam get + 参数名称
3.在node标签内外使用param标签定义参数的不同之处在于参数前是否会带加上节点名的前缀,如下图中的turtle_name1(标签内默认加上)和turtle_number(标签外无前缀),类似命名空间的实现效果。
4.执行效果:
2.turtlesim_parameter_config.launch(对应《Ros入门21讲》第18讲有关内容)
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
实现功能:
记得在第18讲中,古月居老师利用一个简单的小乌龟跟随移动案例,来介绍在Ros中常用的坐标变换及坐标变换tf功能包的编程和使用方法,相信学过这部分案例的同学都记得当时为了运行相关代码,实现海龟跟踪的效果,打开了5个独立的Terminal才实现相关功能,而在下面的介绍中,仅使用一个launch文件即可实现全部步骤流程。
该launch文件实现了以下功能:
- 启动海龟仿真器;
- 启动海龟仿真器的键盘控制节点;
- 运行learning_tf功能包下的两个广播器turtle1_tf_broadcaster和turtle2_tf_broadcaster(args:为程序主函数输入的参数);
- 运行learning_tf功能包下的监听器listener。
执行效果:
2.turtlesim_remap.launch(remap重映射操作)
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>
实现功能:
- 利用include标签导入另一个launch文件(在上一个文章中有simple.launch文件介绍)
- 启动仿真器节点
- 将仿真器中代表海龟运行速度的参数/turtle1/cmd_vel去掉前缀重命名为/cmd_vel