为什么
- 机械臂关节通常只关于一个轴进行移动(旋转或者平移),两段手臂的坐标系之间的变换可以由原本的6变量(3位移+3旋转)简化成4变量(DH参数)
- 关节自由度高(例如手腕可绕3个轴旋转),也可以分解成多个单轴
是什么
图源《Introduction to Robotics Mechanics and Control》
四个参数中,有两个表示关节轴相对前一关节轴的变化,另外两个表示关节沿轴的运动。
轴到轴的变化
设两个相邻关节的轴 i − 1 _{i-1} i−1和轴 i _{i} i的公共垂线为 l l l,方向为 i − 1 {i-1} i−1到 i {i} i,轴的变化可以表示为俩个参数
- 轴间距离 a i − 1 a_{i-1} ai−1
- 轴 i − 1 _{i-1} i−1旋转到轴 i _i i的角度 α i − 1 \alpha_{i-1} αi−1,沿着 l l l右手系旋转
关节的运动
- 沿轴平移 d i d_i di
- 绕轴旋转 θ i \theta_i θi
通常其中一个为常数,另一个为变量,根据不同关节类型而定
坐标系
将轴 i − 1 _{i-1} i−1到轴 i _{i} i中间的连接称为 l i n k i − 1 link_{i-1} linki−1,靠近轴 i _{i} i的称为前端,靠近轴 i − 1 _{i-1} i−1的称为后端,则有两种坐标系建立的方式,对应不同的变换矩阵 T i i − 1 T^{i-1}_i Tii−1,坐标系 i i i到 i − 1 i-1 i−1的变换。
设在后端
垂线 l l l设为 X i − 1 X_{i-1} Xi−1,轴 i − 1 _{i-1} i−1设为 Z i − 1 Z_{i-1} Zi−1,转换和( a i − 1 , α i − 1 , d i , θ i a_{i-1}, \alpha_{i-1},d_i,\theta_i ai−1,αi−1,di,θi)有关
T i i − 1 = [ c θ i − s θ i 0 a i − 1 s θ i c α i − 1 c θ i c α i − 1 − s α i − 1 − s α i − 1 d i s θ i s α i − 1 c θ i s α i − 1 c α i − 1 c α i − 1 d i 0 0 0 1 ] T^{i-1}_{i} = \left[ \begin{array}{c} c\theta_i & -s\theta_i & 0 & a_{i-1} \\ s\theta_i c\alpha_{i-1} & c\theta_i c\alpha_{i-1} & -s\alpha_{i-1} & -s\alpha_{i-1} d_i \\ s\theta_i s\alpha_{i-1} & c\theta_i s\alpha_{i-1} & c\alpha_{i-1} & c\alpha_{i-1} d_i \\ 0 & 0 & 0 & 1\\ \end{array} \right] Tii−1=⎣⎢⎢⎡cθisθicαi−1sθisαi−10−sθicθicαi−1cθisαi−100−sαi−1cαi−10ai−1−sαi−1dicαi−1di1⎦⎥⎥⎤
图源《Introduction to Robotics Mechanics and Control》
设在前端
同样垂线 l l l设为 X i − 1 X_{i-1} Xi−1,但是将轴 i _{i} i设为 Z i − 1 Z_{i-1} Zi−1,转换和( a i , α i , d i , θ i a_i, \alpha_i,d_i,\theta_i ai,αi,di,θi)有关
T i i − 1 = [ c θ i − s θ i c α i s θ i s α i a i c θ i s θ i c θ i c α i − c θ i s α i a i s θ i 0 s α i c α i d i 0 0 0 1 ] T^{i-1}_{i} = \left[ \begin{array}{c} c\theta_i & -s\theta_i c\alpha_i & s\theta_i s\alpha_i & a_i c\theta_i \\ s\theta_i & c\theta_i c\alpha_i & -c\theta_i s\alpha_i & a_i s\theta_i \\ 0 & s\alpha_i & c\alpha_i & d_i \\ 0 & 0 & 0 & 1\\ \end{array} \right] Tii−1=⎣⎢⎢⎡cθisθi00−sθicαicθicαisαi0sθisαi−cθisαicαi0aicθiaisθidi1⎦⎥⎥⎤
图源《Robotics Vision And Control》
怎么用
参数表
求机械臂运动学正解(forward kinematics)
将多个关节串联起来,获得末端位姿
例:UR5
ur5 ros github 参数 (以设在前端的方式建立坐标)
i | a i a_i ai | α i \alpha_i αi | d i d_i di | θ i \theta_i θi |
---|---|---|---|---|
1 | 0 | 1.570796327 | 0.089159 | θ 1 \theta_1 θ1 |
2 | -0.42500 | 0 | 0 | θ 2 \theta_2 θ2 |
3 | -0.39225 | 0 | 0 | θ 3 \theta_3 θ3 |
4 | 0 | 1.570796327 | 0.10915 | θ 4 \theta_4 θ4 |
5 | 0 | -1.570796327 | 0.09465 | θ 5 \theta_5 θ5 |
6 | 0 | 0 | 0.0823 | θ 6 \theta_6 θ6 |
q_home_offset = [0, -1.570796327, 0, -1.570796327, 0, 0]
joint_direction = [-1, -1, 1, 1, 1, 1]
末端位姿 T 6 0 = T 1 0 T 2 1 T 3 2 T 4 3 T 5 4 T 6 5 T^{0}_{6} = T^{0}_{1}T^{1}_{2}T^{2}_{3}T^{3}_{4}T^{4}_{5}T^{5}_{6} T60=T10T21T32T43T54T65