Skip to content

参数

很多参数,比如相机的分辨率,端口号,opencv各种函数的阈值等。在很多节点里都需要去使用。

我们就必须有一个方法高效地管理参数

ROS2专门为我们提供了参数:

  • 是全局共享的字典
  • 采用键值对
  • 可实现动态监控

查看和修改小海龟示例里的参数

依旧

bash
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

输入ros2 param按两次Tab查看提示:

bash
delete    describe  dump      get       list      load      set

列举

列举所有参数:

bash
ros2 param list

输出为节点+该节点的参数:

bash
/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
  start_type_description_service
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  holonomic
  qos_overrides./parameter_events.publisher.depth
  qos_overrides./parameter_events.publisher.durability
  qos_overrides./parameter_events.publisher.history
  qos_overrides./parameter_events.publisher.reliability
  start_type_description_service
  use_sim_time

列举出某个节点的参数在后面加上节点名称:

bash
ros2 param list /turtlesim

输出的是该节点的参数

查看说明

describe命令可以查看参数的说明:

bash
ros2 param describe /turtlesim background_b

回车后显示:

bash
Parameter name: background_b
  Type: integer
  Description: Blue channel of the background color
  Constraints:
    Min value: 0
    Max value: 255
    Step: 1

可以看出,参数名称叫做background_b,类型为整数,是背景的蓝色通道值,最小值和最大值也符合RGB定义

获取值

要获取具体的值,要使用get

bash
ros2 param get /turtlesim  background_b

结果为:Integer value is: 255

所以默认的小海龟背景是蓝色

修改(设置)值

使用set:

bash
ros2 param set /turtlesim  background_b 10

终端显示Set parameter successful,可以发现背景颜色改变

配置文件处理

将参数全部打包到一个文件内:

bash
ros2 param dump /turtlesim >> turtlesim.yaml

该目录下就会出现一个turtlesim.yaml:

yaml
/turtlesim:
  ros__parameters:
    background_b: 10
    background_g: 86
    background_r: 69
    holonomic: false
    qos_overrides:
      /parameter_events:
        publisher:
          depth: 1000
          durability: volatile
          history: keep_last
          reliability: reliable
    start_type_description_service: true
    use_sim_time: false

这样我们就可以在yaml文件里直观地对参数进行修改了: 比如我们把第一个参数background_b改回255,然后保存文件 要想把修改后的参数加载回去,用load命令:

bash
ros2 param load /turtlesim turtlesim.yaml

可以看到终端输出一大堆successful,背景重新变蓝色

参数的基本用法

python
import rclpy
from rclpy.node import Node

class ParameterNode(Node):
  def __init__(self,name):
    super().__init__(name)
    self.timer = self.create_timer(2,self.timer_callback)   # 创建一个定时器,每2秒调用一次回调函数
    self.declare_parameter('robot_name','mbot')   # 创建一个参数,并设置名称为‘robot_name’,默认值为'mbot'

  def timer_callback(self):
    robot_name_param = self.get_parameter('robot_name').get_parameter_value().string_value  # 读取参数的值

    self.get_logger().info(f'Hello {robot_name_param}')

    new_name_param = relpy.parameter.Parameter('robot_name',rclpy.Parameter.Type.STRING,'mbot')   # 重新将参数值设为默认值

    all_new_parameters = [new_name_param]
    self.set_parameters(all_new_parameters)   # 改完参数后还要把它们放进列表里,然后调用set_parameters,这才把新的参数列表发送到ROS2全局

def main(args=None):
  rclpy.init(args=args)
  node = ParameterNode('param_declare')
  rclpy.spin(node)
  node.destroy_node()
  rclpy.shutdown()