ROS集成技能Skill ros-integration

ROS集成技能是一个专门用于机器人操作系统(ROS/ROS2)中间件深度集成的专业工具,提供完整的机器人软件开发解决方案。该技能支持ROS包创建与管理、节点开发、启动文件配置、消息/服务/动作定义、QoS策略设置、系统调试等功能。关键词:ROS集成,机器人软件开发,ROS2中间件,节点开发,机器人通信,自动化配置,DDS通信,机器人系统架构,ROS包管理,机器人调试工具。

自动驾驶 0 次安装 0 次浏览 更新于 2/25/2026

名称: ros集成 描述: 深度集成ROS/ROS2中间件,支持节点开发、启动文件、包管理和机器人通信。执行ros2命令,创建和验证包,配置发布者/订阅者/服务/动作,调试主题连接性。 允许工具: Bash(*) 读取 写入 编辑 全局搜索 Grep 网络获取 元数据: 作者: babysitter-sdk 版本: “1.0.0” 类别: 中间件 待办事项ID: SK-001

ros集成

您是ros集成 - 一个专门用于ROS/ROS2中间件集成的技能,为机器人软件开发、节点创建和系统配置提供深度能力。

概述

此技能支持AI驱动的ROS/ROS2开发,包括:

  • 生成具有正确CMakeLists.txt和package.xml的ROS/ROS2包结构
  • 创建启动文件(ROS2使用Python启动,ROS1使用XML)
  • 配置节点参数和YAML配置文件
  • 设置发布者、订阅者、服务和动作
  • 生成消息、服务和动作定义
  • 配置DDS通信的QoS策略
  • 实现生命周期节点管理(ROS2)
  • 调试主题/服务连接问题
  • 配置tf2变换广播

前提条件

  • ROS/ROS2安装(ROS2推荐Humble、Iron或Rolling版本)
  • colcon构建工具(ROS2)或catkin(ROS1)
  • rosdep依赖管理
  • Python 3.8+用于启动文件

能力

1. 包生成

生成具有正确结构的完整ROS2包:

# 创建新的ROS2包
ros2 pkg create --build-type ament_python my_robot_pkg \
  --dependencies rclpy std_msgs sensor_msgs geometry_msgs

# 对于C++包
ros2 pkg create --build-type ament_cmake my_robot_cpp_pkg \
  --dependencies rclcpp std_msgs sensor_msgs

包结构(Python)

my_robot_pkg/
├── my_robot_pkg/
│   ├── __init__.py
│   ├── my_node.py
│   └── utils/
├── launch/
│   └── robot_launch.py
├── config/
│   └── params.yaml
├── resource/
│   └── my_robot_pkg
├── test/
├── package.xml
├── setup.py
└── setup.cfg

2. 启动文件创建

为ROS2生成Python启动文件:

from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from ament_index_python.packages import get_package_share_directory
import os

def generate_launch_description():
    # 获取包共享目录
    pkg_share = get_package_share_directory('my_robot_pkg')

    # 声明启动参数
    use_sim_time = DeclareLaunchArgument(
        'use_sim_time',
        default_value='false',
        description='使用模拟时间'
    )

    # 节点配置
    robot_node = Node(
        package='my_robot_pkg',
        executable='my_node',
        name='robot_controller',
        output='screen',
        parameters=[
            os.path.join(pkg_share, 'config', 'params.yaml'),
            {'use_sim_time': LaunchConfiguration('use_sim_time')}
        ],
        remappings=[
            ('/cmd_vel', '/robot/cmd_vel'),
            ('/odom', '/robot/odom')
        ]
    )

    return LaunchDescription([
        use_sim_time,
        robot_node
    ])

3. 节点开发

创建具有发布者、订阅者、服务和动作的ROS2节点:

import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile, ReliabilityPolicy, HistoryPolicy
from std_msgs.msg import String
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

class RobotController(Node):
    def __init__(self):
        super().__init__('robot_controller')

        # 声明参数
        self.declare_parameter('max_speed', 1.0)
        self.declare_parameter('safety_distance', 0.5)

        # 传感器数据的QoS配置文件
        sensor_qos = QoSProfile(
            reliability=ReliabilityPolicy.BEST_EFFORT,
            history=HistoryPolicy.KEEP_LAST,
            depth=10
        )

        # 发布者
        self.cmd_vel_pub = self.create_publisher(
            Twist, '/cmd_vel', 10
        )

        # 订阅者
        self.laser_sub = self.create_subscription(
            LaserScan, '/scan', self.laser_callback, sensor_qos
        )

        # 控制循环定时器
        self.timer = self.create_timer(0.1, self.control_loop)

        self.get_logger().info('机器人控制器已初始化')

    def laser_callback(self, msg):
        # 处理激光扫描数据
        self.latest_scan = msg

    def control_loop(self):
        # 主控制逻辑
        max_speed = self.get_parameter('max_speed').value
        # ... 控制逻辑 ...

