【ROS基础】Linux 命令行
【ROS基础】.launch 文件语法记录
【ROS基础】CMakeLists.txt 文件语法记录
【ROS基础】Package.xml 文件语法记录
【ROS基础】ROS_c++ 语法记录
最全面的教程还是得看这个:http://wiki.ros.org/roslaunch/XML
通过 xml 标签语言实现 ROS 多节点的配置和启动,可自动启动 ROS Master 节点。最简单的文件举例 :simple.launch
<launch>
<node pkg="learning_communication" type="person_subscriber_node" name="talker" />
<node pkg="learning_communication" type="person_publisher_node" name="listener" />
launch>
.launch 文件的根元素标签,其他所有的标签都必须包含在根标签的范围内。 表示标签作用域的结尾。
用于启动节点。标签内各参数的含义:
="screen" or ="log"
,默认不输出。="true"
,Restart the node automatically if it quits. 默认 ="false"
。="true"
,If node dies, kill entire roslaunch.="foo"
,Start the node in the ‘foo’ namespace.="arg1 arg2"
,Pass arguments to node.设置ROS系统运行中的参数,存储在参数服务器中,相当于全局变量。(可嵌入
<param name="output_frame" value="odom" />
="str | int | double | bool | yaml"
。加载 .yaml 文件中的多个参数,存储在参数服务器中,相当于全局变量。(可嵌入到
<rosparam file="params.yaml" command="load" ns="params" />
.launch 文件内部的局部变量,仅限于 .launch 文件使用。标签内各参数的含义:
<arg name="arg-name" default="arg-value" />
调用
<param name="foo" value="$(arg arg-name)" />
<node name="node" pkg="package" type="type" args="$(arg arg-name)" />
重映射 ROS 计算图资源的命名,这是一种覆盖操作,一旦重映射之后,原来的名字就没有了。标签内各参数的含义:
<remap from="/turtlebot/cmd_vel" to="/cmd_vel" />
包含其他 .launch 文件,类似 C 语言的头文件包含。标签内各参数的含义:
<include file="$(dirname)/other.launch" />
此 .launch 文件定义如下:
<launch>
<param name="/turtle_number" value="2" />
<arg name="TurtleName1" defualt="Tom"/>
<arg name="TurtleName2" defualt="Danney"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" >
<param name="turtle_name1" value="$(arg TurtleName1)"/>
<param name="turtle_name2" value="$(arg TurtleName2)"/>
<rosparam file="(find learning_launch)/config/param.ymal" commond="load" />
node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen" />
launch>
A : 123
B : "hello"
group :
C : 456
D : "world"
roslaunch learning_launch turtlesim_parameter_config.launch
find
左边的左括号前少了个$
,yaml
拼写错误,command
拼写错误。并且还发现上面的“欣喜若狂”: 居然在第7行少写了一个代表标签结尾的斜杠 这是在把对的代码改成错的。修改完以上代码后还是报错,依旧是最开始的报错:default
拼写错了!改正之后,编译,运行。得到了正确的运行结果,且没有错误没有警告。正确的代码在这里放一份:
<launch>
<param name="/turtle_number" value="2" />
<arg name="TurtleName1" default="Tom" />
<arg name="TurtleName2" default="Danney" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" >
<param name="turtle_name1" value="$(arg TurtleName1)"/>
<param name="turtle_name2" value="$(arg TurtleName2)"/>
<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>
打开文件后先看
第一个节点启动了海龟仿真器,并且在节点内部定义了两个参数,其参数值来自 .launch 文件 4、5 行
第二个节点启动了海龟仿真的键盘控制节点,需要注意的是 output="screen"
节点,通过这个设置,被设置的节点得以在终端打印输出。有此设置和无此设置的区别:
也算了结了一个疑惑,使用 rosrun 一个一个地运行节点,节点可以在终端打印数据,那使用 roslaunch 同时启动多个节点时,该打印谁的数据呢?谁设置了 output="screen"
就打印谁的数据呗,都设置了就都打印,只是这样会看起来比较乱 (经验证确实如此)。( 更详细的 rosrun、roslaunch 用法,请参考【笔记】Linux命令行)。
此 .launch 文件定义如下 :
<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>
Markdown使用的空格:
表示半角空格(英文)
表示全角空格(中文)
字体颜色修改为红色
左、右尖括号:< >
定义锚点:往这跳
向锚点跳转:点击跳转