ROS通常具有很多的节点,部分节点需要带参启动,部分节点还分布在其他设备上。
这都需要一个统一的管理策略,ROS通过roslaunch管理分布式节点。放置在launch文件夹中
launch文件本质是一个以launch为后缀的XML文件,位于launch目录下。
对于本地进程,ROS通过popen创建管道启动进程,利用POSIX信号来杀死进程,
对于远程节点, ROS基于SSH来实现远程通信,这导致roslaunch无法保证启动顺序。
若需要 设置启动顺序时,可通过bash脚本进行顺序启动。
当没有ROS Master启动时,launch在启动时会自动检测并启动ROS Master节点。
launch的标签 根标签为launch。
launch文件 TF坐标变换 QT工具箱 Rviz可视化平台 Gazebo物理仿真环境
通过xml文件实现多节点的配置和启动(可以自动启动ros master)
打开很多节点,发布很多数据
子标签包括node、machine、include、param、rosparam、group、test、arg等。
子标签下有属性和子标签。
"listener" pkg="example_1" type="listener" output="screen"> "chatter" to="hello"/> -
-
-
- # node name : 节点名字
- # pkg : 节点所在的包
- # type : 节点类型
- # output : 日志输出到屏幕
- # remap : 消息输出转移
-
"xxxxxx" name="xxxxx" type="xxxxx_node"> -
"xxxxxx" name="xxxxx" type="xxxxx_node"> -
-
- #pkg :所在功能包的名字
- #type :节点的可执行文件名称
- #name :节点运行时的名称
-
-
- #output 输出
- #rsspawn 节点失效重新启动
- #required 请求的是什么没有不能执行
- #ns name space
- #args 指节点其中的所有参数
-
-
- param 可以设置内部参数名测试参数,存储在参数服务器中,相当于全局变量
- "output_frame "value="odom"/>
- name 参数名
- value 参数值
-
- 好的现在我有很多的全局变量 设置起来极其麻烦
-
- 在params.yaml 中设置所有的参数,并通过命令将所有的参数都加载进当前的params
"params.yaml" command="load" ns="params"/> - 使用rosparam file
-
-
launch 内部文件中的局部变量 相当于局部变量只针对launch其中的变量 -
重映射ROS计算图资源的命名 改变接口变成自己的接口 - from 原命名
- to 映射之后的命名
-
包含其他launch文件,类似C 语言包含的头文件 - file : 包含的其他launch文件的路径
在node标签中,存在多个可用属性,其中name表示节点的名称,name为必选属性;
pkg表示包名称,pkg为必选属性;
type表示节点类型,需与节点生成的可执行文件名同名,
type为必选属性。
respawn表示是否复位,当节点因为某种原因终止运行时,
若respawn设为true,则roslaunch会重启该节点,
respawn默认为false。 output表示日志输出的位置,
若设为log,则输出到日志文件中,若设为screen,则输出到终端上,默认为log。
clear_params表示是否在启动前删除节点私有名字空间中的所有参数,
若设为true则删除。launch-prefix表示启动前缀,用于启动gdb、valgrind、xterm、nice等工具。
"client" pkg="example_3" type="client" output="screen" launch-prefix="valgrind"/>
rosparam支持load、dump、delete三种参数操作。
load操作表示加载一个YAML文件,并将其中的参 数存入ROS参数服务器中;
dump操作表示将ROS参数服务器中的参数存入 YAML文件中;
delete操作表示删除参数。 file表示YAML文件名;param表示参数名;ns表示 名字空间,为可选属性;subst_value表示是否运行 在YAML文件中使用替代参数,为可选属性。
-