用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/MIUAV/vibe-coding-ros2 --skill ros2-parameter-management命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | ros2-parameter-management |
| description | ROS2 参数管理技能 - 参数声明、获取、设置、类型验证、动态参数 |
| user-invocable | true |
| argument-hint | 参数管理 OR ros2 param OR 动态参数 OR parameter OR 参数配置 |
ROS2 参数系统完整指南
当需要以下帮助时使用此技能:
| 类型 | C++ | Python |
|---|---|---|
| int | int | int |
| double | double | float |
| string | std::string | str |
| bool | bool | bool |
| byte[] | std::vector<uint8_t> | bytes |
| int[] | std::vector | List[int] |
| double[] | std::vector | List[float] |
| string[] | std::vectorstd::string | List[str] |
#include <rclcpp/rclcpp.hpp>
class MyNode : public rclcpp::Node {
public:
MyNode() : Node("my_node") {
// 声明参数(带默认值)
this->declare_parameter<int>("robot_id", 1);
this->declare_parameter<double>("speed", 1.0);
this->declare_parameter<std::string>("frame_id", "base_link");
this->declare_parameter<bool>("enable", true);
// 获取参数
int robot_id = this->get_parameter("robot_id").as_int();
// 获取多个参数
auto params = this->get_parameters({"robot_id", "speed", "frame_id"});
}
void update_params() {
// 获取参数(带默认值)
double speed = this->get_parameter_or("speed", 1.0);
(->()) {
}
}
};
class ParamNode : public rclcpp::Node {
public:
ParamNode() : Node("param_node") {
// 声明参数
this->declare_parameter<double>("rate", 10.0);
// 添加参数变化回调
param_callback_handle_ = this->add_on_set_parameters_callback(
[this](const std::vector<rclcpp::Parameter> ¶ms)
-> rcl_interfaces::msg::SetParametersResult {
for (const auto& param : params) {
if (param.get_name() == "rate") {
if (param.as_double() <= 0) {
auto result = rcl_interfaces::msg::SetParametersResult();
result.successful = false;
result.reason = "rate must be positive";
return result;
}
RCLCPP_INFO(this->get_logger(), "Rate changed to %f",
param.as_double());
}
}
auto result = rcl_interfaces::msg::SetParametersResult();
result.successful = true;
return result;
});
}
:
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr
param_callback_handle_;
};
import rclpy
from rclpy.node import Node
class MyNode(Node):
def __init__(self):
super().__init__('my_node')
# 声明参数
self.declare_parameter('robot_id', 1)
self.declare_parameter('speed', 1.0)
self.declare_parameter('frame_id', 'base_link')
self.declare_parameter('enable', True)
# 获取参数
robot_id = self.get_parameter('robot_id').value
# 获取多个参数
params = self.get_parameters(['robot_id', 'speed'])
def update_params(self):
# 使用默认值获取
speed = self.get_parameter_or('speed', 1.0).value
# 检查参数存在
if self.has_parameter('robot_id'):
pass
class ParamNode(Node):
def __init__(self):
super().__init__('param_node')
self.declare_parameter('rate', 10.0)
# 添加参数变化回调
self.add_on_set_parameters_callback(self.param_callback)
def param_callback(self, params):
for param in params:
self.get_logger().info(f'Param changed: {param.name} = {param.value}')
return SetParametersResult(successful=True)
# params.yaml
my_node:
ros__parameters:
robot_id: 1
speed: 1.0
frame_id: "base_link"
enable: true
rates:
publish_rate: 10.0
update_rate: 20.0
topics:
input: "/camera/image"
output: "/detection/result"
colors: [1.0, 0.5, 0.2]
# launch my_node.launch.py
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.parameters import load_yaml
def generate_launch_description():
params_file = LaunchConfiguration('params_file')
return LaunchDescription([
DeclareLaunchArgument(
'params_file',
default_value=os.path.join(pkg_dir, 'config', 'params.yaml'),
),
Node(
package='my_package',
executable='my_node',
parameters=[params_file],
output='screen',
),
])
# 命令行覆盖参数
ros2 run my_package my_node --ros-args -p robot_id:=2 -p speed:=2.0
# 列出节点参数
ros2 param list /node_name
# 获取参数值
ros2 param get /node_name rate
# 设置参数值
ros2 param set /node_name rate 20.0
# 导出参数
ros2 param dump /node_name > params.yaml
# 加载参数
ros2 param load /node_name params.yaml