Launch arguments
为便于launch文件重复利用一些值,roslaunch支持launch arguments,也成为arguments或者args,类似于局部变量。
注意:尽管argument和parameter的中文意思有时可互换,但他们在ROS中的意义完全不同。Parameters是ROS系统使用的数值,存在parameter server上,nodes可通过ros::param::get函数编程得到,用户可通过rosparam获取。与之不同,arguments仅在launch文件内部有意义,nodes不能直接获取它们的值。
(转载者注:很多时候,roslaunch都需要通过param来传递参数,与此形成对比的是,roslaunch中完全不使用arg其实是ok的。arg相当于定义了容器,用于储存一些值,方便后面重复调用。)
(1)声明argument
<arg name=”arg_name”>
(2)指定argument的值
Launch文件中的每个argument都必须有指定值。赋值方法有好几种。
第一种,在命令行赋值
$ roslaunch package_name launch_file_name arg-name:=arg_value
第二种,在声明argument时赋值
<arg name=”arg_name” default=”arg_name”/>
<arg name=”arg_name” value=”arg_name”/>
上面两行的区别在于,命令行参数可以覆盖default,但是不能重写value的值。
(3)获取变量值
一旦声明某个argument并赋值后,我们可以通过arg使用该argument.
$(arg arg-name)
如果该行出现,roslaunch将会用给定arg-name的值替换其左边的值。
(4)将argument值传给included launch文件
<include file=”path-to-file”>
<arg name=”arg_name” value=”arg_value”/>
……
</include>
若在launch文件中,launch文件及其包含的launch文件出现出现相同的arguments,则需在launch文件及included launch文件中同时写:
<arg name=”arg_name” value=”$(arg arg_name)”/>
第一个arg_name表示indluded launch文件中的argument,第二个arg_name表示launch文件中的argument.其结果是指定的argument在launch文件及included launch文件中都有相同的值。