Understanding parameters:理解参数(Parameter)

本文涉及的产品
资源编排,不限时长
简介: Understanding parameters:理解参数(Parameter)

@[toc]
参考官方文档:Understanding parameters

背景

参数是一个节点的配置值。你可以把参数看成是节点的设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在ROS 2中,每个节点都维护自己的参数。关于参数的更多背景,请看About parameters in ROS 2

1. 准备环境

打开一个新的终端并运行:

ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

2. ros2 param list 命令

要查看属于你的节点的参数,打开一个新的终端并输入命令:

ros2 param list

你会看到节点命名空间,/teleop_turtle 和 /turtlesim ,后面是每个节点的参数。

/teleop_turtle:
  qos_overrides./parameter_events.publisher.depth
  qos_overrides./parameter_events.publisher.durability
  qos_overrides./parameter_events.publisher.history
  qos_overrides./parameter_events.publisher.reliability
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  qos_overrides./parameter_events.publisher.depth
  qos_overrides./parameter_events.publisher.durability
  qos_overrides./parameter_events.publisher.history
  qos_overrides./parameter_events.publisher.reliability
  use_sim_time

每个节点都有参数use_sim_time;这不是turtlesim独有的。

根据它们的名字,看起来 /turtlesim 的参数使用RGB颜色值来确定turtlesim窗口的背景颜色。

要确定一个参数的类型,你可以使用 ros2 param get 命令。

3. ros2 param get 命令

要显示一个参数的类型和当前值,使用命令:

ros2 param get <node_name> <parameter_name>

例如找出 /turtlesim 的参数 background_g 的当前值:

ros2 param get /turtlesim background_g

返回值如下:

Integer value is: 86

现在你知道 background_g 是整数值。

如果你对 background_r 和 background_b 运行同样的命令,你将分别得到69和255的数值。

4. ros2 param set 命令

要在运行时改变一个参数的值,使用命令:

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

例如改变 /turtlesim 的背景颜色:

ros2 param set /turtlesim background_r 150

你的终端应该返回信息:

Set parameter successful

并且你的 turtlesim 窗口的背景应该会改变颜色。

用set命令设置参数只会在你当前的会话中改变它们,而不是永久性的。然而,你可以保存你的设置,并在下次启动节点时重新加载它们。

5. ros2 param dump 命令

你可以通过使用这条命令查看一个节点的所有当前参数值:

ros2 param dump <node_name>

该命令默认打印到标准输出(stdout),但你也可以将参数值重定向到一个文件中,以便以后保存。要把你目前对 /turtlesim 的参数配置保存到文件 turtlesim.yaml 中,请输入命令:

ros2 param dump /turtlesim > turtlesim.yaml

你会在你的shell运行的工作目录中发现一个新文件。如果你打开这个文件,你会看到以下内容:

/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

如果你想在将来用相同的参数重新加载节点,导出参数就会很方便。

6. ros2 param load 命令

你可以使用命令从文件中向当前运行的节点加载参数:

ros2 param load <node_name> <parameter_file>

要把用 ros2 param dump 生成的 turtlesim.yaml 文件加载到 /turtlesim 节点的参数中,请输入命令:

ros2 param load /turtlesim turtlesim.yaml

你的终端将返回信息:

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

只读参数只能在启动时修改,之后不能修改,这就是为什么对 "qos_overrides "参数有一些警告。

7. 在节点启动时加载参数文件

要使用你保存的参数值启动同一个节点,请使用:

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

这与你启动 turtlesim 时使用的命令相同,但增加了标志 --ros-args 和 --params-file ,后面是你要加载的文件。

例如:

ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml

turtlesim 窗口应该像往常一样出现,但背景是你之前设置的紫色。

在这种情况下,参数在启动时被修改,所以指定的只读参数也将生效。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
3月前
|
XML 数据格式
Parameter ‘**‘ not found. Available parameters are [0, 1, param1, param2]解决办法
Parameter ‘**‘ not found. Available parameters are [0, 1, param1, param2]解决办法
109 0
|
SQL
Parameter ‘id‘ not found. Available parameters are [collection, list]
Parameter ‘id‘ not found. Available parameters are [collection, list]
242 0
|
7月前
Argument of type 'XX' is not assignable to parameter of type 'XX'
Argument of type 'XX' is not assignable to parameter of type 'XX'
142 0
|
C++
Reference Parameter
Reference Parameter(引用参数)是一种 C++ 编程语言中的参数传递方式。它允许将一个变量的引用(而不是副本)作为函数参数传递。引用参数的主要优点是可以避免在函数内部对实参进行拷贝操作,从而提高代码的效率。
88 1
Parameter ‘bookID‘ not found. Available parameters are [param1, bookId]
Parameter ‘bookID‘ not found. Available parameters are [param1, bookId]
141 0
|
分布式计算 Java Spark
Optimizing Spark job parameters
Optimizing Spark job parameters
265 0
《AVPASS-Leaking-And-Bypassing-Anitvirus-Detection-Model-Automatically》电子版地址
AVPASS-Leaking-And-Bypassing-Anitvirus-Detection-Model-Automatically
60 0
《AVPASS-Leaking-And-Bypassing-Anitvirus-Detection-Model-Automatically》电子版地址
成功解决ValueError: Parameter values for parameter (n_estimators) need to be a sequence.
成功解决ValueError: Parameter values for parameter (n_estimators) need to be a sequence.
成功解决ValueError: Parameter values for parameter (n_estimators) need to be a sequence.
成功解决TypeError: Value passed to parameter 'paddings' has DataType float32 not in list of allowed valu
成功解决TypeError: Value passed to parameter 'paddings' has DataType float32 not in list of allowed valu