Ros Launch启动管理

前言、

      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物理仿真环境

launch文件

通过xml文件实现多节点的配置和启动(可以自动启动ros master)

打开很多节点,发布很多数据

子标签包括node、machine、include、param、rosparam、group、test、arg等。

子标签下有属性和子标签。

<node name="listener" pkg="example_1" type="listener" output="screen">
<remap from="chatter" to="hello"/>
<node/>


 
#   node  name  :     节点名字      
#   pkg         :     节点所在的包
#   type        :     节点类型
#   output      :     日志输出到屏幕
#   remap       :     消息输出转移
<launch>
   <node pkg="xxxxxx" name="xxxxx" type="xxxxx_node">
   <node pkg="xxxxxx" name="xxxxx" type="xxxxx_node">
</launch>


#pkg    :所在功能包的名字
#type   :节点的可执行文件名称
#name   :节点运行时的名称


#output     输出
#rsspawn    节点失效重新启动
#required   请求的是什么没有不能执行
#ns         name space
#args       指节点其中的所有参数


param 可以设置内部参数名测试参数,存储在参数服务器中,相当于全局变量
<param name ="output_frame "value="odom"/>
name    参数名
value   参数值

好的现在我有很多的全局变量   设置起来极其麻烦

在params.yaml 中设置所有的参数,并通过命令将所有的参数都加载进当前的params
<rosparam file="params.yaml" command="load" ns="params"/>
使用rosparam file 


<arg> launch 内部文件中的局部变量  相当于局部变量只针对launch其中的变量

<remap>  重映射ROS计算图资源的命名  改变接口变成自己的接口
from 原命名
to   映射之后的命名

<include> 包含其他launch文件,类似C 语言包含的头文件
file :  包含的其他launch文件的路径

node必选标签:

在node标签中,存在多个可用属性,其中name表示节点的名称,name为必选属性;

pkg表示包名称,pkg为必选属性;

type表示节点类型,需与节点生成的可执行文件名同名,

type为必选属性。

node可选标签:

respawn表示是否复位,当节点因为某种原因终止运行时,

若respawn设为true,则roslaunch会重启该节点,

respawn默认为false。 output表示日志输出的位置,

若设为log,则输出到日志文件中,若设为screen,则输出到终端上,默认为log。

clear_params表示是否在启动前删除节点私有名字空间中的所有参数,

若设为true则删除。launch-prefix表示启动前缀,用于启动gdb、valgrind、xterm、nice等工具。

<node name="client" pkg="example_3" type="client" output="screen" launch-prefix="valgrind"/>

rosparam子标签

rosparam支持load、dump、delete三种参数操作。

load操作表示加载一个YAML文件,并将其中的参 数存入ROS参数服务器中;

dump操作表示将ROS参数服务器中的参数存入 YAML文件中;

 delete操作表示删除参数。 file表示YAML文件名;param表示参数名;ns表示 名字空间,为可选属性;subst_value表示是否运行 在YAML文件中使用替代参数,为可选属性。

<!--加载YAML文件->
<rosparam command="load" file="$(findrosparam)/example.yaml" />

<!--删除参数->
<rosparam command="delete" param="my/param"/>

<!--设置参数->
<rosparam param="a_list">[1, 2, 3, 4]</rosparam><!--设置参数->
<rosparam>
a: 1
b: 2
</rosparam>

<!--替换部分参数->
<arg name="whitelist" default="[3, 2]"/><rosparam param="whitelist" subst_value="True">$(arg whitelist)
</rosparam>

machine子标签:

machine定义了ROS节点运行的设备,当节点在本地运行时,无需使用machine标签

跨设备的ROS节点基于SSH进行通信。

name属性表示设备的主机名;address属性表示设备的网络地址或者主机名(hostname);env-loader属性表示远程设备上的环境变量文件。

usr属性表示远程登录方法的SSH的用户名,password属性表示远程登录方法的SSH的密码。

<machine name="miaozl" address="miaozl.example.com" env-loader="/opt/ros/melodic/env.sh"
user="miaozl">
<env name="LUCKY_NUMBER" value="88" />
</machine>

include和group子标签:

标签group可以将不同的launch文件、节点组合起来,

放在同一个名字空间中或者同时终止、启动一组节点。

标签include用于其他的launch文件、参数文件,通常利用find命令指明要搜索的程序包。

<group name="wg">
<include file="$(find pr2_alpha)/$(env ROBOT).machine" />
<include file="$(find 2dnav_pr2)/config/new_amcl_node.xml" />
<include file="$(find 2dnav_pr2)/config/base_odom_teleop.xml" />
<include file="$(find 2dnav_pr2)/config/lasers_and_filters.xml" />
</group>

如果希望同时启动一组节点

<group if="1">
...... 
</group>

启动launch文件:

launch文件可以通过命令行、脚本、嵌入等方式进行调用。

命令行启动: roslaunch [选项] [程序包名] [可变参数]

嵌入启动

<include file="$(find turtlesim_launch)/teleop.launch"/>

bash脚本启动,可以保证启动顺序

#!/bin/bash
roslaunch bhand_controller bhand_controller.launch &
sleep 5
echo "bhand controller startingsuccess!"roslaunch beginner_tutorialsbhand_force_control.launch &
sleep 0.1
#wait表示等待前面的后台任务全部完成才往下执行
wait
exit 0

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忒懂先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值