1. <arg
>
1.1 简介
- 作用: 定义启动文件内的局部参数,用于动态配置启动文件的行为。
- 范围: 仅在启动文件内部有效,不能直接被ROS节点访问。
- 使用方式: 可以通过
$(arg name)
的形式在启动文件中引用,并可以通过命令行在启动时覆盖默认值,不能直接通过ros句柄读取。 - 典型用途: 控制启动文件的逻辑,例如指定要加载的文件路径或决定是否启动某个节点。
1.2 用法
launch文件:
<arg name="scene" default="map1"/>
#直接在launch文件中引用参数
<include file="$(find putn_map)/launch/$(arg scene).launch"/>
可以在启动launch文件时加上参数:
roslaunch pkg ***.launch scene:="value"
2. <param>
2.1 简介
- 作用: 设置节点的参数,可以将其加载到ROS参数服务器,供节点在运行时读取。
- 范围: 取决于定义位置,节点内为局部参数,节点外为全局参数。
- 典型用途: 设置节点的运行参数,如机器人模型、话题名称、算法参数等。
2.2 两种用法
在节点内: 将参数绑定到特定节点,参数值只能在该节点的命名空间内使用,通常用于配置节点的行为,通过私有句柄读取("~")。
//两种方式读参(nh_private为私有句柄)
nh_private.param("param_name", variable, default_value);//有默认值
bool param = nh.getParam("param_name", variable);//没有默认值
//nh_private的定义:
ros::NodeHandle nh_private("~");
在节点外(全局参数): 设置为全局参数,所有节点都可以通过全局路径读取,直接全局句柄读取。
//两种方式读参(nh为全局句柄)
nh.param("param_name", variable, default_value);//有默认值
bool param = nh.getParam("param_name", variable);//没有默认值
//nh_private的定义:
ros::NodeHandle nh;
3. <rosparam>
3.1 简介
- 作用: 用于从外部文件加载复杂的参数结构(例如YAML文件),这些参数会被加载到ROS参数服务器。
- 范围: 同样既可以是全局参数,全局句柄读取,也可以在特定节点的命名空间下使用,通过私有句柄读取("~")。
- 典型用途: 加载较大的配置文件,例如机器人配置、地图参数、算法优化参数等,用于简化复杂参数的管理。
总结:
arg
: 启动文件内部参数,控制启动逻辑,不与ROS参数服务器交互。param
: 用于设置参数服务器上的参数,可以在节点内(局部)或节点外(全局)定义。rosparam
: 用于从文件加载参数,特别适合复杂的参数配置。