1. 五类机器人嵌入式岗位的真实差异
1.1 为什么同样叫“嵌入式”,薪资和门槛能差出一倍
我做了十多年嵌入式,从最早的8位机裸跑到后来带Linux BSP团队,再到这两年密集接触机器人项目,最大的感受就是:“嵌入式”这三个字在招聘市场上已经被稀释得几乎失去意义了。同样挂着嵌入式工程师的岗位,做消费电子和做人形机器人的,技术栈重合度可能不到三成,但HR在筛选简历时用的却是同一套关键词。
这个现象在机器人行业尤其明显。人形机器人、工业机器人、协作机器人、AMR移动机器人、四足机器人,这五类产品在系统架构上有大量共享概念——都跑ROS2、都有MCU和SoC、都涉及电机控制——但落到嵌入式岗位的日常工作上,差异大到什么程度?我举个具体的例子:一个在AMR上做底盘控制的工程师,跳去做人形机器人的关节驱动,前三个月基本处于“重新学做人”的状态。反过来也一样。
所以这篇文章我想把这件事彻底拆开讲清楚。核心目的只有一个:帮你在投简历或者转岗之前,搞清楚自己手里的技术底牌到底对应哪一类机器人,以及如果要跨过去,缺的是什么。这不是一篇泛泛而谈的行业概述,而是从嵌入式工程师的实际工作内容出发,逐层拆解五类机器人在硬件架构、实时性要求、通信协议、软件栈、调试手段上的真实差异。
适合谁看?如果你是从单片机或者Linux驱动转机器人方向的嵌入式工程师,或者已经在某类机器人上做了两三年想横向跳,又或者是学生正在选研究方向,这篇文章应该能帮你省下不少试错时间。我会尽量用实际项目中的例子来说明,而不是停留在概念层面。
1.2 五类机器人的嵌入式系统架构速览
在展开细节之前,先用一张表把五类机器人的嵌入式架构特征拉通对比。这张表是我根据自己参与过的项目和同行交流整理出来的,不同公司会有差异,但大方向基本一致。
| 维度 | 人形机器人 | 工业机器人 | 协作机器人 | AMR移动机器人 | 四足机器人 |
|---|---|---|---|---|---|
| 主控架构 | 多SoC分布式 | 单SoC+多MCU | 单SoC+多MCU | 单SoC+单MCU | 单SoC+多MCU |
| 关节/轴数 | 20-40+ | 4-8 | 4-7 | 2-4(差速) | 12-16 |
| 实时总线 | EtherCAT/CAN-FD | EtherCAT | EtherCAT/CAN | CAN/RS485 | CAN/EtherCAT |
| 控制频率 | 1-5kHz | 1-4kHz | 1-2kHz | 100-500Hz | 500-2kHz |
| 功能安全 | 部分 | 高(SIL2+) | 高(SIL2+) | 中(PLd) | 低-中 |
| 嵌入式Linux | 必须 | 必须 | 必须 | 必须 | 必须 |
| RTOS需求 | 高 | 高 | 高 | 中 | 高 |
| ROS2使用深度 | 极深 | 中 | 中 | 深 | 深 |
这张表里每一行背后都有大量的工程决策。比如为什么人形机器人需要多SoC分布式架构?因为40个关节如果全部挂在一个主控上,光是EtherCAT的带宽和同步精度就撑不住,必须做分区管理。再比如为什么AMR的控制频率可以低到100Hz?因为差速底盘的运动学模型简单,不需要高频闭环,而四足机器人的腿部关节必须跑到1kHz以上才能保证动态平衡。
这些差异直接决定了嵌入式工程师在不同机器人上的工作重心完全不同。下面我逐类展开。
2. 人形机器人嵌入式:最卷的实时性与最复杂的分布式架构
2.1 关节驱动器的嵌入式设计难点
人形机器人的嵌入式岗位,核心战场在关节驱动器上。一个典型的人形机器人有20到40个自由度,每个自由度对应一个关节模组,每个模组里至少有一颗MCU负责电流环、位置环和通信。这意味着光是关节驱动器的固件,就是一个几十人团队的工作量。
关节驱动器的MCU选型通常是STM32H7系列或者TI的C2000系列。为什么?因为电流环的控制频率要求至少10kHz以上,FOC算法的计算量不小,同时还要跑EtherCAT从站协议栈。C2000有专门的电机控制外设(PWM、ADC、比较器),在电流环这种硬实时场景下比通用MCU更合适。但C2000的生态和开发效率不如STM32,所以很多团队会用STM32H7加外部FPGA来做。
这里有一个很多人忽略的细节:人形机器人关节的通信周期和同步精度要求极高。EtherCAT的分布式时钟同步精度要做到亚微秒级,否则几十个关节在高速运动时会出现明显的协调问题。我见过一个团队因为EtherCAT从站芯片的时钟抖动没调好,导致机器人走路时膝盖和髋关节的动作差了几十微秒,看起来就是“腿软”。这种问题在调试阶段非常难定位,因为单看每个关节的数据都正常。
另一个难点是关节模组的集成度。人形机器人的关节空间极其有限,驱动器板子往往要和电机、减速器、编码器、力矩传感器塞在同一个圆柱体里。这意味着PCB要做成环形或者半环形,散热条件极差,EMC问题突出。我在一个项目里遇到过驱动器在常温下跑得好好的,一旦连续运动十分钟,MOS管温度上来之后电流采样就开始漂,导致力矩控制精度下降。最后是靠重新设计散热路径和调整电流环的温漂补偿才解决。
2.2 分布式架构下的通信与同步
人形机器人的嵌入式架构通常是“大脑+小脑+脊髓”三层。大脑是一台工控机或者高性能SoC,跑ROS2的规划和控制算法;小脑是几个区域控制器,负责把大脑的指令分解到各个关节;脊髓就是每个关节的驱动器。这三层之间的通信协议和同步机制是嵌入式工程师必须吃透的。
大脑到小脑通常用以太网或者EtherCAT,小脑到关节基本是EtherCAT或者CAN-FD。为什么不用CAN?因为CAN的带宽和节点数限制。40个关节如果挂在一个CAN总线上,1Mbps的波特率下,每个关节每毫秒只能分到几个字节,根本不够传位置、速度、电流、温度这些数据。EtherCAT的100Mbps全双工和菊花链拓扑就是为这种场景设计的。
但EtherCAT的从站开发门槛不低。你需要用专用的从站控制器芯片(比如LAN9252、ET1100),还要实现SSC协议栈。很多团队为了省事会用CAN-FD先做原型,但到了产品阶段还是得切到EtherCAT。我个人的经验是:如果项目确定要做人形机器人,一开始就上EtherCAT,不要用CAN过渡。因为CAN和EtherCAT在软件架构上的差异很大,后期切换的成本远高于一开始就啃硬骨头。
同步方面,EtherCAT的分布式时钟(DC)模式是必须开启的。主站发送一个全局时间戳,所有从站根据这个时间戳对齐自己的本地时钟。同步精度取决于从站芯片的时钟稳定性和网络拓扑的对称性。实际项目中,菊花链拓扑下做到100纳秒以内的同步是可行的,但星型拓扑会因为线缆延迟不一致导致同步精度下降。所以人形机器人的EtherCAT拓扑几乎都是菊花链,而且线缆长度要尽量一致。
2.3 嵌入式工程师在人形项目中的典型一天
说点具体的。我在人形机器人项目上的日常大概是这样的:早上先看昨晚跑的一轮关节寿命测试数据,重点看电流环的跟随误差和温度曲线。如果发现某个关节的误差在特定角度下变大,就要去查是不是编码器的偏心或者减速器的背隙问题。然后打开示波器,抓一下该关节的PWM波形和电流采样时序,确认是不是采样点和PWM中心对齐有问题。
下午通常是和算法组开会,讨论新的步态对关节驱动器的需求。比如算法说要把步频从1.5Hz提到2Hz,那我就得算一下电流环的带宽够不够、母线电压会不会跌、MOS管的温升会不会超。这些计算不是拍脑袋,要用具体的公式和仿真来支撑。比如母线电容的选型,要根据步态周期内的功率波动来算:
C = (I_load × Δt) / ΔV
其中I_load是负载电流,Δt是功率波动持续时间,ΔV是允许的母线电压跌落。一个2Hz步频的人形机器人,单腿支撑相到摆动相的切换时间大约50ms,如果负载电流是20A,允许电压跌落2V,那电容至少要500μF。实际选型还要留余量,通常会放到1000μF以上。
晚上如果产线在跑测试,可能还要远程看一下EtherCAT的同步误差统计。这个岗位的节奏就是这样,硬件、固件、算法、测试都要懂一点,但最核心的能力是在极端的实时性约束下做工程取舍。
3. 工业机器人与协作机器人:功能安全是分水岭
3.1 工业机器人嵌入式的核心:确定性与功能安全
工业机器人和协作机器人在嵌入式层面有很多共通之处,最大的共同点是功能安全。工业机器人通常要求达到SIL2甚至SIL3,协作机器人因为要和人共处,对安全的要求更高。这意味着嵌入式软件不能只是“能跑就行”,而是要有完整的失效模式分析、冗余设计、安全认证文档。
具体到技术上,工业机器人的控制器通常是“运动控制器+伺服驱动器”的架构。运动控制器跑轨迹规划和插补算法,伺服驱动器跑电流环和位置环。两者之间用EtherCAT通信,周期通常是1ms或者更短。运动控制器的主控一般是x86工控机或者高性能ARM SoC,跑实时Linux(比如打了PREEMPT_RT补丁的Linux)或者VxWorks。伺服驱动器的MCU通常是TI的C2000或者ST的STM32。
功能安全在嵌入式层面的体现是什么?举个例子:STO(Safe Torque Off)功能。当安全信号触发时,伺服驱动器必须在毫秒级内切断电机的力矩输出,而且这个切断路径必须是硬件冗余的。通常的做法是用两个独立的安全继电器串联在电机的使能回路上,任何一个继电器断开都能切断力矩。同时,MCU要能检测到安全信号的状态,并在软件层面做交叉校验。
另一个关键是安全编码器。普通编码器只输出位置信息,安全编码器还要输出校验信息,MCU要能判断编码器数据是否可信。如果编码器故障导致位置数据跳变,系统必须能检测到并进入安全状态。这种设计在协作机器人上尤其重要,因为协作机器人的关节力矩通常不大,但一旦失控打到人,后果依然严重。
3.2 协作机器人的力控与嵌入式实现
协作机器人和工业机器人最大的区别是力控。工业机器人主要做位置控制,协作机器人要能做力矩控制、阻抗控制、力位混合控制。这对嵌入式系统提出了更高的要求:电流环的带宽要更高,力矩传感器的采样率要更快,通信延迟要更低。
协作机器人的关节通常集成力矩传感器,有的是在减速器输出端装力矩传感器,有的是通过电流估算力矩。前者精度高但成本高,后者成本低但精度受摩擦和温度影响大。嵌入式工程师在这部分的工作是:设计力矩传感器的信号调理电路和采样时序,并在MCU里实现力矩闭环。
信号调理这块有个坑:力矩传感器的输出信号非常微弱,通常是毫伏级,而且容易受到电机PWM的干扰。我见过一个项目,力矩传感器的采样在电机静止时很准,一旦电机转动,采样值就跳得厉害。最后发现是PWM的开关噪声通过地线耦合到了传感器信号上。解决办法是用差分采样加隔离放大器,同时把传感器的采样时刻和PWM的开关时刻错开。
力控的实时性要求也很高。协作机器人的阻抗控制通常需要1kHz以上的控制频率,这意味着从力矩传感器采样到电流环输出,整个链路的延迟要控制在几百微秒以内。这对RTOS的任务调度和通信协议都提出了很高的要求。很多团队会用FPGA来做力矩传感器的接口和预处理,把MCU从高频采样中解放出来。
3.3 从工业到协作:嵌入式工程师的技能迁移
如果你现在做工业机器人的嵌入式,想转到协作机器人,需要补的主要是力控相关的知识和安全认证的经验。工业机器人的位置控制你已经很熟了,但力控是另一套逻辑。你需要理解阻抗控制、导纳控制的基本原理,知道力矩传感器的选型和标定方法,还要能处理力控中的稳定性问题。
反过来,从协作转到工业,需要补的是节拍和精度。工业机器人对节拍的要求很苛刻,一个焊接机器人可能要求6轴联动下的轨迹误差小于0.1mm,同时节拍要控制在几十秒以内。这对嵌入式系统的确定性和伺服驱动器的带宽要求极高。协作机器人因为速度慢、负载小,这方面的压力反而小一些。
我个人的建议是:如果你在工业机器人上做了三年以上,转协作机器人的技术门槛并不高,但需要花时间补功能安全和力控的知识。如果你在协作机器人上做,想转工业,那就要做好面对更严苛的实时性和精度要求的准备。
4. AMR移动机器人:最“接地气”的嵌入式岗位
4.1 AMR的嵌入式架构与成本控制
AMR移动机器人在五类机器人里,嵌入式架构是最简单的,但也是成本压力最大的。一台AMR的售价可能只有几万块,BOM成本要压到极致。这意味着嵌入式工程师在做方案选型时,不能只看性能,还要看价格和供货。
AMR的典型架构是:一个主控SoC(通常是瑞芯微、全志或者NXP的i.MX系列)跑ROS2的导航和调度,一个MCU(STM32F1或者GD32)负责底盘控制、电池管理和安全逻辑。主控和MCU之间用串口或者CAN通信。底盘通常是差速驱动,两个驱动轮加万向轮,电机是直流无刷或者有刷电机,驱动器可能是集成的,也可能是外置的。
为什么AMR的MCU选型这么“低端”?因为底盘控制的计算量真的不大。差速运动学就是两个轮子的速度解算,PID闭环跑100Hz就够了。电池管理主要是电压、电流、温度的采集和SOC估算,也不需要高性能MCU。所以AMR的嵌入式岗位,技术难度不在算法,而在可靠性和成本控制。
可靠性方面,AMR在仓库或者工厂里跑,环境复杂,电磁干扰大,振动也大。我见过一个AMR项目,底盘MCU在实验室跑得好好的,到了现场跑几天就死机。最后查出来是电机驱动器的PWM噪声通过电源线耦合到了MCU的复位引脚,导致MCU误复位。解决办法是在复位引脚上加RC滤波,同时把MCU的电源和电机驱动器的电源做隔离。
成本控制方面,AMR的嵌入式工程师要会“抠”。比如MCU的Flash和RAM要算着用,不能随便加功能;通信协议要尽量简单,减少CPU开销;PCB的层数要尽量少,但EMC还要过。这些在工业机器人或者人形机器人上不太需要考虑的问题,在AMR上都是日常。
4.2 ROS2在AMR上的嵌入式实践
AMR是ROS2在机器人行业落地最广的品类。ROS2的节点化架构、DDS通信、生命周期管理,在AMR上都有实际的应用。但嵌入式工程师在AMR上做ROS2开发,和纯软件工程师做ROS2开发,关注点完全不同。
嵌入式工程师更关注ROS2在资源受限平台上的性能。比如DDS的默认配置在PC上跑没问题,但在ARM SoC上可能会因为内存和CPU的限制导致通信延迟大、丢包。这时候就需要调整DDS的QoS配置,比如把可靠性从RELIABLE改成BEST_EFFORT,把历史深度从10改成1,减少内存占用和网络开销。
另一个常见问题是ROS2和MCU的通信。ROS2的节点通常跑在Linux上,但底盘控制跑在MCU上。两者之间的通信需要一个桥接节点,把ROS2的话题转换成串口或者CAN的帧。这个桥接节点的实时性和可靠性直接影响底盘的响应。我通常会用micro-ROS来做这件事,它专门为MCU设计,可以在STM32上跑ROS2的节点,通过串口或者CAN和Linux上的ROS2通信。
但micro-ROS也有坑。它的默认配置对内存的占用不小,STM32F1这种小容量MCU可能跑不起来。这时候要么换更大的MCU,要么裁剪micro-ROS的功能。我个人的经验是:如果底盘控制的功能不复杂,直接用自定义的串口协议更简单可靠,不一定非要上micro-ROS。ROS2的生态优势在于上层算法,底层的实时控制用传统方式做反而更稳。
4.3 AMR嵌入式工程师的典型技能树
AMR嵌入式岗位的技能树大概是这样的:MCU裸机开发(STM32/GD32)+ RTOS(FreeRTOS/RT-Thread)+ 电机控制(PID、FOC)+ 通信协议(CAN/RS485/串口)+ ROS2基础(节点、话题、TF)+ 传感器驱动(IMU、编码器、激光雷达接口)。
这里面最核心的是电机控制和通信协议。AMR的底盘控制虽然简单,但要做到平顺、安静、省电,PID的参数整定和电机的换相策略都要调。我见过很多AMR的底盘在低速时抖动,或者加减速时噪音大,都是电机控制没调好。
ROS2的部分,AMR嵌入式工程师不需要会写导航算法,但需要会看TF树、会调QoS、会用ros2 topic和ros2 bag来调试。这些技能在ROS2的官方教程里都有,但实际项目中遇到的问题往往更复杂。比如TF树的频率和底盘odom的频率不匹配,导致导航时机器人位置跳变;或者ros2 bag录制的数据因为QoS配置不对,丢了很多帧。这些问题需要你对ROS2的通信机制有深入理解才能排查。
5. 四足机器人:嵌入式实时控制的极限挑战
5.1 四足机器人的关节控制与平衡算法
四足机器人的嵌入式岗位,技术难度介于人形和AMR之间,但对实时性和动态性能的要求非常高。四足机器人有12到16个关节,每个关节都要做力矩控制,控制频率通常在1kHz以上。而且四足机器人的步态切换很快,从站立到行走、小跑、跳跃,关节的负载变化剧烈,对驱动器的动态响应要求很高。
四足机器人的关节驱动器通常用FOC+力矩控制,MCU还是STM32或者C2000。但和工业机器人不同的是,四足机器人的关节不需要绝对的位置精度,而是需要快速的力矩响应和良好的背驱性能。这意味着电流环的带宽要高,减速器的背隙要小,编码器的分辨率要够。
平衡算法是四足机器人的核心,但这部分通常由算法团队负责,嵌入式工程师负责的是把算法算出来的力矩指令准确地执行下去。这听起来简单,做起来难。因为四足机器人的关节在运动中的负载是剧烈变化的,电流环要能快速跟踪力矩指令,同时还要处理反电动势、温度漂移、母线电压波动等问题。
我参与过一个四足项目,遇到的最大问题是关节在高速摆动时的力矩跟踪误差。算法给的力矩指令是正弦波,但实际输出的力矩在波峰和波谷处明显滞后。查了很久,发现是电流环的PI参数在高速时带宽不够,而且反电动势的补偿没有做好。后来把电流环的频率从10kHz提到20kHz,同时加了反电动势的前馈补偿,跟踪误差才降下来。
5.2 四足机器人的通信与传感器融合
四足机器人的通信架构通常是:主控SoC跑ROS2的步态控制和状态估计,通过EtherCAT或者CAN-FD连接12到16个关节驱动器。IMU的数据通过SPI或者串口直接连到主控,用于姿态估计和平衡控制。
IMU的采样率和同步精度对四足机器人至关重要。四足机器人的平衡控制依赖IMU的角速度和加速度数据,如果IMU的数据有延迟或者噪声大,机器人的姿态就会晃。我通常会用1kHz以上的IMU采样率,并且把IMU的采样和关节的控制周期做硬件同步。比如用主控的定时器触发IMU采样,同时触发EtherCAT的周期通信,这样IMU数据和关节数据的时间戳是对齐的。
传感器融合方面,四足机器人通常用IMU+关节编码器+足端力传感器来做状态估计。足端力传感器用于检测触地事件,对步态切换很重要。嵌入式工程师需要确保这些传感器的数据都能实时、准确地传到主控。足端力传感器的信号调理和采样时序是个难点,因为足端在触地瞬间的冲击力很大,传感器容易饱和或者振铃。通常会用低通滤波加峰值检测来处理。
5.3 四足机器人嵌入式的调试经验
四足机器人的调试和别的机器人不太一样,因为它的动态性能太强,很多问题只有在实际跑起来才能发现。我总结了几条经验:
第一,先用仿真验证,但不要迷信仿真。MuJoCo或者Gazebo里的四足机器人跑得再好,到了实物上还是会有各种问题。因为仿真的电机模型、摩擦模型、通信延迟都和实物有差距。我的做法是:仿真里验证算法逻辑,实物上调参数。
第二,关节的零位标定要反复做。四足机器人的关节零位如果偏了几度,走路就会瘸。而且零位会随着温度变化漂移,所以每次跑之前最好都做一次零位校准。校准的方法通常是让关节缓慢转动到机械限位,然后记录编码器的值作为零位。
第三,通信丢包是最大的敌人。四足机器人在跑跳的时候,EtherCAT或者CAN的线缆会受到振动和拉扯,接触不良导致丢包。丢包一次,关节的力矩指令就会丢失,机器人可能直接摔倒。所以线缆的固定和连接器的选型要非常注意,最好用带锁扣的连接器,线缆要走柔性路径。
6. 五类机器人嵌入式岗位的技能对照与转型建议
6.1 技能对照表:你手里的牌对应哪类机器人
下面这张表是我根据实际招聘需求和项目经验整理的,列出了五类机器人嵌入式岗位的核心技能要求。你可以对照一下自己的技能树,看看匹配哪一类。
| 技能项 | 人形 | 工业 | 协作 | AMR | 四足 |
|---|---|---|---|---|---|
| MCU裸机开发 | 必须 | 必须 | 必须 | 必须 | 必须 |
| RTOS | 必须 | 必须 | 必须 | 加分 | 必须 |
| EtherCAT从站 | 必须 | 必须 | 必须 | 不需要 | 加分 |
| CAN/CAN-FD | 加分 | 加分 | 加分 | 必须 | 必须 |
| FOC电机控制 | 必须 | 必须 | 必须 | 加分 | 必须 |
| 功能安全 | 加分 | 必须 | 必须 | 加分 | 不需要 |
| 嵌入式Linux | 必须 | 必须 | 必须 | 必须 | 必须 |
| ROS2 | 加分 | 加分 | 加分 | 必须 | 必须 |
| 力矩控制 | 必须 | 加分 | 必须 | 不需要 | 必须 |
| 传感器融合 | 加分 | 不需要 | 加分 | 加分 | 必须 |
从这张表可以看出,工业机器人和协作机器人的技能重合度最高,AMR和四足在通信协议上有重合,人形机器人的技能要求最全面但也最专。如果你现在做AMR想转人形,缺的主要是EtherCAT和力矩控制;如果你做工业想转协作,缺的是力控和功能安全的深度。
6.2 转型路径:从一类机器人跳到另一类
转型这件事,我的建议是先横向再纵向。横向是指在同一类机器人里从MCU做到Linux,或者从驱动做到系统;纵向是指从一类机器人跳到另一类。横向转型的风险小,因为底层技能是通用的;纵向转型的风险大,因为很多领域知识需要重新学。
如果你确定要纵向转型,我建议按这个顺序补技能:
- 通信协议:EtherCAT和CAN-FD是机器人行业最通用的两种总线,花两周时间把协议栈和从站开发搞明白,比什么都值。
- 电机控制:FOC是基础,但不同机器人对电机控制的要求不同。人形和四足要求高带宽和力矩控制,工业要求高精度和确定性,AMR要求低成本和可靠性。理解这些差异比会调PID更重要。
- ROS2:不用学到能写导航算法的程度,但要能看懂TF树、会调QoS、会用ros2 bag和rviz2调试。这些在ROS2的官方教程里都有,但实际项目中遇到的问题更复杂。
- 功能安全:如果你要转工业和协作,这是必修课。ISO 13849和IEC 61508的标准要了解,STO、SLS这些安全功能的实现要清楚。
6.3 面试中如何展示你的机器人嵌入式经验
最后说点实际的。面试机器人嵌入式岗位时,面试官最看重的是你解决过什么具体问题,而不是你会用什么工具。我面过很多人,简历上写“精通STM32、熟悉ROS2、了解EtherCAT”,但一问细节就露馅。
我的建议是:准备两到三个有深度的项目案例,每个案例能讲清楚背景、问题、分析过程、解决方案和结果。比如:
- 你在AMR上遇到过底盘在低速时抖动的问题,怎么通过调整电流环的采样时序和PID参数解决的;
- 你在工业机器人上遇到过EtherCAT同步误差导致轨迹精度下降的问题,怎么通过优化拓扑和DC配置解决的;
- 你在四足机器人上遇到过关节力矩跟踪滞后的问题,怎么通过提高电流环频率和加前馈补偿解决的。
这些案例比任何证书都有说服力。因为机器人嵌入式岗位的核心能力就是在复杂的机电系统中定位和解决问题,而不是会用某个工具。
提示:面试时如果被问到“你为什么从AMR转到人形”,不要只说“想挑战自己”。要说清楚你对人形机器人嵌入式架构的理解,以及你现有的技能如何迁移过去。比如“我在AMR上做的电机控制和通信协议,在人形机器人的关节驱动器上同样适用,我需要补的是EtherCAT同步和力矩控制的部分。”
7. 一些踩过的坑和实操心得
7.1 通信协议选型的坑
我见过太多团队在通信协议上走弯路。最常见的错误是用CAN做原型,产品阶段想切EtherCAT。CAN的开发确实简单,STM32自带CAN控制器,几行代码就能通。但CAN的带宽和节点数限制决定了它只能做原型,不能做产品。而且CAN和EtherCAT在软件架构上的差异很大,从CAN切到EtherCAT不是换个驱动的事,整个通信层都要重写。
我的建议是:如果项目确定要做多关节机器人,一开始就上EtherCAT。EtherCAT从站芯片的选型和SSC协议栈的移植确实有门槛,但网上有很多开源的参考设计,花两周时间能跑通。这比后期切换的成本低得多。
另一个坑是忽略通信的实时性。很多团队在实验室里跑CAN或者EtherCAT,觉得没问题,到了现场就丢包。因为实验室的线缆短、干扰小,现场的线缆长、电机干扰大。所以通信的测试一定要在真实环境下做,线缆长度、走线方式、连接器类型都要和产品一致。
7.2 电机控制的坑
电机控制是机器人嵌入式的核心,但也是最容易出问题的地方。我总结几个常见的坑:
第一,电流采样的时机不对。FOC的电流采样必须在PWM的中心对齐点进行,否则采到的电流是开关噪声。很多MCU的ADC有专门的触发源,要和PWM的计数器配合。如果采样时机偏了,电流环的噪声会很大,力矩控制就不准。
第二,死区补偿没做好。MOS管的死区会导致输出电压和占空比不成线性,低速时尤其明显。死区补偿的方法是根据电流方向调整占空比,但电流过零时的方向判断很难。我通常会用电流观测器来估算实际电流,而不是直接用采样值判断方向。
第三,温度漂移没补偿。MOS管的导通电阻和电流传感器的增益都会随温度变化,导致力矩控制的精度下降。如果机器人要连续工作,温度补偿是必须的。简单的方法是用NTC测MOS管的温度,然后查表补偿。
7.3 嵌入式Linux的坑
机器人嵌入式岗位基本都要求会嵌入式Linux,但很多人对Linux的理解停留在“会敲命令”的层面。实际项目中,嵌入式Linux的坑主要在实时性和驱动上。
实时性方面,标准的Linux内核在机器人控制这种硬实时场景下是不够的,需要打PREEMPT_RT补丁。但打了补丁之后,系统的吞吐量会下降,而且有些驱动可能不兼容。我通常的做法是:把硬实时的任务放到MCU上,Linux只做非实时的规划和管理。这样既保证了实时性,又避免了Linux实时化的复杂性。
驱动方面,机器人上常见的驱动包括EtherCAT主站、CAN、串口、IMU的SPI/I2C、摄像头的MIPI等。这些驱动的调试往往比应用开发更耗时。我建议嵌入式工程师至少要会看设备树、会写简单的字符设备驱动、会用示波器和逻辑分析仪抓时序。
7.4 调试工具和方法的坑
最后说调试。机器人嵌入式的调试和消费电子完全不同,因为机器人是机电系统,问题可能出在硬件、固件、算法、通信任何一个环节。我常用的调试工具包括:
- 示波器:看PWM、电流采样、通信波形,是最基本的工具;
- 逻辑分析仪:抓SPI、I2C、CAN的时序,比示波器方便;
- EtherCAT主站工具:比如TwinCAT或者SOEM,可以看从站的状态和同步误差;
- ROS2的调试工具:ros2 topic、ros2 bag、rviz2,用于看上层的数据流。
调试方法上,我的原则是先隔离再定位。比如机器人走路不稳,先看是单个关节的问题还是所有关节的问题。如果是单个关节,就查该关节的驱动器和通信;如果是所有关节,就查主控和通信总线。隔离之后,再用示波器或者逻辑分析仪抓具体的信号,定位到具体的代码或者电路。
注意:机器人调试时一定要做好安全防护。四足和人形机器人在调试时可能会突然失控,所以要么把机器人吊起来,要么在周围放软垫。我见过一个团队调试四足时机器人突然跳起来撞到天花板,幸好没伤到人。
8. 最后再说几句实在的
写了这么多,其实核心就一句话:机器人嵌入式岗位的差异,本质上是实时性、通信协议和功能安全这三个维度的不同组合。人形和四足在实时性上最极端,工业和协作在功能安全上最严格,AMR在成本和可靠性上最敏感。你手里的技术底牌,决定了你适合哪一类,以及要补什么才能跨过去。
我个人的体会是,不要盲目追热点。人形机器人现在很火,但岗位数量远不如AMR和工业机器人。而且人形机器人的嵌入式岗位对经验的要求很高,没有三五年电机控制和通信协议的积累,很难上手。如果你现在做AMR,想转人形,我建议先在AMR上把电机控制和ROS2做深,然后找机会接触EtherCAT和力矩控制的项目,再考虑跳。
另外,机器人行业的一个特点是软硬件结合非常紧密。纯软件工程师在机器人公司往往吃不开,因为很多问题需要看波形、量电压、改电路。嵌入式工程师的优势就在这里,你既能写代码,又能看硬件,这是机器人公司最需要的能力。所以不管你做哪一类机器人,保持对硬件的敏感度,不要把自己变成只会写代码的人。
这个内容后续还可以这样扩展:如果你对某一类机器人的嵌入式细节特别感兴趣,比如EtherCAT从站的开发或者FOC的电流环设计,可以单独拿出来做深度的实操分享。我后面也会陆续写一些具体的调试案例和代码实现,有兴趣的可以关注。