机器人学基础#
1 Lecture 2#
运动学 VS 动力学:运动学描述运动而不考虑力的来源
[!note] 记号假设
小写字母 p 代表坐标,加粗字母 v 代表向量
运动信息可以用六维坐标 (Rs→bs,ts→bs) 表示(三维是旋转,三维是平移)
p1s=Rs→bsp1b+ts→bs
为了让它变为线性变换,我们考虑齐次坐标
x~:=(x1)∈R4,Ts→bs=[Rs→bs0ts→bs1],x~s=Ts→bsx~b
变换可以复合而且可逆
T1→31=T1→21T2→32,T2→12=(T1→21)−1
- Forward Kinematics:根据参数 θ,计算 T=f(θ)
- Inverse Kinematics:根据 T(θ) ,反解 θ 。有可能无解,但是如果有解往往无穷多解,因为在设计自由度的时候我们会留出来一些冗余,以增加避障等灵活性
2 Leture 3#
旋转矩阵的性质
- ∥Rp∥=∥p∥ 保长度
- Rp×Rq=R(p×q)
所以我们可以推出 RR⊤=R⊤R=I,det(R)=1
在三维空间中,所有的刚体变换只有旋转和平移,没有手性变换(反射)。但是平移不是线性变换,所以要引入第四维形成齐次坐标。
SO(3)SE(3)={R∈R3×3∣RR⊤=R⊤R=I,det(R)=1}={(R,t)∣R∈SO(3),t∈R3}
SO(3) 里面的矩阵虽然是九个元素,但是其自由度只有 3 个,可以用 Euler Angle 来解释。
- (Yaw-Pitch-Roll)的顺序
- Yaw:绕着 z 轴
- Pitch:绕着新 y 轴 y′
- Roll:绕着新 x 轴 y′′
- 但是不是一一对应,同一个旋转矩阵可以有多个 Euler Angle 与之对应,三个变量不独立,万向节死锁插值如果碰到奇异点会乱飞
也可以用 Axis Angle 来表示,ω^ 表示转轴单位向量,θ 代表转动角度,但是只在 θ∈(0,π) 上的时候是一一对应的,一旦 θ=π 就会出现一对多
四元数(Quaternion):真正我们经常使用的表示方法。
q=w+xi+yj+zki2=j2=k2=ijk=−1ij=k=−ji,jk=i=−kj,ki=j=−ik
其中 ω 为实部,v=(x,y,z) 为虚部
四元数乘法的性质:
- 向量形式 (Vector form): q=(w,v)
- 乘法 (Product):
- 对于 q1=(w1,v1) 和 q2=(w2,v2),
q1q2=(w1w2−v1Tv2,w1v2+w2v1+v1×v2)
- 不可交换 (Not commutable)(注意:v1×v2=v2×v1)
- 共轭 (Conjugate): q∗=(w,−v)
- 范数 (Norm): ∥q∥2=w2+vTv=qq∗=q∗q
- 逆 (Inverse): q−1:=∥q∥2q∗
所有模为 1 的四元数用来表示一个旋转,恰好有 3 个自由度。从 Axis Angle 可以直接转化为四元数 q=[cos(θ/2),sin(θ/2)ω^]
如何用四元数旋转
- 首先延长 x 为 x=(0,x)
- 然后共轭变换 x′=qxq−1
四元数旋转可以直接复合:先 q1 再 q2 ,则相当于 q2q1
[! note] 坐标表示
注意不同引擎下坐标顺序不同,可能是 (w,x,y,z) 或 (x,y,z,w)。
在 S3 上的四元数之间的距离 <p,q>=arccos(p⋅q),对应的旋转的夹角是 dist(p,q)=2arccos(∣p⋅q∣),所以在四元数上做插值等价于在 S3 上做插值
ψq(t)=cos−1(q0⋅q1)=sinψq0sin(1−t)ψ+q1sintψ
球面上均匀分布的采样方法,可以高斯采样然后归一化
[!summary] Why Quaternions?
- 尽量少的冗余,四个数就够用
- 乘法更简单,每次乘法 16 个乘运算+12 个加运算
- 数学性质
- 旋转矩阵连乘会因为浮点数精度损失更多
- 四元数正交化只要归一化就可以了
3 Lecture 4#
Motion Planning 可以转换为路径搜索问题:如何在无碰撞空间 Cfree 里找到一条路径连接 qstart 和 qgoal ,不过该问题是在一个高维空间内的。
3.1 Collision Check#
由于维度过高,直接做搜索是不可能的。且如何确定一个 q 是否属于 Cfree 都是困难的,这个工作称之为 Collision Check
- 我们通常使用球来做近似,因为它做碰撞检测更简单;但模拟情况下不碰撞不代表真实情况下不碰撞。碰撞十分致命,尤其对于灵巧手,没有力传感器做 Compliance ,非常容易坏。
- 更精确的是凸凸碰撞测试(convex-convex collision check),对于非凸的形状,我们用尽量少的分解 Approximate Convex Decomposition (ACD):将其转化为凸凸碰撞
3.2 路径搜索#
Probabilistic Roadmap Method
- 第一步在 Cfree 里面做 sample,连接其中相邻的节点,连接起点终点,变成一个图
- sample 的算法:rejection sampling,但是 uniform sample 可能导致忽视狭窄通道,所以我们考虑 Gaussian sample(最终会贴近障碍物边缘) 和 bridge sample(最终会贴近狭窄通道)
- edge 的建立:对于每个点,只看最近的几个点就可以。这个过程是可以并行的。
- 第二步做路径搜索,如 Dijkstra
RT-based 算法
- RRT:绕着试试(exploration) 和贪婪前进(exploitation) 的结合
- RRT-connect:从起点和终点同时开搜
为了路径平滑性,我们会引入 short cutting
从 path 到 trajectory:考虑每个点到达的时间——除了路径是否可能,我们还需要考虑 dynamics 上速度、加速度是否可能。
3.3 Control System#
controller:考虑如何从当前位置 st 到达目标位置 s~t,可能会出现 over shoot 和 under shoot 以及外力干扰等,所以需要 closed-loop control
PD-controller
P-term:只考虑和误差 proportion 相关,容易要么过冲要么太慢
D-term:考虑误差的导数,缓解了过冲
一般的操作是先调好 Kp ,然后再加大 Kd ,偶尔可能还会涉及到 Ki
对于多自由度系统的 PD control,由于关节之间是耦合的,所以我们是先分别调,合起来再调。