一、总目录
整个技术栈,本质上可以分成 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 Task
EtherCAT
Master
Slave
ESI
PDO
SDO
DC
AL State
CiA402
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