在 ROS 2 中,参数服务器的实现与节点紧密结合,每个节点都可以维护自己的参数,同时也可以访问其他节点的参数。以下是一个完整的 ROS 2 节点实现,展示如何创建参数、设置参数、获取参数以及响应参数变化:
ROS 2参数服务器节点实现
V1
创建时间:18:20
代码解析
这个参数节点实现了以下核心功能:
-
参数声明:
- 在节点构造函数中使用
declare_parameter声明参数,指定名称、类型和默认值 - 支持多种数据类型:字符串、整数、浮点数、布尔值等
- 在节点构造函数中使用
-
参数访问:
- 使用
get_parameter方法获取参数当前值 - 可以通过参数名称直接访问,自动进行类型转换
- 使用
-
参数变化监听:
- 通过
add_on_set_parameters_callback注册参数变化回调函数 - 在回调中可以验证新参数值的有效性,决定是否接受更改
- 如果参数值无效,可以返回失败结果并说明原因
- 通过
-
参数操作演示:
- 使用定时器定期打印当前参数值
- 展示了如何在运行时监控参数状态
使用方法
-
编译运行节点后,可以通过命令行工具与参数交互:
bash
-
# 设置参数 ros2 param set /parameter_node max_speed 80 # 获取参数 ros2 param get /parameter_node wheel_radius # 列出所有参数 ros2 param list /parameter_node # 保存参数到文件 ros2 param dump /parameter_node params.yaml # 从文件加载参数 ros2 param load /parameter_node params.yaml -
参数验证:
- 尝试设置无效值(如
max_speed 150)会被节点拒绝 - 节点会返回错误原因,保持原参数值不变
- 尝试设置无效值(如
CMakeLists.txt 配置
确保在CMakeLists.txt中添加必要的依赖:
cmake
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
add_executable(parameter_node src/parameter_node.cpp)
ament_target_dependencies(parameter_node rclcpp)
install(TARGETS
parameter_node
DESTINATION lib/${PROJECT_NAME})
ament_package()
![]()
这个实现展示了 ROS 2 参数服务器的核心功能,你可以根据需要扩展参数类型和验证逻辑。
1374

被折叠的 条评论
为什么被折叠?



