参数
每个结点都有参数,且以字典的形式存储
使用参数而不是程序中的变量的好处是可以动态修改关键值,而不需要重新编译代码,特别适合调试
ros2 param list | 列出当前运行结点的参数列表 |
ros2 param get <node> <param> | 获取某个结点的某个参数值 |
ros2 param set <node> <param> | 设置某个结点的某个参数值 |
ros2 param dump <node> | 打印某个结点的所有参数 |
ros2 param dump <node> >> xxx.yaml | 将结点的参数全部保存到文件 |
ros2 param load <node> xxx.yaml | 将参数文件值应用到node中 |
ros2 param describle <node> <param> | 查看某节点参数的含义 |
1.节点中接口定义参数
接口手动生成
# 声明参数并设置默认值
self.declare_parameter('initial_point',[0.0,0.0,0.0])
self.declare_parameter('initial_point',[0.0,0.0,0.0])
# 获取指定参数的默认值
self.initial_point = self.get_parameter('initial_point').value
self.target_points = self.get_parameter('target_points').value
运行时加载
# 单一参数的使用命令行即可
ros2 run <package_name> <executable_name> --ros-args -p <parameter_name>:=<value>
声明的参数你可以在命令行中动态指定,多好
2.参数文件中定义参数
文件自动生成
# 先启动节点
ros2 run autopartol_robot autopartol_node
# 在另一个终端生成参数文件
ros2 param dump /autopartol_node > autopartol_params.yaml
autopartol_params.yaml
/node_name:
ros__parameters:
param1: value1
param2: value2
运行时加载
# 多参数还是建议使用yaml文件组织
ros2 run autopartol_robot autopartol_node --ros-args --params-file params.yaml
parameter-结点级参数
定义:在结点的编写过程中就进行参数定义:本质上属于结点的内容参数
赋值:在结点内赋默认初值,在laucn封装节结点时可重新赋值
应用:常规应用场景比如:修改A*算法的启发式权重值 H_weight : 1.0
argument-命令级参数
定义:在launch文件的编写过程中参数定义赋值:本质上属于结点的启动参数
使用:使用LaunchConfiguration 通过键来获取值如作为路径拼接的一环
应用:常规应用场景比如:修改Rviz启动时的配置文件 -d xxx.rviz
《parameter》
# 编写结点时声明并赋默认值
self.declare_parameter('my_int_param', 42) # 声明并赋值参数
self.get_parameter('my_int_param').value # 获取其值来使用
# 编写launch时赋予其新的值
Node(
package="my_pkg",
executable="my_node",
parameters=[{"my_int_param": 42},{"my_str_param": "hello"}]
)
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
# 在launch文件中参数声明
arg_model = DeclareLaunchArgument(
name='model', # 参数名
default_value='default.urdf', # 默认值
description='URDF 文件路径' # 描述
)
# 在launch文件中参数使用
LaunchConfiguration(‘model’)