一、总目录
整个技术栈,本质上可以分成 8 层
机器人软件工程 │ ┌───────────────────────┼───────────────────────┐ ↓ ↓ ↓ ① 编程基础 ② Linux/构建 ③ 通信 │ │ │ C++ / Python Linux / CMake UDP/TCP/CAN OOP / RAII CTest / Git ZMQ/Protobuf 多线程 / 锁 SSH / systemd 设计模式 │ └───────────────────────┬───────────────────────┘ ↓ ④ 机器人软件中间层 │ ROS2 │ ros2_control / Controller │ ↓ ⑤ 机器人实时控制 │ Hardware Interface │ EthercatDriver │ IgH Master │ CiA402 / CSP │ ↓ 电机 / 编码器 │ ↓ ⑥ 动捕 / 运动控制 │ MotionInput / GMR / WBC │ MuJoCo验证 │ ↓ ⑦ 测试与工程化 │ pytest / Flask-SocketIO / SQLite │ 日志 / 报告 / SSH │ ↓ ⑧ 部署与交付 │ PyInstaller / Ubuntu SOP / 验收 / 故障排查二、① 编程基础层
这是所有上层技术的基础。
C++
C++17 │ ├── OOP │ ├── 类 │ ├── 封装 │ ├── 继承 │ └── 多态 │ ├── Interface / Abstract Class │ ├── RAII │ ├── 智能指针 │ ├── unique_ptr │ ├── shared_ptr │ └── weak_ptr │ ├── 异常 │ ├── 生命周期 │ └── 并发 ├── Thread ├── Mutex ├── Condition Variable ├── Queue └── Backpressure然后再往上:
设计模式 │ ├── Strategy ├── Adapter ├── Factory └── Observer你已经不应该把这些看成独立知识点。
应该理解成:
C++负责把机器人软件组织成可靠、可扩展、可并发运行的程序。
三、② Linux + 构建系统
这是你的机器人软件真正运行的环境。
Linux │ ├── 文件系统 ├── 权限 ├── 用户 ├── 环境变量 ├── Bash ├── Process ├── Thread ├── PID ├── Signal ├── Pipe ├── Socket ├── File Descriptor ├── Log ├── SSH └── systemd然后:
Linux ↓ gcc / g++ ↓ CMake ↓ 编译 ↓ Executable / Library ↓ CTest ↓ 测试 ↓ 部署所以你以后看到:
CMakeLists.txt不要只想到:
“这是编译配置文件。”
而应该想到:
项目组织 ↓ 依赖管理 ↓ 编译 ↓ 测试 ↓ 安装 ↓ 部署四、③ 通信层
可以分成:
通信 │ ┌───────────┼───────────┐ ↓ ↓ ↓ UDP TCP CAN │ │ │ └───────────┼───────────┘ ↓ ZMQ ↓ Protobuf但是要注意:
它们不是同一个层次。
UDP/TCP/CAN
属于:
底层通信/传输机制。
ZMQ
属于:
消息通信框架/通信模型。
Protobuf
属于:
数据序列化/消息格式。
所以:
MotionFrame ↓ Protobuf ↓ ZMQ ↓ TCP/UDP ↓ Socket ↓ Linux这个结构你应该已经熟悉。
五、UDP
不是只记:
socket bind recvfrom sendto而是:
UDP │ ├── IP ├── Port ├── Datagram │ ├── 丢包 ├── 乱序 ├── 重复 ├── 超时 ├── 心跳 └── Frame ID再往你的项目连接:
双路UDP ↓ 帧号 ↓ 窗口重排 ↓ 跨路合并 ↓ 去重 ↓ 共同缺口判断 ↓ 完整MotionFrame你简历中确实把双路容错、帧号重排、跨路合并去重以及 280,586 帧测试写进了项目。
六、④ ROS2层
ROS2不要再拆成一堆孤立概念。
你已经学过:
Node Topic Service Action Launch Parameter TF URDF RViz2 Gazebo Controller Manager ros2_control现在应该把它们放进:
ROS2 │ ├── Application │ ├── Controller │ ├── Hardware Interface │ └── Communication你真正需要记住的工程链:
上层应用 ↓ ROS2 ↓ Controller ↓ Hardware Interface ↓ 具体硬件七、⑤ EtherCAT实时控制层
这是你简历的核心技术之一。
总结构:
ROS2 Controller ↓ Hardware Interface ↓ EthercatDriver ↓ IgH Master ↓ EtherCAT ↓ Slave / Drive ↓ CiA402 ↓ Motor其中:
IgH
Master Domain PDO SDO Process Data Cyclic TaskEtherCAT
Master Slave ESI PDO SDO DC AL StateCiA402
Shutdown ↓ Switch On ↓ Enable Operation运动模式:
CSP ↓ Target Position ↓ Motor ↓ Actual Position这三个东西不要混:
EtherCAT → 网络 IgH → Linux Master实现 CiA402 → 驱动器控制规范八、⑥ 动捕 + 运动控制层
这是你现在机器人方向最有特色的一层。
动捕设备 │ ├── Xsens ├── Axis ├── Noitom └── PNLink ↓ MotionInput ↓ MotionFrame ↓ GMR ↓ Retargeting ↓ Robot Joint Targets ↓ ROS2这里的核心软件架构:
MotionInput ↑ ┌──┼───────────┐ │ │ │ Xsens Axis Noitom再配:
Factory Strategy Adapter Observer形成完整的多源输入框架。
九、GMR之后连接到什么?
你不要把 GMR 当成孤立算法。
应该记成:
Human Motion ↓ Motion Capture ↓ MotionFrame ↓ GMR / Retargeting ↓ Robot Joint Target ↓ Controller ↓ Hardware也就是说:
GMR负责“人体动作 → 机器人动作”。
而:
ROS2 + ros2_control + EtherCAT负责“机器人动作 → 电机执行”。
这是两个不同层。
十、MuJoCo在这里是什么位置?
MuJoCo不是控制链里的硬件。
它是:
验证环境。
所以:
GMR ↓ Robot Joint Target ├──────────────→ MuJoCo │ └──────────────→ Real Robot先在仿真中验证:
动作是否正确 关节范围是否合理 运动是否稳定再进入实机。
十一、⑦ 测试工程层
这一层把前面的所有东西串起来。
需求 ↓ 测试点 ↓ 测试用例 ↓ 自动执行 ↓ 数据采集 ↓ 判断 ↓ 日志 ↓ 结果 ↓ SQLite ↓ 报告 ↓ 回归测试对象:
通信 │ ├── UDP ├── CAN ├── ZMQ └── Protobuf 机器人 │ ├── ROS2 ├── Controller ├── EtherCAT └── CiA402 系统 │ ├── 正常 ├── 异常 ├── 边界 ├── 超时 ├── 断连 └── 恢复十二、pytest在这里的位置
pytest │ ├── assert ├── fixture ├── parametrize ├── Mock ├── monkeypatch └── exception test然后:
pytest ↓ 测试执行 ↓ 结果 ↓ 日志 ↓ SQLite ↓ PDF你的简历中实际写到了 pytest、Mock/monkeypatch、SocketIO 测试客户端,以及 34 项测试中的通过情况。
十三、Flask-SocketIO在哪里?
它属于:
测试平台的人机交互层。
结构:
浏览器 ↕ SocketIO ↕ Flask ↕ Python Test Framework ↕ Robot可以实现:
开始测试 停止测试 查看进度 查看状态 异常通知 结果显示十四、SQLite在哪里?
测试执行 ↓ Test Result ↓ SQLite保存:
测试名称 时间 输入参数 实际结果 Pass/Fail 错误信息 统计数据然后:
SQLite ↓ 统计 ↓ PDF报告十五、⑧ 部署与交付
最终不是:
代码写完而是:
开发 ↓ 编译 ↓ 测试 ↓ 打包 ↓ 部署 ↓ 验收 ↓ SOP ↓ 故障排查相关工具:
CMake CTest Git SSH PyInstaller Ubuntu Shell所以你之前学的:
Linux CMake Python SSH 日志 测试最终都是为了:
把软件真正交付到机器人上。
十六、把你的简历压缩成一张“核心技术地图”
你以后复习,实际上只需要先看这一张:
我的机器人软件技术栈 │ ┌─────────────────────────┼─────────────────────────┐ │ │ │ 编程 系统 通信 │ │ │ C++17 / Python Linux UDP / TCP OOP / RAII CMake CAN Smart Pointer CTest ZMQ Thread / Lock SSH Protobuf Queue / Backpressure Log │ │ │ └─────────────────────────┼─────────────────────────┘ ↓ ROS2 │ ┌──────────┴──────────┐ ↓ ↓ 动捕/算法 控制 │ │ MotionInput Controller ↓ ↓ GMR Hardware Interface ↓ ↓ Joint Target EthercatDriver │ ↓ │ IgH │ ↓ │ EtherCAT │ ↓ │ CiA402/CSP │ ↓ └────────────→ Motor ↓ Feedback ↓ 测试工程 │ ┌─────────────┼─────────────┐ ↓ ↓ ↓ pytest Flask SQLite ↓ SocketIO ↓ Mock/自动化 Web Report └─────────────┼─────────────┘ ↓ 部署 / 验收 / SOP十七、再进一步:你真正的“能力主线”
如果不看技术名词,你这套简历实际上是在证明6种能力:
① 底层能力
Linux C/C++ Socket CAN EtherCAT↓
② 实时并发能力
Thread Mutex Condition Variable Queue Backpressure Frame processing↓
③ 机器人系统能力
ROS2 ros2_control Hardware Interface EtherCAT CiA402↓
④ 算法/运动能力
Motion Capture GMR Retargeting WBC/Policy相关调试 MuJoCo↓
⑤ 软件工程能力
Interface Strategy Adapter Factory CMake CTest pytest Mock↓
⑥ 测试与交付能力
自动化测试 日志 SQLite Web测试平台 SSH 部署 报告 SOP