坐标系与运动学基础:从“我在哪”到“怎么去”
各位同学,大家好。我是你们这门课的老朋友,一个在运动控制领域摸爬滚打了十几年的工程师。今天咱们开始第一讲,聊聊坐标系和运动学。
你想想看,让一个机器人动起来,最核心的问题是什么?说白了就两个:“它现在在哪?” 和 “怎么到那去?”。坐标系就是回答第一个问题的,运动学就是回答第二个问题的。这两件事搞不明白,后面所有的插补算法都是空中楼阁。
1. 三种坐标系:你总得选一个“参考系”
我刚开始做项目那会儿,最头疼的就是坐标系搞混。有一次调试六轴机器人,明明示教器上位置数据看着没问题,一跑起来就撞工具。查了半天,原来是工具坐标系没设对。嗯,从那以后,我对坐标系就特别敏感。
咱们做多轴插补,主要打交道的是这三种坐标系:
- 笛卡尔坐标系(直角坐标系):就是咱们初中数学学的X、Y、Z。描述的是末端执行器在空间中的绝对位置和姿态。比如“把焊枪移动到X=100, Y=200, Z=50的位置,并且让焊枪垂直于地面”。这是最直观的,也是我们做轨迹规划时最常用的。
- 关节坐标系:描述的是每个电机轴转了多少角度。比如“J1轴转了30度,J2轴转了-45度”。你想想看,对于六轴机器人,你直接告诉它每个关节转多少度,它就能动。但问题是,你很难直观地想象出末端到底在哪。这就像你只知道胳膊肘弯了多少度,但不知道手在哪儿。
- 工具坐标系(TCP,Tool Center Point):这个特别重要。它是以工具末端为原点建立的坐标系。比如你装了一个焊枪,TCP就在焊丝尖上;装了一个夹爪,TCP就在夹爪中心。我个人的习惯是,每换一次工具,第一件事就是标定TCP。否则你让机器人走直线,它走的其实是工具根部在走直线,末端早偏了。
核心理解: 笛卡尔坐标系是“目标导向”,关节坐标系是“执行导向”,工具坐标系是“工艺导向”。三者缺一不可。
2. 正运动学:知道关节角度,求末端位置
正运动学,说白了就是“已知各关节转了多少,求手在哪儿”。这是一个确定的、唯一的过程。
我记得刚入行时,师傅让我手算一个SCARA机器人的正解。那时候没有现成的库,我就拿着D-H参数表,一个矩阵一个矩阵地乘。算完一遍,对机器人的几何结构理解就深了一层。
正运动学的数学本质就是矩阵连乘。对于串联机器人,从基座到末端,每个关节对应一个变换矩阵,把这些矩阵乘起来,就得到了末端位姿。
# 伪代码示例:正运动学计算
def forward_kinematics(joint_angles):
# joint_angles = [theta1, theta2, theta3, ...]
T = identity_matrix() # 从基座开始
for i in range(len(joint_angles)):
T_i = dh_transform(a_i, alpha_i, d_i, joint_angles[i])
T = T * T_i
# T 矩阵包含了位置 (x, y, z) 和姿态 (旋转矩阵)
position = T[0:3, 3]
orientation = T[0:3, 0:3]
return position, orientation
我的经验: 写正运动学代码时,一定要先验证单位。角度是弧度还是度?长度是毫米还是米?我曾经因为单位问题,让一个价值百万的机器人差点撞了墙。从那以后,所有输入参数我都强制加单位检查。
3. 逆运动学:知道末端位置,求关节角度
逆运动学就难多了。它是“已知手要放到哪,求每个关节该转多少”。
为什么难?因为逆解通常不是唯一的。你想想看,你的手要摸到桌子上同一个点,胳膊肘可以朝上,也可以朝下,这就是两种解。对于六轴机器人,最多可能有8组逆解。
而且,有些位置是“够不着”的,这就是奇异点。比如你胳膊完全伸直了,还想再往前伸一点,那是不可能的。在奇异点附近,关节速度会变得非常大,非常危险。
# 伪代码示例:逆运动学求解思路
def inverse_kinematics(target_pose):
# target_pose: 目标位置和姿态
# 方法1:解析法(适用于特定构型,如6轴有封闭解)
if has_analytical_solution():
solutions = analytical_solve(target_pose)
else:
# 方法2:数值法(迭代求解,通用但慢)
solutions = numerical_solve(target_pose, initial_guess)
# 从多组解中选最优
best_solution = select_best(solutions, current_joint_angles)
return best_solution
避坑指南: 我曾经在做一个喷涂机器人项目时,逆解算法没处理好奇异点。机器人走到工作空间边界时,J4轴突然以每秒500度的速度旋转,差点把气管拧断。所以,逆解一定要加关节限位检查和速度平滑处理。
4. 知识体系总览
为了让大家更直观地理解这三者之间的关系,我画了一张图。你看,整个运动控制的逻辑链条是这样的:
从这张图你可以看到,我们做轨迹规划时,是在笛卡尔坐标系下规划路径(比如走一条直线或圆弧),然后通过逆运动学,把路径上的每个点转换成关节角度,最后发给电机去执行。反过来,如果你想验证电机实际走到了哪,就用正运动学算一下末端位置。
5. 一个简单的对比表格
| 特性 | 笛卡尔坐标系 | 关节坐标系 | 工具坐标系 |
|---|---|---|---|
| 直观性 | 高(人眼可见) | 低(需要想象) | 中(依赖工具) |
| 控制对象 | 末端位姿 | 电机角度 | 工具末端 |
| 插补难度 | 容易(直线/圆弧) | 困难(非线性) | 中等(需转换) |
| 典型应用 | 轨迹规划、示教 | 单轴调试、回零 | 焊接、涂胶、抓取 |
总结一下: 坐标系是运动控制的“语言”,运动学是“翻译器”。正运动学把关节语言翻译成笛卡尔语言,逆运动学则反过来。搞懂了这两件事,你就能让机器人听懂你的指令,指哪打哪。
好了,这一章的内容就到这里。坐标系和运动学是后面所有插补算法的基础,一定要吃透。下一章我们会深入具体的插补算法,到时候这些概念会反复用到。