launch文件

launch文件模板

  • ROS WiKi中的roslaunch教程
  • 初识
  • roslaunch中使用的XML format
  • 以urdf问基础的launch文件
  • 以xacro为基础的launch文件

ROS WiKi中的roslaunch教程

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文件在存放上,没有什么要求,可随意

roslaunch中使用的XML format

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.

以urdf问基础的launch文件

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>

以xacro为基础的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>

你可能感兴趣的:(ROS)