零.前言
roslacunch
,只是方便我们一次运行大量节点,或者通过单个脚本运行多个节点的工具。
这部分没啥好讲的,主要使用为机翻+调校官方文档,外加一些实例,
官方文档的地址:roslaunch/XML
一.元素结构
roslaunch
也是由xml语言构成,文件后缀为.launch
.
launch文件因该由<launch>
、</launch>
开始与结束,其他参数均为该TAG的子元素。
其子元素有:
<node>
、<machine>
、<include>
、<remap>``<env>
、<param>
、<rosparam>
、<group>
、<test>
、<arg>
。
文本着重会讲个别的元素。
二.标签讲解
2.1 <node>
<node>标记指定您希望启动的ROS节点。
这是最常见的roslaunch标签,因为它支持最重要的功能:启动和关闭节点。
roslaunch不保证节点开始的顺序,因为无法从外部知道何时完全初始化节点,因此所有启动的代码都必须能够按任意顺序启动。
举例:
<node name=“listener1” pkg=“rospy_tutorials” type=“listener.py” args="–test" respawn=“true” />
以带有命令行参数--test
的方式去调用rospy_tutorials
包中的可执行文件listener.py
,来启动listener1
节点。如果该节点意外终止,则会重新启动该节点。
<node>里可以添加以下常见的参数
- pkg=“mypackage”, 包名
- type=“nodetype” ,执行文件的名称如果是用Python编写的就填写xxx.py,如果是cpp就写编译生成的可执行文件名
- name=“nodename”,这将会覆盖掉ros::init()定义的node_name
- args=“arg1 arg2 arg3”, 带的参数
- respawn=“true”,默认为false,节点挂掉/退出后是否重新启动。
- required=“true”,如果该节点退出/挂掉,会杀死roslaunch的所有进程。
- clear_params=“true|false”,在启动之前,删除节点的私有名称空间中的所有参数。
- output=“log|screen”, 若为
screen
,stdout/stderr 会显示在屏幕上,若为log
stdout/stderr 会被记录到$ROS_HOME/log,仅显示stderr。注stderr是那个红色的错误字体。
2.2 <param>
<param name=“publish_frequency” type=“double” value=“10.0” />
比如这行代码则为整个ros运行期间创建一个publish_frequency
的变量(参数),类型为double
,值为10.0
。
也就是说,这个变量在节点中也可以使用。
2.3 <arg>
类似于linux的bash文件,通过这样可以定义一个在该launch文件里有效的变量名。比如<arg name="test" value="123"/>
, 这样,后面的launch文件里所有的$(arg test)
均会被"123"替换.
三.实例
本节通过启动上篇文章的.urdf
来实现通过自定义launch
来实现Rviz的启动。
首先创建功能包,我就以学习记录3的top
举例。(好了,假设现在功能包创建好了)
创建urdf
文件夹并复制我们上篇的意大利炮进文件夹。
创建launch
文件夹和.launch
文件
<launch>
<param name="robot_description" textfile="$(find top)/urdf/mortar.urdf" />
<param name="use_gui" value="true"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find top)/urdf/config.rviz" />
</launch>
解释:
robot_description
这个变量是rviz节点会用的,需要写入urdf的文件路径。$(find xxx)可以找到xxx包的位置,这样textfile就是我们的路径了。use_gui
是下个节点的需要的变量,用于是否可视化显示调节关节移动的信息。- 紧接着的两个
node
是用于发布joint的状态和发布joint和link相对位置(TF实现)的节点。 rviz
是显示rviz的节点,且添加了参数,若有rviz的配置文件,则可以读取,若没有,等会儿保存一个就行。
如果没有出现机器人模型,要么是工作空间的问题,要么就是launch的代码与你工作空间或者文件不匹配
ros noetic需要改成
<launch>
<param name="robot_description" textfile="$(find slam_nb)/urdf/car.urdf" />
<param name="use_gui" value="true"/>
<node name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find slam_nb)/urdf/config.rviz" required="true"></node>
</launch>
现在 我们运行下这个launch:
roslaunch top show_mortar.urdf
得到这个
我们暂时将这个改为base_link
:
再添加显示RobotModel
的选项:
我们的迫击炮就出来了:
这里选择file->save config as: 到我们的launch
文件里所描述的位置
再次运行就默认配置啦: