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