现代机器人学:刚体运动与运动旋量

齐次变换矩阵

同时考虑刚体的位置和姿态。一种自然的选择就是用旋转矩阵R∈SO(3)表示物体坐标系{b}相对固定坐标系{s}的姿态,用向量p∈R3\mathbb{R}^3 表示{b}的坐标原点相对{s}的坐标。所采用的方法不是将它们两者分离,而是集成在一个矩阵中。

特殊欧氏群(special Euclidean group) SE(3)

特殊欧氏群(special Euclidean group)SE(3)亦称刚体运动(rigid-body motion)群或齐次变换矩阵(homogeneous transformation matrice)群,是所有4×4实矩阵T的集合,可以写成

T=[Rp01]=[r11r12r13p1r21r22r23p2r31r32r33p30001]T=\begin{bmatrix} R & p\\ 0 & 1 \end{bmatrix} =\begin{bmatrix} r_{11} & r_{12} & r_{13} & p_1\\ r_{21} & r_{22} & r_{23} & p_2\\ r_{31} & r_{32} & r_{33} & p_3\\ 0 & 0 & 0 & 1 \end{bmatrix}

式中,R∈SO(3),p∈R3\mathbb{R}^3为列向量。

齐次变换矩阵的用途

如旋转矩阵一样,齐次变换矩阵T也有3种主要用途:

① 表示刚体的位形(位置和姿态);

② 变换参考坐标系(用向量或坐标系来表示):

③ 表示向量或坐标系的位移。

熟悉DH参数法建立运动学模型的对这块是非常熟悉了,所以就不介绍具体的示例了

运动旋量

运动旋量twist与旋量本身是两个东西,需要做一下区分,将运动旋量twist和时间系数的乘积定义为旋量,直观理解就是关于这个旋轴旋转了多少角度。旋量的矩阵形式通过指数运算就得到对应的位置变换矩阵;

用{s}和{b}分别代表固定(空间)坐标系和移动(物体)坐标系。不难得到有

ps=Tsbpbp_s=T_{sb}p_b

同时两边进行求导,有

p˙s=T˙sbpb+Tsbp˙b\dot{p}_s=\dot{T}_{sb}p_b+T_{sb}\dot{p}_b

由于 pbp_b 是固连{b}坐标系下的,所以其导数为0,不难得到有

p˙s=T˙sbpb=T˙sbTsb1ps\dot{p}_s=\dot{T}_{sb}p_b=\dot{T}_{sb}T_{sb}^{-1}p_s

从上面式子可以知道, T˙T1\dot{T}T^{-1} 可以将空间点变成空间速度,由此定义运动旋量

[Vs]=T˙T1=[R˙RTR˙RTp+p˙00]=[[ωs]vs00][V_s]=\dot{T}T^{-1} =\begin{bmatrix} \dot{R}R^T & -\dot{R}R^Tp+\dot{p}\\ 0 & 0 \end{bmatrix} =\begin{bmatrix} [\omega_s] & v_s\\ 0 & 0 \end{bmatrix}

定义 twist V 为

V=[ωv]=[ω1ω2ω3v1v2v3]V=\begin{bmatrix}\omega\\ v\end{bmatrix} =\begin{bmatrix}\omega_1\\\omega_2\\\omega_3\\v_1\\v_2\\v_3\end{bmatrix}

在 twist 中,v 是作为角速度的一个补充,通过矩阵乘法来得到线速度,它与角速度是互相独立的,它本身并不是刚体的线速度。v的几何解释是刚体上位于原点处的一个点的线速度。刚体本身是围绕ω\omega 以单位角速度旋转的。

Twist 的坐标系变换

因为有:

[Vs]=T˙sbTsb1[V_s]=\dot{T}_{sb}T_{sb}^{-1}

所以:

[Vs]=Tsb[Vb]Tsb1[V_s]=T_{sb}[V_b]T_{sb}^{-1}

刚体坐标系下的 twist 矩阵为

[Vb]=Tsb1T˙sb=[RTR˙RTp˙00][V_b]=T_{sb}^{-1}\dot{T}_{sb} =\begin{bmatrix} R^T\dot{R} & R^T\dot{p}\\ 0 & 0 \end{bmatrix}

所以

[Vs]=Tsb[Vb]Tsb1,Vs=AdTsbVb[V_s]=T_{sb}[V_b]T_{sb}^{-1},\qquad V_s=\operatorname{Ad}_{T_{sb}}V_b

定义 T({b} 在 {s} 里的位姿表示)的伴随表示:

T=[Rp01],AdT=[R0[p]RR]T=\begin{bmatrix}R&p\\0&1\end{bmatrix},\qquad \operatorname{Ad}_{T}=\begin{bmatrix} R & 0\\ [p]R & R \end{bmatrix}

Vs=AdTsbVbV_s=\operatorname{Ad}_{T_{sb}}V_b

Vb=AdTbsVs=AdTsb1VsV_b=\operatorname{Ad}_{T_{bs}}V_s=\operatorname{Ad}_{T_{sb}}^{-1}V_s

因为 screw axis 是单位 twist,所以变换公式也适用于 screw axis

参考

[1] <<机器人学笔记>> 许中兴, RISE 团队

algorithms axis-angle bang-bang bode calibration chrome cmake cmakelists cnn colcon conan control cpp cpu d435i data_struct db design-pattern dots economics eigen factory-pattern fcpx figure finance forge fov gazebo gdb git gnu ibus interest isaac gym isaaclab kdl latex launch learning-notes legged locomotion legged-robot life linux mac math matlab matrix memory mlp money motion-control motor moveit mpc network ocs2 ode operator optimal algorithm optimal-control perf performance personal-finance ppo profiling python qos realsense reinforcement learning rnn robot robotics ros ros2 rtb security shell simulation stl thread tools twist ubuntu uml unitree urdf vae valgrind vcxsrv velocity vim web wifi work wsl 中文输入 交叉编译 依赖管理 分支管理 四足机器人 实验诊断 强化学习 机器人视觉 构建系统 深度学习 深度相机 点云 版本控制 神经网络 训练曲线 输入法 配置类
知识共享许可协议