引言
在真实需求中,当我们的机械臂已经拿到了一支笔,那怎么设定轨迹让它画一只鸭子之类的呢,或者怎么样让机械臂拿到杯子后挂在墙上呢?我们需要知道手臂状态(位置状态、速度状态)和时间的关系,从而拟合出一条连续(重点)的曲线供机械臂达到目的。这就属于“轨迹规划”内容了。
目录
Joint space、Actuator space、Cartesian space的区别
Joint 、Cartesian space下轨迹规划的优缺点
如何拟合曲线 (重点)
轨迹规划
说白了就是给你两个位置点,起始点和终点,你自己定义中间点(via point),把起始点和终点用平滑曲线连起来就行。
其实就是拟合曲线嘛.........
我理解的轨迹规划的核心目的在于得到关节的驱动数值的连续平滑曲线,也就是说主要是求解曲线的未知参数。如果没有关节的驱动,你怎么到达目标位置?
轨迹:机械手臂末端点或参做点的位置、速度、加速度对时间的历程。
轨迹规划的好处:轨迹规划后,可以使用不同形态类型的机械臂使用相同轨迹。
理想轨迹是物体运动的位置连续,速度也是连续的。我们都知道,假如速度不连续,忽大忽小,这就要求它的加速度突然变大,这会给机械臂关节造成力的负担,很大可能出现误差,因此我们的轨迹规划最好是连续的。在轨迹规划下,还分两种类型的规划:Joint space、Certesian space下的轨迹规划,在这先解释下。
Joint space、Actuator space、Cartesian space的区别
由该图可以看到:
Joint space:提供了关节驱动的数值
,使得我们可以顺向计算出手臂末端的位置
Cartesian space:提供手臂P相对{W} 的向量位置,即
,逆向反推出达到这个位置需要的驱动数值
Actuator space:提供了马达的状态数值,以确保得出最终关节的驱动数值(详见(三)扩展中的复合型关节的案例)
[前提假设]
我们的机械臂是六个自由度的,六个关节都是转轴驱动的。也假设我们已经定义好了起始、中间、终点的位置信息和姿态信息。代表了我们的手末端的位置,
代表了手末端的姿态,这两个是我们的需求点。
-
Joint space下的轨迹规划
1)知道位置,就能通过逆向运动学(IK),反向求解出有六个自由度的机械臂它六个转轴需要的角度。
2)拟合曲线,就是轨迹规划啦,得到这些点连续平滑的函数表示(多种)。就是找函数关系(横纵轴的映射)。
3)再借由顺向运动学(FK)验证这个函数能否经过我们在(1)定义好的点,使得机械臂通过我们规定的点,达到我们想要的位置,以此测试函数是否正确。
4)检验可行性,比如这个轨迹是不是可能会撞到现实空间中的某些东西之类的。
-
Cartesian space下的轨迹规划
1)拟合曲线,直接做轨迹规划,找出他们的函数式。
2)逆向求解出达到这个位置需要机械臂的每个转轴转动的度数,检验求解出的角度是否超出了机械臂转动角度的最大范围等。
3)检验可行性,检测该轨迹在现实中是否会碰到障碍物。
-
Joint 、Cartesian space下轨迹规划的优缺点
一般都是用Cartesian space做规划,因为这个更直接地符合我们的需求,直接根据需求得到轨迹就行了啊,步骤少。然而它有一个缺点是它计算量相对于Joint space大得多,因为我们是先对手臂需要的姿态位置
拟合它的曲线(从几个点变成了无数个点),然后才去计算驱动关节需要的角度——反推出好多好多个姿态位置下与之一一对应的所有驱动角度,这十分考核机械臂的算力,尤其对于实时的机械臂。而Joint space就不同了,我们先计算姿态
位置
需要的关节驱动角度数值,然后再拟合这些角度数值的曲线,拟合曲线的计算比反推无数个姿态位置对应的无数个角度要简单得多。
我前面说了,我个人理解的轨迹规划的核心求解目的是——得到关节驱动的拟合曲线。如果使用Joint space的话,在第二步就能得到这个曲线,之后的3、4步都是验证而已。那