[具身智能-805]:运动功能分解
如果说 STM32 运动控制扩展板把各个电机的运动速度转化为 MCU 的 IO 操作指令以及实际电机的驱动电流信号,那么把用户的期望转化为每个轮子的转化速度是哪个硬件和软件模块实现的?把轮子的旋转速度转化为每个电机的旋转速度是哪个硬件和软件模块实现的?
整体数据流:
用户手柄 / 上位机期望 (\(V_x,V_y,\omega\)) → 运动学解算模块 → 各个轮子目标线速度 → 轮子的转速度→电机转速换算模块 → 电机目标转速 (rpm) → STM32 扩展板外设 (PWM/TIM) IO 输出 → 驱动芯片 (AM2857 等) 输出驱动电流 → 电机转动 → 编码器采样回传
注意区分概念:
- 轮子线速度:轮子接触地面,单位 m/s(车体运动层面)
- 电机转轴转速:电机轴转速,单位 rpm /rad/s;经过减速箱减速之后才是轮子转速。
问题 1:把用户期望(\(V_x,V_y,\omega\))转化为每个轮子的目标线速度,哪个模块?
✅软件模块:运动学解算模块(运行在下层 STM32 扩展板 MCU 里面,软件代码)
- 硬件:没有专门硬件芯片做这件事,纯 CPU 软件运算。
- 输入:上位机 / 手柄下发的车体期望:\(V_x、V_y、\omega\)(用户的运动诉求)
- 内部逻辑:执行麦克纳姆轮 / 阿克曼 / 滑移四驱逆运动学公式,矩阵、三角函数计算。
- 输出:每个车轮的目标地面线速度 m/s。
实例:麦克纳姆轮输入 Vx=0.2m/s,Vy=0,ω=0;运动学软件算出 4 个轮子各自目标线速度。
阿克曼底盘:用户期望速度、转弯曲率,运动学软件输出后轮线速度、前轮目标转向角。
❗关键点:这一步不在 RDK X5/ROS 上层主控运行,一般放在 STM32;上层只下发车体期望,不做轮子换算。 没有专用硬件芯片,就是普通 C 语言代码,CPU 做浮点数运算。
问题 2:把轮子旋转线速度 → 电机转轴目标转速,哪个模块?
✅软件模块:减速比换算模块(同样运行在 STM32 软件层) 输入:车轮目标线速度 (m/s)
- 通过轮子半径,把轮子线速度,换算成车轮的角速度 (rad/s)
\(\omega_{wheel}= \frac{v_{wheel}}{R_{wheel}}\) 2. 再带入减速箱减速比 G(JGB37‑520 减速电机,例如 1:30):
\(\omega_{motor}= \omega_{wheel} \times G\) 输出:电机轴的目标转速(rad/s 或者 rpm)。
举例:轮子线速度 0.5m/s,轮子半径 0.032m,减速比 30,软件直接算出电机轴应该跑多快。
这一步也是纯数学换算,没有专用硬件芯片,纯软件计算。
后续链路:电机目标转速 → IO 指令 → 驱动电流
电机目标转速 (rpm) → 电机 PID 软件模块(STM32 内部,定时器中断运行) PID 输入:目标电机转速;编码器读到的实际电机转速。 PID 输出:PWM 占空比目标值。
- STM32 硬件外设(定时器 TIM):软件设置寄存器,生成 PWM 方波 IO 电平信号(IO 操作指令)。
- 信号输出到驱动芯片(AM2857):接收 PWM、方向 IO;驱动芯片内部功率管,把 3.3V 逻辑信号,转换成大电流驱动电机绕组,也就是电机驱动电流信号。
编码器反向链路:电机转动,编码器 A/B 脉冲 → STM32 定时器编码器硬件外设,硬件计数,软件读取计数值,换算得到真实电机转速,反馈给 PID。
完整分层表,软硬件归属
表格
| 环节 | 功能 | 硬件 | 软件模块(运行位置:STM32 扩展板) |
|---|---|---|---|
| 1 | 用户期望\(V_x,V_y,\omega\) → 各车轮目标线速度 | 无专用硬件,CPU 运算 | 逆运动学解算(麦克纳姆 / 阿克曼 / 滑移) |
| 2 | 车轮线速度 → 电机转轴目标转速 | 无专用硬件,CPU 运算 | 轮子半径、减速比换算 |
| 3 | 电机目标转速 → PWM 占空比输出值 | 无硬件,CPU 运算 | 电机 PID 闭环算法(定时器中断) |
| 4 | PWM 占空比 → IO 引脚 PWM 方波信号 | STM32 TIM 定时器外设(硬件) | 配置定时器寄存器,更新占空比 |
| 5 | IO 逻辑电平 → 电机大驱动电流 | AM2857 驱动芯片功率硬件 | 方向引脚电平控制 |
重要澄清几个容易混淆点
- 运动学、减速比换算、PID 全部是软件算法,没有独立专用芯片,全部跑在 STM32 这个通用 MCU 里面。STM32 只是通用 CPU,靠代码实现这些逻辑;只有 PWM 波形生成、编码器脉冲计数是 MCU 片上硬件外设。
- 上层 RDK X5(ROS)只下发车体运动期望 Vx Vy ω,不做运动学,不做减速换算,不跑 PID。这些全部下沉 STM32。
- 驱动芯片 AM2857 只做一件事:接收 3.3V 的 PWM 和方向信号,输出大电流给电机;它完全不知道转速、轮子、运动学,它只管功率放大。
通俗比喻
- 运动学软件:翻译官,把 “小车往右横移” 翻译成 “每个轮子跑多快”。
- 减速换算软件:转换器,把 “轮子跑多快”,换算成 “电机轴要转多快(考虑齿轮减速箱)”。
- PID 软件:监工,盯着编码器反馈,调整输出。
- STM32 定时器硬件:干活的,输出 PWM 方波。
- AM2857 驱动:功率放大器,把微弱 IO 信号变成大电流带动电机。
和前面闭环哲学联系
运动学 + 减速换算,输出的全部是理论目标值(开环期望);
现实世界扰动(负载、电压、打滑),真实电机达不到目标,依靠编码器反馈 + PID 闭环来修正。
运动学只管 “应该怎么样”,PID 负责 “尽量做到怎么样”。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)