ROS2教程 07 参数Param

本文涉及的产品
资源编排,不限时长
简介: 本文是关于ROS2(机器人操作系统2)中参数(Parameter)机制的教程,介绍了ROS2中参数的使用和管理,包括列出、获取、设置、删除参数,以及如何通过命令行和launch文件在启动节点时配置参数,并通过示例代码展示了如何在ROS2节点中声明和使用参数。

一、什么是参数

参数类似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官方相关文档

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
9天前
|
Ubuntu 机器人 Linux
|
2月前
|
自然语言处理 机器人
ROS2教程 08 动作Action
本文是关于ROS2(机器人操作系统2)中动作(Action)机制的教程,详细介绍了动作的概念、ros2 action相关命令的使用,包括列出、发送目标、获取动作信息,并通过示例代码展示了如何创建动作服务端(Action Server)和客户端(Action Client),以及如何实现动作的执行、反馈和结果处理。
126 0
ROS2教程 08 动作Action
|
2月前
|
机器人 C++ Python
ROS2教程 02 功能包
本文是关于ROS2(机器人操作系统2)中功能包(package)管理的教程,介绍了如何检查功能包的依赖、创建新功能包、列出可执行文件、列出所有功能包、查询功能包的位置和描述信息,以及为C++和Python功能包配置必要的文件。
79 0
|
9天前
|
传感器 数据可视化 机器人
【ROS速成】半小时入门机器人ROS系统简明教程之可视化系统(三)
半小时入门机器人ROS系统简明教程之可视化系统
|
9天前
|
机器人
【ROS速成】半小时入门机器人ROS系统简明教程之安装测速(二)
半小时入门机器人ROS系统简明教程之安装测速
|
2月前
|
存储 自然语言处理 机器人
ROS2教程06 ROS2行动
这篇文章是关于ROS2(Robot Operating System 2)行动(Action)通信机制的教程,包括行动的概念、特点、命令行工具的使用,以及如何编写行动的客户端和服务器代码,并介绍了如何测试行动通信。
105 4
ROS2教程06 ROS2行动
|
2月前
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
67 4
ROS2教程05 ROS2服务
|
2月前
|
传感器 算法 数据可视化
ROS2教程04 ROS2话题
这篇文章是关于ROS2(Robot Operating System 2)的教程,主要介绍了ROS2中话题的概念、特性、使用方式,以及如何编写发布者和订阅者的代码。
65 3
ROS2教程04 ROS2话题
|
2月前
|
存储 Ubuntu 安全
ROS2教程02 ROS2的安装、配置和测试
本文是关于ROS2(机器人操作系统2)的安装、配置和测试的教程。内容包括使用一键安装脚本快速安装ROS2 Humble版,手动安装步骤,设置语言环境、添加软件源、更新软件包、安装ROS2桌面版和开发工具,配置ROS2环境,创建工作空间,配置ROS2领域以避免网络冲突,以及如何删除ROS2。此外,还包括了测试ROS2是否安装成功的两个案例:基本的Topic通信测试和使用Turtlesim演示程序。适用于Ubuntu 22.04操作系统。
161 1
ROS2教程02 ROS2的安装、配置和测试
|
2月前
|
传感器 存储 Ubuntu
Azure Kinect DK + ROS1 Noetic使用教程
本文是Azure Kinect DK在Ubuntu20.04下配合ROS1 Noetic使用的教程,内容包括一键安装脚本、硬件介绍、安装SDK相关软件包、设置Udev规则、SDK基本测试、DK ROS基本测试,以及存在的一些重要缺陷和相关参考文献。教程详细指导了如何配置和使用Azure Kinect DK,提供了安装步骤和解决常见问题的方法。
100 1
Azure Kinect DK + ROS1 Noetic使用教程

推荐镜像

更多