4、运动控制基础:刚体运动学与动力学简介、关节空间与任务空间、正运动学与逆运动学、控制模式(位置/速度/力矩)
各位同学,欢迎来到第四讲。
说实话,运动控制是整个机器人仿真里最硬核的部分。你想想看,一个机器人要动起来,背后牵扯的东西其实挺多的。我当年刚入行时,以为给个速度指令它就能跑,结果机器人直接飞出去了——嗯,那场面挺尴尬的。
这一章,咱们就把运动控制的底子打扎实。我会尽量用大白话讲清楚,但该有的公式和概念,一个都不会少。
4.1 刚体运动学与动力学:到底有啥区别?
先问个问题:你让机器人手臂从A点走到B点,你关心什么?
如果你只关心它走到哪、姿势对不对,那就是运动学。如果你还关心它要用多大的力、关节会不会过热、电机能不能扛住,那就是动力学。
说白了,运动学只管“怎么动”,动力学管“为什么能这么动”。
核心区别速记:
- 运动学:位置、速度、加速度之间的关系,不考虑力。
- 动力学:力、力矩与运动之间的关系,考虑质量、惯性、摩擦。
我在做四足机器人仿真时,曾经只用了运动学模型,结果仿真跑得挺顺,一上真机就抖成筛子。后来才发现,没考虑关节的动力学特性——说白了,就是没算电机要出多大力才能跟上那个速度。
4.2 关节空间 vs 任务空间
这两个概念,我建议你从一开始就分清楚。不然以后写代码会晕。
关节空间,就是每个关节的角度值。比如一个六轴机械臂,关节空间就是一个六维向量:[θ₁, θ₂, θ₃, θ₄, θ₅, θ₆]。
任务空间(也叫操作空间),是机器人末端在三维空间里的位置和姿态。比如:[x, y, z, roll, pitch, yaw]。
你想想看,你让机器人去抓杯子,你脑子里想的是“末端到杯子那里去”——这是任务空间。但电机实际执行的是“关节转多少度”——这是关节空间。
我的习惯:在仿真环境里,我一般先在任务空间规划轨迹,再通过逆运动学转到关节空间去执行。这样逻辑更清晰,调试也方便。
4.3 正运动学与逆运动学
这两个是运动控制里最基础、也最绕的内容。我尽量讲得直白些。
4.3.1 正运动学:已知关节角度,求末端位姿
这个相对简单。你给每个关节一个角度,通过几何关系或者DH参数法,就能算出末端在哪儿。
举个例子,一个两连杆机械臂:
import numpy as np
def forward_kinematics(theta1, theta2, l1, l2):
x = l1 * np.cos(theta1) + l2 * np.cos(theta1 + theta2)
y = l1 * np.sin(theta1) + l2 * np.sin(theta1 + theta2)
return x, y
# 试试看
print(forward_kinematics(np.pi/4, np.pi/4, 1.0, 1.0))
正运动学的好处是:一定有解,而且唯一。你给什么角度,末端就在哪,不会出幺蛾子。
4.3.2 逆运动学:已知末端位姿,求关节角度
这个就麻烦了。你告诉机器人“把手伸到那个点”,它得自己算每个关节该转多少度。
逆运动学有几个特点:
- 可能无解:目标点太远,手臂够不着。
- 可能多解:同一个点,手臂可以“肘朝上”也可以“肘朝下”。
- 可能有奇异点:某些姿态下,关节速度会突变。
我曾经踩过的坑:在做逆运动学求解时,直接用了数值迭代法(比如牛顿法),结果初始值选得不好,迭代发散,机器人直接“抽风”。后来我学乖了——先给一个合理的初始猜测,或者用解析法求闭式解。
对于六轴机械臂,逆运动学通常用解析法(如果有闭式解)或者数值法(比如IKFast、TRAC-IK)。我个人建议,仿真阶段先用数值法,灵活;真机阶段再用解析法,稳定。
4.4 控制模式:位置、速度、力矩
这一节,咱们聊聊电机怎么干活。
大多数机器人关节电机都支持三种控制模式。我分别说说它们的区别和适用场景。
| 控制模式 | 输入 | 输出 | 典型场景 |
|---|---|---|---|
| 位置控制 | 目标角度 | 电机转到指定角度 | 点到点运动、示教再现 |
| 速度控制 | 目标角速度 | 电机以指定速度旋转 | 传送带跟踪、连续运动 |
| 力矩控制 | 目标力矩 | 电机输出指定力/力矩 | 力控打磨、柔顺控制、人机协作 |
4.4.1 位置控制
这是最常用的模式。你告诉电机“转到30度”,它就老老实实转过去。内部靠PID闭环保证精度。
优点是简单、稳定。缺点是太“硬”——如果碰到障碍物,它会死磕,可能损坏电机或撞坏东西。
4.4.2 速度控制
你告诉电机“以每秒10度的速度转”,它就保持这个速度。至于转到哪停,那是上层的事。
这种模式在移动机器人底盘上很常见。我记得做AGV小车时,左右轮用速度控制,差速转向,效果很好。
4.4.3 力矩控制
这是最“高级”的模式,也是强化学习最常用的模式。你告诉电机“输出5牛米的力矩”,电机就老老实实出力。
为什么RL常用力矩控制?因为RL算法输出的是动作,而动作在物理世界里本质就是力。你让机器人学“怎么用力”,比学“转到哪个角度”更自然、更灵活。
我的建议:如果你刚开始做RL运动控制,先从力矩控制入手。虽然调参麻烦点,但上限高。位置控制虽然稳,但学出来的策略往往很“僵硬”,泛化能力差。
4.5 本章知识体系总览
说了这么多,我画了一张图帮你理清思路。这张图把本章的核心概念串起来了:
这张图你看明白了吗?从上往下看:运动控制分为运动学和动力学两条线。运动学管关节空间和任务空间的映射,动力学管力与运动的关系。最后,所有理论都要落地到三种控制模式上。
我个人觉得,这张图的价值在于:它告诉你每个知识点在全局中的位置。以后你遇到具体问题,比如“机器人抖得厉害”,你就能快速定位——是动力学参数没调好?还是控制模式选错了?
好了,这一章的内容就到这。运动控制是后面所有仿真和RL算法的基础,建议你多花点时间消化。下一章咱们开始搭建第一个仿真环境,到时候这些概念都会用上。
公众号:蓝海资料掘金营,微信deep3321