1、roslaunch可以在本地启动多个ROS节点,也可以通过ssh远程启动ROS节点,以及在参数服务器中设置参数;
2、它可以自动重启已经挂掉的进程;
3、也可以加载要设定的参数、要启动的node、要运行的设备的XML配置文件(如.launch结尾的一个或者多个文件);
launch文件以==.launch== 结尾,通过
$ roslaunch package_name file.launch
也可以在包含file.launch文件的目录下直接执行
package_name roslaunch file.launch
launch文件在存放上,没有什么要求,可随意
env、optenv、find、anon、arg、param、eval、include、if、unless
1、 env
$(env ENVIRONMENT_VARIABLE)
替换当前环境中的一个变量的值;如果环境中没有设置该值,则该launch文件启动失败
2、 optenv
$(optenv ENVIRONMENT_VARIABLE)
$(optenv ENVIRONMENT_VARIABLE default_value)
如果环境变量有这个值,则替换;如果提供了默认值,且环境变量中没有该值,则添加该值;如果没有个默认值,则会使用一个空字符串;(默认值可以是以空格分开的多个单词)
如:
<param name="foo" value="$(optenv NUM_CPUS 1)" />
<param name="foo" value="$(optenv CONFIG_PATH /home/marvin/ros_workspace)" />
<param name="foo" value="$(optenv VARIABLE ros rocks)" />
3、 $(find rospy)
$(find rospy)/manifest.xml#获取rospy包下的manifest.xml的路径
4、$(anon name)
$(anon name)#在name后面添加你的主机名+一串数字;以产生一个独一无二的名字
<node
name="$(anon joint_state_publisher)"
pkg="joint_state_publisher"
type="joint_state_publisher" />
运行时,该节点的名字如下
/joint_state_publisher_tangshp_OptiPlex_7060_21565_4708176580669637822
5、 $(arg foo)
example - 1
<arg name="gui" default="False" /> #定义了一个参数,参数名为gui,值为False
<param name="foo" value="$(arg gui)" />#获取参数gui的值
example - 2
<node name="add_two_ints_server" pkg="beginner_tutorials" type="add_two_ints_server" />
<node name="add_two_ints_client" pkg="beginner_tutorials" type="add_two_ints_client" args="$(arg a) $(arg b)" />
启动第二个节点时,args="$(arg a) $(arg b)"表示这个节点的启动时,获取a,b的值并传入可执行程序add_two_ints_client中;
启动该launch文件的格式如下:
roslaunch beginner_tutorials launch_file.launch a:=1 b:=5
doc :用来描述一个标签
<arg name="robot_ip" doc="IP of the controller" />
6、 param
<arg name="gui" default="False" /> #定义了一个参数,参数名为gui,值为False(局部变量)
<param name="foo" value="$(arg gui)" />#获取参数gui的值(全局变量)
全局变量才能被参数服务器存入
<param name="somestring1" value="bar" />#明显看出是字符串类型
<param name="somestring2" value="10" type="str" />#强行定义为字符串类型
<param name="someinteger1" value="1" type="int" />#明显是整型,不用写type了
<param name="someinteger2" value="2" />#明显看出是字符串类型,故省略type
<param name="somefloat1" value="3.14159" type="double" />#明显是浮点型,可以不用写type了
<param name="somefloat2" value="3.0" />#明显是浮点型,可以不用写type了
<param name="configfile" textfile="$(find roslaunch)/example.xml" />#把路径中的文件直接存如configfile中,并且把这个全局参数存放在ros参数服务器中
<param name="binaryfile" binfile="$(find roslaunch)/example.xml" />#把路径中的xml文件以基于64位二进制形式存入binaryfile中,并且把这个参数存放在ros服务器中
</launch>
基于64位的二进制是怎么回事?
7、$(eval ) New in Kinetic
<arg name="radius" value="5"/>
<arg name="pi" value="3.141592653"/>
<param name="circumference" value="$(eval 2*arg('pi')*arg('radius'))"/>#调用参数的值必须在参数名上加单引号
8、 include
<include file="$(find gripper)/launch/other.launch" />#执行other.launch中的内容
9、 unless
<param name="other_launch" value="I have be launched" unless="0"/> #可直接认为unless是取反,unless为假是执行该指令
10、 if
<group if="$(arg include)">#如果include参数是正,才会执行group标签中的内容
<param name="binaryfile" binfile="$(find gripper)/package.xml" />
<include file="$(find gripper)/launch/other.launch" />
</group>
运行包含上面的launch文件,要输入include的值,让launch做出判断
➜ launch roslaunch display.launch include:=true
注意:“1” and “true” are considered true values. “0” and “false” are considered false values. Other values will error.
display_mbot_base_urdf.launch
<launch>
<!-- 通过定义全局变量,告知launch文件启动时把全局变量robot_description中存储的模型文件加载到rviz中 -->
<param name="robot_description" textfile="$(find mbot_description)/urdf/urdf/mbot_base.urdf" />
<!-- 设置GUI参数,显示关节控制插件(可以把这个插件同下面节点看成一个整体,用于控制关节运动) -->
<param name="use_gui" value="true"/>
<!-- 运行joint_state_publisher节点,发布机器人的关节状态(显示关节旋转了多少度等等) -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行robot_state_publisher节点,发布tf(根据上面的关节状态,创建整个机器人的tf关系,并发布到系统中)-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<!-- 运行rviz可视化界面(args的参数作用类似于自定义rviz中的显示设置) -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
<launch>
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'" />
<arg name="gui" default="true" />
<param name="robot_description" command="$(arg model)" />
<!-- 设置GUI参数,显示关节控制插件 -->
<param name="use_gui" value="$(arg gui)"/>
<!-- 运行joint_state_publisher节点,发布机器人的关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行robot_state_publisher节点,发布tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<!-- 运行rviz可视化界面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>