为什么机器人比纯软件难一个数量级
写软件时,世界是离散的、确定的、可回滚的——git reset --hard 能解决大部分人生难题。
机器人不一样:
- 电机有惯性,地面有摩擦,传感器有噪声
- 没有 Ctrl+Z。机械臂撞到人,就是撞到了
- 宇宙不会抛出异常,它直接抛出你的机器人
物理世界是最严格的代码审查员。
运动学:机器人的"几何直觉"
正运动学(FK):已知各关节角度,求末端在哪里。
$$\mathbf{x} = f(\boldsymbol{\theta}), \quad \boldsymbol{\theta} = [\theta_1, \theta_2, \dots, \theta_n]^T$$逆运动学(IK)才是硬菜:已知想让末端去 $\mathbf{x}$,反求各关节该转多少。
$$\boldsymbol{\theta} = f^{-1}(\mathbf{x})$$问题在于 $f^{-1}$ 通常没有解析解,甚至有无穷多解——你的手可以伸到同一个杯子,肘部却可以摆出完全不同的姿势。机器人得自己"决定"怎么动,这里面全是优化问题。
一个两轮小车的速度分解
差速驱动是入门第一课。左轮 $v_l$、右轮 $v_r$、轮距 $L$:
$$v = \frac{v_r + v_l}{2}, \qquad \omega = \frac{v_r - v_l}{L}$$ | |
看着简单?等轮胎打滑、编码器丢脉冲、地面有个 2° 的斜坡,你就明白为什么机器人博士要读五年。
ROS2:机器人的神经系统
把机器人拆成节点(Node),节点之间用话题(Topic)发消息:
| |
ROS2 相比 ROS1 的杀手锏是 DDS 通信——去中心化的发布订阅,天生为分布式实时系统而生。之前 ROS1 那个 roscore 单点故障,终于进了历史垃圾堆。
物理彩蛋:倒立摆
机器人学的"Hello World"不是走路,是倒立摆——一根杆子立在移动小车上不许倒。
它是不稳定平衡点问题:$\theta = 0$ 处势能最高,任何微扰都会发散,必须持续反馈控制。这和人生一样——所谓稳定,不过是持续的主动纠偏。
折腾清单
- 攒一台差速底盘,跑通 SLAM(gmapping → Cartographer)
- 给机械臂写 IK 求解器,先数值解再解析解
- 倒立摆实物:电位器测角度 + PID 调参地狱
- 终极目标:把 LLM 接上机器人,让它听懂"帮我把桌上的可乐拿过来"