ROS2教程 07 参数Param

一、什么是参数

参数类似ROS中的全局字典,多个节点可以共享参数中的数据。
参数在ROS中以键-值对的形式存储,即字典中的一个名目对应一个值,可以通过访问参数名来获取参数值
在ROS1中,全局参数存储在ROSMASTER参数服务器中,(不知是否准确,后续作修改)
在ROS2中,参数属于节点,存储在节点中

二、ros2 param

ROS2 param下的命令有七条

  delete    Delete parameter
  describe  Show descriptive information about declared parameters
  dump      Dump the parameters of a node to a yaml file
  get       Get parameter
  list      Output a list of available parameters
  load      Load parameter file for a node
  set       Set parameter
ROS1的param
rosparam set 修改参数值 set parameter
rosparam get 获取参数 get parameter
rosparam load 加载参数文件 load parameters from file
rosparam dump 将参数保存到文件 dump parameters to file
rosparam delete delete parameter
rosparam list 显示当前的参数表 list parameter names

区别于ros1,多了一条 describe命令 Show descriptive information about declared parameters

① ros2 param list

输出当前的Param表,每个节点名后面跟的是这个节点的参数

ros2 param list
OUTPUT:
/teleop_turtle:
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  use_sim_time

② ros2 param get

输出节点Node的参数Param的数据类型Type以及它的值Value

ros2 param get <node_name> <parameter_name>
OUTPUT:
Integer value is: 86

③ ros2 param set

设置参数值

ros2 param set <node_name> <parameter_name> <value>

以修改海龟背景色为例

ros2 param set /turtlesim background_r 150
OUTPUT:
Set parameter successful

④ ros2 param dump

将节点Node的参数Param存储到文件

ros2 param dump <node_name>

以保存海龟节点的参数信息为例,将会自动保存到当前工作目录(存疑,因为没有找到)

ros2 param dump /turtlesim
OUTPUT:
/turtlesim:
  ros__parameters:
    background_b: 255
    background_g: 86
    background_r: 150
    qos_overrides:
      /parameter_events:
        publisher:
          depth: 1000
          durability: volatile
          history: keep_last
          reliability: reliable
    use_sim_time: false

保存到指定位置(但当前命令已经弃用,提示使用重定向)

ros2 param dump /turtlesim --output-dir /home/ubuntu2204/turtle_ws
OUTPUT:
WARNING: '--output-dir' is deprecated; use redirection to save to a file
Saving to:  /home/ubuntu2204/turtle_ws/turtlesim.yaml

⑤ ros2 param load

加载参数文件

ros2 param load <node_name> <parameter_file>

以加载海龟的配置参数文件为例

ros2 param load /turtlesim /home/ubuntu2204/turtle_ws/turtlesim.yaml
OUTPUT:
Set parameter background_b successful
Set parameter background_g successful
Set parameter background_r successful
Set parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be set because it is read-only
Set parameter use_sim_time successful

因为只读参数只能在程序启动时修改,运行后不得修改,所以此处报错
在启动节点时一并加载相应的参数文件:

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
ros2 run turtlesim turtlesim_node --ros-args --params-file /home/ubuntu2204/turtle_ws/turtlesim.yaml

此时成功加载文件,并且不会报只读参数的错

⑥ ros2 param delete

删除节点的某个参数

ros2 param delete <node_name> <parameter_name>

⑦ ros2 param describe

展示某个参数的描述性信息,这部分属于ros2新加的内容,一般参数都没有说明

ros2 param describe <node_name> <parameter_name>

三、建一个含参数的功能包

1.新建功能包

在工作空间src目录下

ros2 pkg create --build-type ament_python python_parameters --dependencies rclpy

2.新建文件

在功能包下的同名文件夹中新建python_parameters_node.py

gedit python_parameters_node.py

3.编写代码

import rclpy
from rclpy.node import Node # 导入rclypy
from rcl_interfaces.msg import ParameterDescriptor
class MinimalParam(Node):
    def __init__(self):
        super().__init__('minimal_param_node')
        timer_period = 2  # seconds
        self.timer = self.create_timer(timer_period, self.timer_callback) # 定时器
		
        my_parameter_descriptor = ParameterDescriptor(description='This parameter is mine!') # 写参数的描述,也可以对参数限制为只读,进一步了解请查阅文献
        self.declare_parameter('my_parameter', 'world', my_parameter_descriptor) #声明参数 (参数名,参数值,参数描述与限制[可选])

    def timer_callback(self): # 回调函数
        my_param = self.get_parameter('my_parameter').get_parameter_value().string_value # 获取参数值并存储在my_param中

        self.get_logger().info('Hello %s!' % my_param) # 打印my_param确保成功存储

        my_new_param = rclpy.parameter.Parameter(
            'my_parameter',
            rclpy.Parameter.Type.STRING,
            'world'
        )
        all_new_parameters = [my_new_param]
        self.set_parameters(all_new_parameters) # 确保每次回调都把参数my_parameter重新设置为world,避免用户外部修改

def main():
    rclpy.init()
    node = MinimalParam()
    rclpy.spin(node)

if __name__ == '__main__':
    main()

4.添加入口点

在setup.py中修改入口点部分

entry_points={
    'console_scripts': [
        'param_talker = python_parameters.python_parameters_node:main',
    ],
},

5.编译

colcon build --packages-select python_parameters

6.测试

ros2 run python_parameters param_talker

四、在启动节点时配置参数

1. 通过命令行启动时手动加载参数

先通过dump下载当前节点的配置文件,然后在启动时可以这样加载

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml

通过launch文件在启动节点时为其配置参数,参考此部分
ROS2官方相关文档

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值