10. ros2笔记-参数

10. ros2笔记-参数

背景

参数是节点的配置值。可以将参数视为节点设置。节点可以将参数存储为整数、浮点值、布尔值、字符串和列表。在ROS 2中,每个节点都维护自己的参数。有关参数的更多背景信息,请参阅概念文档。

需要条件

你需要一个turtlesim软件包;安装和配置好ros2环境。

启动

启动两个海龟节点,/turtlesimateleop_turtle.

打开一个终端并执行

ros2 run turtlesim turtlesim_node

打开另一个终端并执行

ros2 run turtlesim turtle_teleop_key

2 ros2 param list

打开一个终端输入如下命令,查看属于您的节点的参数

~$ ros2 param list 
/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

您将看到节点名称空间/teolep_turtle和/turtlesim,以及后面每个节点的参数。

每个节点都有参数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上运行相同的命令,将分1别获得值69和255。

4 ros2 param set

可以使用如下命令实时改变参数

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

下面我们改变 turtlesim的背景颜色

~$ ros2 param set /turtlesim background_r 69
Set parameter successful

海龟仿真的窗口背景颜色发生了改变。

在这里插入图片描述

通过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文件,然后是要加载的文件。

停止您正在运行的turtlesim节点,并尝试使用保存的参数重新加载它,使用:

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

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

当在节点启动时使用参数文件时,包括只读参数在内的所有参数都将更新。

~$ ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
[INFO] [1691218844.334907104] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [1691218844.351470539] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

总结

节点具有用于定义其默认配置值的参数。可以从命令行获取和设置参数值。还可以将参数设置保存到文件中,以便在将来的会话中重新加载它们。

### 关于 ROS2笔记本电脑内置相机的标定方法 在 ROS2 中对笔记本电脑的内置相机进行标定的过程涉及多个工具和步骤。以下是详细的说明: #### 使用 `ros2_calibration` 工具包 ROS2 提供了一个名为 `ros2_calibration` 的工具包,用于执行传感器校准任务[^3]。该工具基于 OpenCV 实现,并允许用户通过棋盘格图案对标定参数进行估计。 1. **安装依赖项** 需要先确保系统已安装必要的软件包。可以通过以下命令安装: ```bash sudo apt-get update sudo apt-get install ros-<distro>-camera-calibration ros-<distro>-image-view ``` 将 `<distro>` 替换为当前使用的 ROS2 发行版名称(如 `humble` 或 `foxy`)。这一步会安装所需的标定工具以及图像查看器[^4]。 2. **启动摄像头节点** 对于笔记本电脑的内置摄像头,可以使用 `v4l2_camera` 节点来捕获视频流。首先创建并编译一个工作空间以集成此功能: ```bash git clone https://github.com/duckietown/v4l2-camera.git ~/ros2_ws/src/ colcon build --symlink-install source ~/ros2_ws/install/setup.bash ``` 启动摄像头节点: ```bash ros2 run v4l2_camera v4l2_camera_node __params:=path/to/camera_params.yaml ``` 如果未指定配置文件,则默认使用标准设置。 3. **运行标定程序** 接下来调用 `cameracalibrator.py` 来处理输入数据流。注意需要调整窗口大小以便更好地观察棋盘格模式。 ```bash ros2 launch camera_calibration cameracalibrator.launch.py \ image:=/image_raw camera_name:=webcam checkerboard_rows:=9 checkerboard_cols:=6 square_size:=0.025 ``` 上述命令中的 `/image_raw` 是由摄像头发布的主题;其他参数定义了棋盘格的具体规格(行列数及方块尺寸)[^5]。 4. **保存结果** 成功完成标定过程后,界面中会出现提示询问是否保存新生成的内参矩阵与畸变系数至 YAML 文件中。这些数值对于后续应用非常重要。 #### DUO 3D 相机作为对比案例 虽然问题是针对普通笔记本摄像头,但提到的 DUO 3D 双目相机也值得关注其特性。它采用全局快门技术减少运动模糊现象,在某些场景下可能更适合高动态范围的应用需求[^2]。不过需要注意的是,这类特殊硬件通常自带专用 SDK 进行初始化和管理操作,因此不一定兼容通用型 ROS 流程。 ```python import cv2 as cv from sensor_msgs.msg import CameraInfo def save_calib_data(camera_info: CameraInfo, filename="calibrated_parameters.yaml"): """Save calibration data into a yaml file.""" fs = cv.FileStorage(filename, cv.FILE_STORAGE_WRITE) fs.write("K", camera_info.k.reshape((3, 3))) fs.write("D", camera_info.d) fs.release() ``` 以上脚本片段展示了如何利用 Python 和 OpenCV 库存储从 ROS 消息对象提取出来的摄像机内部参数信息到磁盘上。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy_Robot

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值