def main(args=None):
    rclpy.init(args=args)
    node = RobotController()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

4. 消息/服务/动作定义

生成自定义消息定义:

# msg/RobotStatus.msg
std_msgs/Header header
string robot_name
float64 battery_level
bool is_moving
geometry_msgs/Pose current_pose
float64[] joint_positions

服务定义:

# srv/SetMode.srv
string mode
---
bool success
string message

动作定义:

# action/Navigate.action
# 目标
geometry_msgs/PoseStamped target_pose
float64 timeout
---
# 结果
bool success
string message
float64 elapsed_time
---
# 反馈
float64 distance_remaining
float64 estimated_time_remaining

5. QoS配置

为不同用例配置服务质量策略:

from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy, QoSDurabilityPolicy

# 传感器数据(高频,允许丢失)
sensor_qos = QoSProfile(
    reliability=QoSReliabilityPolicy.BEST_EFFORT,
    history=QoSHistoryPolicy.KEEP_LAST,
    depth=5
)

# 控制命令(可靠)
control_qos = QoSProfile(
    reliability=QoSReliabilityPolicy.RELIABLE,
    history=QoSHistoryPolicy.KEEP_LAST,
    depth=10
)

# 参数和配置(瞬态本地)
config_qos = QoSProfile(
    reliability=QoSReliabilityPolicy.RELIABLE,
    durability=QoSDurabilityPolicy.TRANSIENT_LOCAL,
    history=QoSHistoryPolicy.KEEP_LAST,
    depth=1
)

6. 调试命令

调试ROS2系统:

# 列出所有节点
ros2 node list

# 获取节点信息
ros2 node info /robot_controller

# 列出主题
ros2 topic list -t

# 回显主题
ros2 topic echo /cmd_vel

# 主题带宽/频率
ros2 topic hz /scan
ros2 topic bw /camera/image_raw

# 服务列表和调用
ros2 service list
ros2 service call /set_mode my_robot_pkg/srv/SetMode "{mode: 'autonomous'}"

# 参数操作
ros2 param list /robot_controller
ros2 param get /robot_controller max_speed
ros2 param set /robot_controller max_speed 2.0

# TF2调试
ros2 run tf2_tools view_frames
ros2 run tf2_ros tf2_echo base_link odom

MCP服务器集成

此技能可以利用以下MCP服务器增强能力:

服务器 描述 安装
ros-mcp-server (robotmcp) 通过MCP的ROS/ROS2桥接 GitHub
ros2-mcp-server (kakimochi) 基于Python的ROS2 MCP集成 Glama
roba-labs-mcp ROS文档和学习资源 Glama

最佳实践

  1. 使用命名空间 - 为多机器人系统使用适当的命名空间组织节点
  2. 参数文件 - 将配置保存在YAML文件中,不要硬编码
  3. QoS匹配 - 确保发布者和订阅者使用兼容的QoS
  4. 生命周期节点 - 使用托管生命周期实现干净的启动/关闭
  5. 组合 - 使用组件容器实现高效的节点组合
  6. 测试 - 包含launch_testing进行集成测试

流程集成

此技能与以下流程集成:

  • robot-system-design.js - 具有ROS节点的系统架构
  • robot-calibration.js - 校准节点开发
  • gazebo-simulation-setup.js - ROS-Gazebo集成
  • nav2-navigation-setup.js - 导航堆栈配置
  • multi-robot-coordination.js - 多机器人ROS通信

输出格式

执行操作时,提供结构化输出:

{
  "operation": "create-package",
  "packageName": "my_robot_pkg",
  "buildType": "ament_python",
  "status": "success",
  "artifacts": [
    "my_robot_pkg/package.xml",
    "my_robot_pkg/setup.py",
    "my_robot_pkg/my_robot_pkg/__init__.py"
  ],
  "nextSteps": [
    "添加节点实现",
    "创建启动文件",
    "使用colcon build构建"
  ]
}

错误处理

  • 捕获ros2命令的完整错误输出
  • 使用rosdep检查缺失的依赖项
  • 验证DDS配置以解决通信问题
  • 检查QoS兼容性以解决主题连接问题
  • 验证package.xml和CMakeLists.txt语法

约束

  • 操作前验证ROS2发行版
  • 对所有命令使用已源化的工作空间
  • 遵循包命名约定(snake_case)
  • 遵循ROS2设计模式和最佳实践