第四节:分拣算法数学基础——坐标变换、路径规划、运动学模型

各位工程师朋友,咱们今天聊点硬核的。分拣机跑得快不快,准不准,说到底就靠三样东西:坐标变换路径规划运动学模型。这三样东西,我当年刚入行时觉得就是数学课本上的公式,直到在产线上被现实狠狠教育了一回……嗯,咱们慢慢说。

4.1 坐标变换:别让传感器骗了你

先问个问题:你相机看到的坐标,和机械臂抓取的位置,是同一个点吗?

答案显然不是。相机有相机的坐标系,机械臂有机械臂的坐标系,传送带还有传送带的坐标系。这三个坐标系如果不做变换,你抓到的只能是空气。

我个人习惯把坐标变换分成三步走:

  1. 像素坐标 → 相机坐标:内参标定,去畸变
  2. 相机坐标 → 机械臂基坐标:手眼标定,求变换矩阵
  3. 机械臂基坐标 → 末端执行器坐标:正运动学计算

这里有个坑,我曾经踩过。有一次在调试高速分拣机,发现抓取位置总是偏2-3毫米。查了半天,原来是传送带在高速运行时产生了微小的振动,导致相机标定板的位置发生了偏移。从那以后,我每次做手眼标定都会让传送带先跑起来,模拟真实工况。

核心公式:齐次变换矩阵

// 二维齐次变换矩阵
T = | cosθ  -sinθ  tx |
    | sinθ   cosθ  ty |
    |  0      0     1  |

// 实际应用:将像素点P转换到机械臂坐标系
P_robot = T_cam2robot * P_camera

我的小技巧:在嵌入式平台上,别直接用浮点矩阵运算。把三角函数查表存好,用定点数做变换,速度能快3-5倍。

4.2 路径规划:不是走直线那么简单

你想想看,分拣机每秒要抓取3-5个物品,每个物品的运动轨迹如果都是直线加减速,那机械臂的关节早就散架了。路径规划的核心,说白了就是在最短时间内,用最平滑的轨迹,把物品从A点送到B点

我常用的路径规划方法有三种:

方法 适用场景 优点 缺点
S型速度曲线 重物、大惯性 冲击小,定位准 计算量大
T型速度曲线 轻小物品 实现简单,响应快 加减速有冲击
多项式插值 高速连续分拣 轨迹平滑,可定制 参数调优麻烦

在实际项目中,我建议用分段多项式插值。举个例子,抓取点到放置点之间,分成三段:加速段、匀速段、减速段。每段用三次多项式拟合,保证速度和加速度连续。

三次多项式插值示例

// 位置:p(t) = a0 + a1*t + a2*t^2 + a3*t^3
// 速度:v(t) = a1 + 2*a2*t + 3*a3*t^2
// 加速度:a(t) = 2*a2 + 6*a3*t

// 边界条件:p(0)=0, p(T)=L, v(0)=0, v(T)=0
// 解得:
a0 = 0
a1 = 0
a2 = 3*L / T^2
a3 = -2*L / T^3

注意:在嵌入式MCU上,三次多项式的计算要小心浮点溢出。我习惯把所有系数放大1000倍用整数算,最后再缩回来。精度够用,速度翻倍。

4.3 运动学模型:算得快才能抓得准

运动学模型,说白了就是知道关节怎么动,末端才能到指定位置。分拣机常用的有直角坐标、SCARA、Delta三种构型。咱们重点说Delta,因为它在高速分拣领域用得最多。

Delta机器人的正运动学其实不难:给定三个主动臂的角度,求末端位置。但逆运动学就有点意思了——给定末端位置,反推三个主动臂的角度。这个计算如果慢了,分拣速度就上不去。

我记得有一次优化Delta的逆运动学,原代码用了30多个三角函数调用,算一次要200微秒。后来我把所有几何关系画成图,发现很多中间变量可以复用。优化后只用了8个三角函数,算一次只要50微秒。嗯,这就是经验的价值。

Delta逆运动学简化流程

// 输入:末端位置 (x, y, z)
// 输出:三个主动臂角度 (θ1, θ2, θ3)

// 1. 将末端位置转换到每个臂的局部坐标系
// 2. 求解每个臂的几何三角形
// 3. 用余弦定理计算角度

// 核心公式(以臂1为例):
L = sqrt(x^2 + y^2 + (z - base_height)^2)
cosθ1 = (L^2 + a^2 - b^2) / (2 * L * a)
θ1 = acos(cosθ1) + atan2(z - base_height, sqrt(x^2 + y^2))

避坑指南:我曾经在逆运动学里直接用atan2(y, x)算角度,结果在x接近0时出现数值不稳定。后来改成先判断象限,再用查表法近似,稳定多了。

4.4 三者的协同:一个完整的抓取周期

好了,咱们把这三样东西串起来,看看一个完整的抓取周期是怎么跑的:

  1. 视觉触发:相机拍到物品,输出像素坐标
  2. 坐标变换:像素坐标 → 机械臂基坐标 → 抓取点坐标
  3. 路径规划:根据当前机械臂位置和抓取点,生成S型速度曲线
  4. 运动学计算:将路径上的每个插值点,通过逆运动学算出关节角度
  5. 伺服执行:把关节角度发给驱动器,电机开始运动

整个流程必须在1-2毫秒内完成,否则跟不上传送带的速度。所以,算法优化不是锦上添花,而是生死攸关。

性能指标参考

环节 耗时要求 优化方向
坐标变换 < 200μs 定点数、查表
路径规划 < 500μs 预计算、分段缓存
运动学计算 < 300μs 公式化简、复用中间量

最后说一句,数学基础这东西,光看书没用。我建议你找个实际的Delta机器人,把坐标变换、路径规划、运动学模型全部手写一遍,跑在STM32或者国产MCU上。跑通了,你就真正懂了。

下一节咱们聊传感器数据融合,讲讲怎么把编码器、视觉、激光的数据揉在一起,让分拣机更聪明。到时候见。