赛道选择#
赛道 https://github.com/xxraincandyxx/Robocup-docs/tree/master/docs

QQ
优先选择 通用服务机器人项目 (General Purpose Service Robot - GPSR) 赛道(文件 5.2),而不是居家服务机器人项目(文件 5.1)。
选择通用服务机器人的原因:#
- 硬件匹配度与技术挑战多样性:
- 机械臂核心任务: GPSR 的核心任务包括准确接受指令、获取物品、递交给客人、清理垃圾(抓取和放置) 。这些任务高度依赖机械臂功能,能最大化地发挥其作用,并为团队提供更复杂的抓取与操作挑战。
- 核心技术涵盖广: GPSR 的测试重点包括定位、导航、抓取、人/物识别、人机交流和自然语言处理 (NLP)。这涵盖了移动服务机器人技术栈的几乎所有关键领域,能为 12 人团队提供多样化的工作分配。
- 团队分工优势:
- GPSR 任务的模块化程度高,涵盖导航、视觉、机械臂操作和高层语义理解/交互。这非常适合 12 人团队进行合理分组和并行开发,减少模块间的耦合。
- 高效性(C++ 优化)的体现:
- 虽然两个项目都可以用 C++ 优化,但 GPSR 中的 导航、动态避障、实时目标检测(物品/人)、以及机械臂运动规划(MoveIt 2) 都是性能优化的关键点,全部可以用 C++ 在 ROS2 中高效实现。
| 赛道对比 | 居家服务机器人(Home Service) | 通用服务机器人 (GPSR) | 团队适配性 |
|---|
| 核心任务 | 自主巡游,识别家庭成员的日常行为 (如躺下、摔倒、挥手),并做出运动反馈。 | 自然语言交互,区分主人/客人,抓取指定物品并递送,拾取垃圾并放入垃圾桶。 | GPSR 的抓取与自然语言任务更适合多硬件集成和团队分工。 |
| 关键技术 | 人体/人脸识别、人体行为识别、物品识别、自主导航、机械臂操作。 | 人体/人脸识别、物品识别、自主导航、语音交互/NLP、机械臂抓取。 | GPSR 的NLP/抓取模块为 C++ 优化和团队分组提供了更清晰的界限。 |
ROS2 系统结构(基于 GPSR)#
为了构建一个高效、可靠、集成 C++ 和 Python 的 ROS2 系统,我建议采用三层架构和 C++ 优先策略。
🤖 ROS2 系统分层架构#
| 层级 | 模块/功能组 | 核心语言(效率优先) | ROS2 关键技术 | 功能要求匹配(GPSR) |
|---|
| 高层控制 | 任务管理器 (Task Commander) | Python (或 C++ State Machine) | Behavior Trees (行为树) 或 State Machines (状态机) | 系统集成、人机交互、任务流程控制 |
| 中层处理 | 感知 (Perception) | C++ | OpenCV/PCL, YOLO/TensorRT 加速推理 | 人体或人脸识别、物品识别、定位客人/物品/垃圾位置 |
| 导航 (Navigation) | C++ | Nav2 Stack (SLAM, AMCL, Planner, Controller) | 自主导航、到达指定房间、动态避障/避开主人 |
| 操作 (Manipulation) | C++ | MoveIt 2, 逆运动学 (IK)、运动规划 | 机械臂抓取(物品/垃圾)、递交、放置 |
| 人机交互 (HRI) | Python | ASR/NLP 库集成,TTS 库集成 | 语音交互、准确接受客人的指令 |
| 底层驱动 | 硬件驱动 (Drivers) | C++ | rclcpp, ROS2 Hardware Interface | 机器人底盘(狗)、机械臂、相机、雷达等的低延迟控制和数据发布 |
C++ 优先原则的实施点:#
- 导航 (Navigation): 整个 Nav2 Stack(定位、路径规划、控制器)应全部使用 C++ 实现,以确保在家庭环境中实现高效、实时的运动控制和动态避障。
- 感知 (Perception): 相机/雷达数据融合、目标检测模型推理(使用 TensorRT 或优化的 OpenCV/ONNX Runtime)以及3D 目标位姿估计是计算密集型任务,必须用 C++ 实现,以保证高帧率和低延迟。
- 操作 (Manipulation): 机械臂的运动规划 (MoveIt 2) 默认高效,但与低层驱动的通信以及实时轨迹执行应全部在 C++ 环境中处理,确保抓取动作的精准和快速。
任务分化#
12 人团队可以平均划分为 4 个核心子团队,每个子团队 3 人,并设置一名核心负责人,实现高效的并行开发。
| 团队编号 | 团队名称 | 核心任务与职责 | 负责人/联络点 |
|---|
| A | 高层逻辑与集成 (High-Level) | 任务管理器(Task State Machine/BT 的设计与实现)。负责系统集成、任务流程的宏观调度,处理不同模块间的逻辑交互和异常处理。 | 团队总负责人或技术架构师。 |
| B | 导航与底盘控制 (Navigation & Base) | 底盘驱动(C++ 实现)、SLAM/定位 (AMCL/SLAM Toolbox)、Nav2 参数优化。负责机器人自主进场、自主导航到指定房间/位置、自主离场。 | 侧重运动控制与嵌入式系统的人员。 |
| C | 感知与视觉 (Perception & Vision) | 视觉算法:物体识别、人脸识别、区分主人/客人。3D 位姿估计(提供物品/垃圾在机器人坐标系下的精确位置)。雷达/相机数据融合。 | 侧重计算机视觉与深度学习的人员。 |
| D | 操作与交互 (Manipulation & HRI) | 机械臂 MoveIt 2 配置与规划。抓取策略(Fetch/Cleanup/递交)。语音交互/NLP(ASR/TTS 模块集成,命令解析与语义理解)。 | 侧重机械臂运动规划与 NLP/语音处理的人员。 |
分工的协同机制:#
- 接口定义: 在项目启动阶段,四个团队必须共同定义清晰的 ROS2 接口 (Interfaces/Messages/Services)。例如,团队 C 必须承诺以统一的 Service/Topic 格式向团队 D 和 A 发布 “Item/Trash/Guest 3D Pose”。
- 里程碑制: 将 GPSR 任务分解为小里程碑(如:A. 进场与识别客人;B. 接收指令并导航到物品;C. 抓取与递送;D. 清理垃圾)。
- C++ 代码规范: 统一团队的 C++ 代码风格和性能要求,确保 C++ 模块的效率和可靠性。Python 仅用于高层逻辑和 NLP 库的调用封装。
技术簇#
| 编号 | 任务名 | 摘要 | 需求 | 难度 |
|---|
| A | 高层逻辑与集成 (High-Level) | 负责系统集成(构建 ROS 系统)、任务流程的宏观调度,处理不同模块间的逻辑交互。 | 熟悉 ROS, C++, Python, 强项目、代码能力 | 4.0/5.0 |
| B | 导航控制 (Navigation) | SLAM/定位 (AMCL/SLAM Toolbox)、Nav2 参数优化。负责机器人自主进场、自主导航到指定房间/位置、自主离场。 | Python (可能 C++), SLAM | ~4.2/5.0 |
| C | 底盘控制 (Base) | 底盘驱动(C++ 实现)机器狗的 SDK $\rightarrow$ 二次开发 | C++ $\rightarrow$ C++, Python, Issac | 3.5/5.0 $\rightarrow$ 4.5/5.0 |
| D | 视觉 (Vision) | 视觉算法:物体识别、人脸识别、区分主人/客人。 | Python (可能 C++), CV | 3.5/5.0 |
| E | 感知 (Perception) | 3D 位姿估计(提供物品/垃圾在机器人坐标系下的精确位置, 机械臂位姿规划)。雷达/相机数据融合。 | Python (可能 C++), 机械臂, CV, DL | 4.7/5.0 |
| F | 操作 (Manipulation) | 机械臂 MoveIt 2 配置与规划 | C++, 机械臂 | 3.2/5.0 |
| G | 交互 (HRI) | 语音交互/NLP(ASR/TTS 模块集成,命令解析与语义理解)。 | Python, NLP | 3.5/5.0 |
| H | 嵌入式相关 (Embedding) | 未知 (请务必选择至少一个其他方向) | C/C++, Python | 3.0/5.0 |
核心 ROS2 系统结构:细化与接口定义#
ROS2 系统的核心是各节点(Node)通过接口(Topics, Services, Actions)进行通信,实现任务流程。以下是四个核心团队的模块划分和关键接口定义:
A. 高层逻辑与集成团队 (High-Level) - 3 人#
目标: 实现任务的解析、状态机的设计和执行,确保整个比赛流程的健壮性。
| 模块名称 (Node) | 语言/技术栈 | 主要功能 | 团队成员分工 (3 人) |
|---|
task_commander | Python/C++ (Behavior Tree Library) | 状态机/行为树 (BT) 实现。调度 Navigation, Perception, Manipulation 模块,处理任务流程中的异常和逻辑跳转。 | 1 人:架构师/流程控制(负责 BT 结构设计与调试) |
instruction_parser | Python | 接收 HRI 团队的解析结果,将其转换为机器可执行的结构化任务指令列表 (e.g., [navigate_to(kitchen), grasp_item(apple), deliver_to(guest)])。 | 1 人:任务解析与结构化(负责指令格式转换与异常处理) |
system_monitor | C++ | 收集所有关键节点的健康状态(心跳包),监控 CPU/内存占用,在关键模块崩溃时触发紧急停止或恢复流程。 | 1 人:集成与监控(负责所有模块的集成和系统健康度维护) |
关键 ROS2 接口定义 (自定义 msgs/srv/action):#
| 接口类型 | 接口名称 | 发送方 | 接收方 | 接口内容说明 |
|---|
| Action | ExecuteTask | task_commander | 所有子系统 | 请求:string task_name (e.g., “Navigate”), string goal_param (e.g., “kitchen”)。反馈:int progress。结果:bool success。 |
| Topic | parsed_command | instruction_parser | task_commander | std_msgs::String 或自定义 TaskArray.msg,传递结构化指令序列。 |
| Service | EmergencyStop | system_monitor | 所有底层驱动/运动节点 | 请求:bool stop_flag。响应:bool confirmed。 |
B. 导航与底盘控制团队 (Navigation & Base) - 3 人#
目标: 实现机器狗底盘的稳定运动、高精度定位和快速路径规划(C++ 优化)。
| 模块名称 (Node) | 语言/技术栈 | 主要功能 | 团队成员分工 (3 人) |
|---|
dog_base_driver | C++ | 与机器人底盘控制器通信,将速度指令转换为底层运动信号,发布底盘里程计 (odom)。 | 1 人:底盘驱动与通信(负责驱动代码的编写和底层硬件集成) |
nav2_config_node | C++ | Nav2 Stack(Controller, Planner, Smoother)的配置与 C++ 优化。负责地图构建 (SLAM)、定位 (AMCL) 和路径规划。 | 1 人:SLAM 与定位(负责地图构建、定位精度、传感器融合) |
nav_goal_server | C++ | 接收高层指令,向 Nav2 Stack 发送目标点 (goal),处理导航失败/重试逻辑。 | 1 人:路径规划与控制(负责 Nav2 参数调优,确保运动效率和动态避障) |
关键 ROS2 接口定义 (使用标准 msgs/action):#
| 接口类型 | 接口名称 | 发送方 | 接收方 | 接口内容说明 |
|---|
| Action | nav2_msgs/NavigateToPose | nav_goal_server | Nav2 Stack | 标准导航 Action,请求机器人移动到目标位置。 |
| Topic | /odom | dog_base_driver | Nav2 Stack/其他 | nav_msgs::Odometry,底盘里程计信息。 |
| Topic | /scan / /camera/depth/points | 传感器驱动 | Nav2 Stack/感知 | 激光雷达点云/深度相机数据,用于避障和 SLAM。 |
C. 感知与视觉团队 (Perception & Vision) - 3 人#
目标: 实现高精度、低延迟的视觉感知,为导航和操作提供准确的 3D 位姿信息(C++ + 加速推理)。
| 模块名称 (Node) | 语言/技术栈 | 主要功能 | 团队成员分工 (3 人) |
|---|
object_detector | C++ (TensorRT/ONNX Runtime) | 2D 目标检测 (物品/垃圾/人脸/客人),确保推理速度。将结果发布到 detection_2d。 | 1 人:深度学习部署与加速(负责模型训练、C++ 加载与 GPU/TensorRT 加速部署) |
pose_estimator | C++ (PCL/OpenCV) | 3D 位姿估计:结合 2D 检测结果和深度图/点云,计算目标物体在机器人坐标系 (base_link) 下的精确 3D 坐标和姿态。 | 1 人:3D 视觉与点云处理(负责 3D 几何算法和点云滤波) |
face_identity_node | C++ | 人脸识别与身份判断(主人/客人/裁判)。并发布人物的名称和位置。 | 1 人:识别与身份绑定(负责人脸识别模型和身份管理逻辑) |
关键 ROS2 接口定义 (自定义 msgs/srv):#
| 接口类型 | 接口名称 | 发送方 | 接收方 | 接口内容说明 |
|---|
| Service | GetItemPose | manipulation_server | pose_estimator | 请求:string item_name, int count。响应:geometry_msgs::PoseArray item_poses (物品在 base_link 的 3D 位姿列表)。 |
| Topic | detection_2d | object_detector | pose_estimator | sensor_msgs::Image + 自定义 BoundingBoxes.msg (2D 框和类别)。 |
| Topic | person_identity | face_identity_node | task_commander | 自定义 Person.msg:string name, string role (Guest/Host), geometry_msgs::Point position。 |
D. 操作与交互团队 (Manipulation & HRI) - 3 人#
目标: 实现机械臂的精准运动规划和抓取,以及机器人的语音交互能力。
| 模块名称 (Node) | 语言/技术栈 | 主要功能 | 团队成员分工 (3 人) |
|---|
manipulation_server | C++ (MoveIt 2) | 机械臂 Action Server。接收抓取/放置 Action 请求,调用 MoveIt 2 进行运动规划,处理抓取前、抓取中、抓取后的逻辑。 | 1 人:MoveIt! 2 配置与规划(负责运动学模型、规划器调优、抓取 Action 处理) |
arm_driver | C++ | 机械臂底层驱动:与机械臂控制器通信,执行 MoveIt 2 发布的轨迹。 | 1 人:硬件驱动与安全(负责驱动代码、安全限位、与 arm_driver 集成) |
hri_node | Python (ASR/NLP/TTS libs) | 人机交互:语音识别 (ASR)、自然语言理解 (NLP) 和语音合成 (TTS)。将 ASR 结果转换为文本,并将文本指令发布给 instruction_parser。 | 1 人:HRI 与 NLP(负责语音库的封装、命令识别逻辑、TTS 反馈) |
关键 ROS2 接口定义 (自定义 action/srv):#
| 接口类型 | 接口名称 | 发送方 | 接收方 | 接口内容说明 |
|---|
| Action | ExecuteGrasp | task_commander | manipulation_server | 请求:string item_name, geometry_msgs::Pose target_pose。反馈:int step。结果:bool grasped。 |
| Topic | speech_recognition_text | hri_node | instruction_parser | std_msgs::String,发布 ASR 识别出的原始文本指令。 |
| Topic | text_to_speech_command | task_commander | hri_node | std_msgs::String,高层逻辑向 HRI 发送需要播报的文本。 |
细化团队分工列表#
为了确保 12 人并行开发且 C++ 性能要求得到满足,以下是每个团队 3 人的细致分工:
| 团队 | 编号 | 姓名(可自行替换) | 核心职责(C++/Python) | C++/Python 偏向 | 关键产出 |
|---|
| A | A1 | 架构师 | Behavior Tree C++库的集成与实现,系统主状态机设计。 | C++为主 | 鲁棒的任务行为树代码 |
| 高层逻辑 | A2 | 流程控制 | 指令结构化逻辑(Python 实现),与 Perception/HRI/Manipulation 接口联调。 | Python 为主 | instruction_parser 逻辑 |
| 3 人 | A3 | 集成/监控 | 系统健康监控节点,所有 ROS2 接口的定义与维护。 | C++为主 | system_monitor 节点,接口文件 |
| B | B1 | 底盘驱动 | 机器狗底盘驱动 C++ 实现,底层数据发布(odom等)。 | C++ 驱动 | 高效、低延迟的 dog_base_driver |
| 导航控制 | B2 | SLAM/定位 | 地图构建与定位精度优化(AMCL/SLAM Toolbox 参数调优与传感器融合)。 | C++ 优化 | 精准的定位与地图 |
| 3 人 | B3 | 路径规划 | Nav2 控制器与规划器 C++ 参数调优,动态避障策略。 | C++ 优化 | 高效的 Nav2 配置 |
| C | C1 | 深度学习 | 目标检测模型训练、C++部署与加速(TensorRT/ONNX)。 | C++ 加速 | 快速的 object_detector 节点 |
| 感知视觉 | C2 | 3D 视觉 | 2D 到 3D 位姿估计的 C++ 实现,点云处理(PCL/OpenCV)。 | C++ 算法 | 精确的 GetItemPose 服务 |
| 3 人 | C3 | 人脸/身份 | 人脸识别 C++ 库集成与身份绑定,区分主人/客人/裁判逻辑。 | C++ 算法 | face_identity_node 节点 |
| D | D1 | 运动规划 | MoveIt 2 配置、IK/FK 求解器配置,Action Server 的 C++ 逻辑编写。 | C++ MoveIt | 鲁棒的 manipulation_server |
| 操作交互 | D2 | 抓取控制 | 抓取策略的实现与测试,机械臂驱动与安全限位 C++ 逻辑。 | C++ 驱动 | 稳定的抓取流程代码 |
| 3 人 | D3 | HRI/NLP | 语音识别与语义理解库的封装(Python),TTS 播报逻辑。 | Python HRI | 可靠的 hri_node 封装 |