最近需要解算六轴机器人的解析解,算法已完成,这里记录一下.
一、机器人模型
PUMA560:
全称:Programmable Universal Manipulation Arm
1978年由Unimation 机器人公司的Victor Scheinman研发.
本文使用的模型:
D-H矩阵:
二、机器人正运动学
机器人正运动学就是给定机器人各关节位置,计算机器人连杆上任意点的位姿.
位姿矩阵
机器人位置和姿态可以由一个方阵描述:
P = { n x o x a x p x n y o y a y p y n z o z a z p z 0 0 0 1 } P\quad= \quad \left\{ \begin{matrix} n_x & o_x & a_x & p_x\\ n_y & o_y & a_y & p_y\\ n_z & o_z & a_z & p_z\\ 0 & 0 & 0 & 1 \end{matrix} \right\} P=⎩⎪⎪⎨⎪⎪⎧nxnynz0oxoyoz0axayaz0pxpypz1⎭⎪⎪⎬⎪⎪⎫
其中,n,o,a为末端姿态,p为末端位置.
正运动学
T 6 0 = T 1 0 T 2 1 T 3 2 T 4 3 T 5 4 T 6 5 T k i 为 k 关 节 坐 标 系 在 i 关 节 坐 标 系 下 的 描 述 . T^0_6=T^0_1T^1_2T^2_3T^3_4T^4_5T^5_6\\ \quad\\ T^i_k为k关节坐标系在i关节坐标系下的描述. T60=T10T21T32T43T54T65Tki为k关节坐标系在i关节坐标系下的描述.
对于确定的机器人结构,如上图中所示,每个关节在上一关节的描述是确定的,因此正运动学直接计算即可.
n x = c 1 [ c 23 ( c 4 c 5 c 6 + s 4 s 6 ) − s 23 s 5 c 6 ] + s 1 ( s 4 c 5 c 6 − c 4 s 6 ) n y = s 1 [ c 23 ( c 4 c 5 c 6 + s 4 s 6 ) − s 23 s 5 c 6 ] − c 1 ( s 4 c 5 c 6 − c 4 s 6 ) n z = − s 23 c 4 c 5 s 6 − c 23 s 5 c 6 − s 23 s 4 s 6 o x = c 1 [ c 23 ( s 4 c 6 − c 4 c 5 s 6 ) + s 23 s 5 s 6 ] − s 1 ( s 4 c 5 s 6 + c 4 c 6 ) o y = s 1 [ c 23 ( s 4 c 6 − c 4 c 5 s 6 ) + s 23 s 5 s 6 ] + c 1 ( s 4 c 5 s 6 + c 4 c 6 ) o z = s 23 c 4 c 5 s 6 + c 23 s 5 s 6 − s 23 s 4 c 6 a x = c 1 ( c 23 c 4 s 5 + s 23 c 5 ) + s 1 s 4 s 5 a y = s 1 ( c 23 c 4 s 5 + s 23 c 5 ) − c 1 s 4 s 5 a z = − c 4 s 5 s 23 + c 23 c 5 p x = c 1 ( a 3 c 23 + a 2 c 2 + a 1 − d 4 s 23 ) p y = s 1 ( a 3 c 23 + a 2 c 2 + a 1 − d 4 s 23 ) p z = − d 4 c 23 − a 3 s 23 − a 2 s 2 + d 1 式 中 : s i = s i n ( θ i ) , c i = c o s ( θ i ) , i = 1 , 2 , . . . , 6 s 23 = s i n ( θ 2 + θ 3 ) , c 23 = c o s ( θ 2 + θ 3 ) \begin{aligned} n_x&=c_1[c_{23}(c_4c_5c_6+s_4s_6)-s_{23}s_5c_6]+s_1(s_4c_5c_6-c_4s_6)\\ n_y&=s_1[c_{23}(c_4c_5c_6+s_4s_6)-s_{23}s_5c_6]-c_1(s_4c_5c_6-c_4s_6)\\ n_z&=-s_{23}c_4c_5s_6-c_{23}s_5c_6-s_{23}s_4s_6\\ o_x&=c_1[c_{23}(s_4c_6-c_4c_5s_6)+s_{23}s_5s_6]-s_1(s_4c_5s_6+c_4c_6)\\ o_y&=s_1[c_{23}(s_4c_6-c_4c_5s_6)+s_{23}s_5s_6]+c_1(s_4c_5s_6+c_4c_6)\\ o_z&=s_{23}c_4c_5s_6+c_{23}s_5s_6-s_{23}s_4c_6\\ a_x&=c_1(c_{23}c_4s_5+s_{23}c_5)+s_1s_4s_5\\ a_y&=s_1(c_{23}c_4s_5+s_{23}c_5)-c_1s_4s_5\\ a_z&=-c_4s_5s_{23}+c_{23}c_5\\ p_x&=c_1(a_3c_{23}+a_2c_2+a_1-d_4s_{23})\\ p_y&=s_1(a_3c_{23}+a_2c_2+a_1-d_4s_{23})\\ p_z&=-d_4c_{23}-a_3s_{23}-a_2s_2+d_1\\ 式中:\\ s_i&=sin(\theta_i),c_i=cos(\theta_i),i=1,2,...,6\\ s_{23}&=sin(\theta_2+\theta_3),c_{23}=cos(\theta_2+\theta_3) \end{aligned} nxnynzoxoyozaxayazpxpypz式中:sis23=c1[c23(c4c5c6+s4s6)−s23s5c6]+s1(s4c5c6−c4s6)=s1[c23(c4c5c6+s4s6)−s23s5c6]−c1(s4c5c6−c4s6)=−s23c4c5s6−c23s5c6−s23s4s6=c1[c23(s4c6−c4c5s6)+s23s5s6]−s1(s4c5s6+c4c6)=s1[c23(s4c6−c4c5s6)+s23s5s6]+c1(s4c5s6+c4c6)=s23c4c5s6+c23s5s6−s23s4c6=c1(c23c4s5+s23c5)+s1s4s5=s1(c23c4s5+s23c5)−c1s4s5=−c4s5s23+c23c5=c1(a3c23+a2c2+a1−d4s23)=s1(a3c23+a2c2+a1−d4s23)=−d4c23−a3s23−a2s2+d1=sin(θi),ci=cos(θi),i=1,2,...,6=sin(θ2+θ3),c23=cos(θ2+θ3)
三、机器人逆运动学
求解关节一
θ 1 = a t a n 2 ( p y , p x ) − a t a n 2 ( 0 , ± p x 2 + p y 2 ) ; \theta_1=atan2(p_y,p_x)-atan2(0,\pm\sqrt{px^2+py^2}); θ1=atan2(py,px)−atan2(0,±px2+py2);
求解关节三
k 1 = c o s ( θ 1 ) p x + s i n ( θ 1 ) p y − a 1 k 2 = − p z + d 1 k = k 1 2 + k 2 2 − ( a 2 2 + a 3 2 + d 4 2 ) 2 a 2 θ 31 , 32 = a t a n 2 ( a 3 , d 4 ) − a t a n 2 ( k , ± a 3 2 + d 4 2 − k 2 ) 由 上 式 解 出 的 角 度 范 围 是 [ − π , 3 π 2 ] , 且 周 期 为 2 π , 因 此 , 当 θ > π / 2 时 , 取 θ = θ − 2 π , 否 则 , θ 不 变 . \begin{aligned} &k_1=cos(\theta_1)p_x+sin(\theta_1)p_y-a_1\\ &k_2=-p_z+d_1\\ &k=\frac{k^2_1+k^2_2-(a^2_2+a^2_3+d^2_4)}{2a_2}\\ &\theta_{31,32}=atan2(a_3,d_4)-atan2(k,\pm\sqrt{a^2_3+d^2_4-k^2})\\ &由上式解出的角度范围是[-\pi,\frac{3\pi}{2}],且周期为2\pi,因此,\\ &当\theta\gt\pi/2时,取\theta=\theta-2\pi,否则,\theta不变. \end{aligned} k1=cos(θ1)px+sin(θ1)py−a1k2=−pz+d1k=2a2k12+k22−(a22+a32+d42)θ31,32=atan2(a3,d4)−atan2(k,±a32+d42−k2)由上式解出的角度范围是[−π,23π],且周期为2π,因此,当θ>π/2时,取θ=θ−2π,否则,θ不变.
求解关节二
k 1 = ( d 4 − s i n ( θ 3 ) a 2 ) ( s i n ( θ 1 ) p y − a 1 + c o s ( θ 1 ) p x ) − ( c o s ( θ 3 ) a 2 + a 3 ) ( d 1 − p z ) ( a 1 − c o s ( θ 1 ) p x − s i n ( θ 1 ) p y ) ( s i n ( θ 1 ) p y − a 1 + c o s ( θ 1 ) p x ) − ( d 1 − p z ) 2 k 2 = ( d 4 − s i n ( θ 3 ) a 2 ) ( d 1 − p z ) − ( c o s ( θ 3 ) a 2 + a 3 ) ( a 1 − c o s ( θ 1 ) p x − s i n ( θ 1 ) p y ) ( d 1 − p z ) 2 − ( s i n ( θ 1 ) p y − a 1 + c o s ( θ 1 ) p x ) ( a 1 − c o s ( θ 1 ) p x − s i n ( θ 1 ) p y ) θ 2 = a t a n 2 ( k 1 , k 2 ) − θ 3 θ 2 的 有 效 区 间 为 ( − 3 π 2 , π 2 ] , 且 周 期 为 2 π , 因 此 , 当 θ > π / 2 时 , 取 θ = θ − 2 π , 当 θ ≤ − 3 π 2 时 , 取 θ = θ + 2 π . \begin{aligned} &k_1=\frac{(d_4-sin(\theta_3)a_2)(sin(\theta_1)p_y-a_1+cos(\theta_1)p_x)-(cos(\theta_3)a_2+a_3)(d_1-p_z)}{(a_1-cos(\theta_1)p_x-sin(\theta_1)p_y)(sin(\theta_1)p_y-a_1+cos(\theta_1)p_x)-(d_1-p_z)^2}\\ &k_2=\frac{(d_4-sin(\theta_3)a_2)(d_1-p_z)-(cos(\theta_3)a_2+a_3)(a_1-cos(\theta_1)p_x-sin(\theta_1)p_y)}{(d_1-p_z)^2-(sin(\theta_1)p_y-a_1+cos(\theta_1)p_x)(a_1-cos(\theta_1)p_x-sin(\theta_1)p_y)}\\ \quad\\ &\theta_2=atan2(k_1,k_2)-\theta_3\\ &\theta_2的有效区间为(\frac{-3\pi}{2},\frac{\pi}{2}],且周期为2\pi,因此,\\ &当\theta\gt\pi/2时,取\theta=\theta-2\pi,当\theta\le\frac{-3\pi}{2}时,取\theta=\theta+2\pi. \end{aligned} k1=(a1−cos(θ1)px−sin(θ1)py)(sin(θ1)py−a1+cos(θ1)px)−(d1−pz)2(d4−sin(θ3)a2)(sin(θ1)py−a1+cos(θ1)px)−(cos(θ3)a2+a3)(d1−pz)k2=(d1−pz)2−(sin(θ1)py−a1+cos(θ1)px)(a1−cos(θ1)px−sin(θ1)py)(d4−sin(θ3)a2)(d1−pz)−(cos(θ3)a2+a3)(a1−cos(θ1)px−sin(θ1)py)θ2=atan2(k1,k2)−θ3θ2的有效区间为(2−3π,2π],且周期为2π,因此,当θ>π/2时,取θ=θ−2π,当θ≤2−3π时,取θ=θ+2π.
求解关节四
k 1 = s i n ( θ 1 ) a x − c o s ( θ 1 ) a y k 2 = c o s ( θ 1 ) c o s ( θ 2 + θ 3 ) a x + s i n ( θ 1 ) c o s ( θ 2 + θ 3 ) a y − s i n ( θ 2 + θ 3 ) a z 当 s i n ( θ 5 ) ≠ 0 时 , θ 4 = a t a n 2 ( k 1 , k 2 ) θ 4 的 有 效 区 间 为 ( − π , π ] , 因 此 , 当 θ 4 > 0 时 , 取 θ 42 = θ 4 − π , 否 则 , 取 θ 42 = θ 4 + π . \begin{aligned} &k_1=sin(\theta_1)a_x-cos(\theta_1)a_y\\ &k_2=cos(\theta_1)cos(\theta_2+\theta_3)a_x+sin(\theta_1)cos(\theta_2+\theta_3)a_y-sin(\theta_2+\theta_3)a_z\\ \quad\\ &当sin(\theta_5)\ne0时,\\ &\theta_4=atan2(k_1,k_2)\\ &\theta_4的有效区间为(-\pi,\pi],因此, 当\theta_4\gt0时,取\theta_{42}=\theta_4-\pi,否则,取\theta_{42}=\theta_4+\pi.\\ \end{aligned} k1=sin(θ1)ax−cos(θ1)ayk2=cos(θ1)cos(θ2+θ3)ax+sin(θ1)cos(θ2+θ3)ay−sin(θ2+θ3)az当sin(θ5)=0时,θ4=atan2(k1,k2)θ4的有效区间为(−π,π],因此,当θ4>0时,取θ42=θ4−π,否则,取θ42=θ4+π.
需要从两个解中筛选一个值,通过判断与上一插补值的绝对值大小,选取绝对值小的作为真实解.
求解关节五
k 1 = ( s i n ( θ 4 ) s i n ( θ 1 ) + c o s ( θ 1 ) c o s ( θ 4 ) c o s ( θ 2 + θ 3 ) ) a x + ( c o s ( θ 4 ) s i n ( θ 1 ) c o s ( θ 2 + θ 3 ) ) a y − s i n ( θ 2 + θ 3 ) c o s ( θ 4 ) a z k 2 = − s i n ( θ 2 + θ 3 ) c o s ( θ 1 ) a x − s i n ( θ 2 + θ 3 ) s i n ( θ 1 ) a y − c o s ( θ 2 + θ 3 ) a z θ 5 = a t a n 2 ( k 1 , − k 2 ) \begin{aligned} &k_1=(sin(\theta_4)sin(\theta_1)+cos(\theta_1)cos(\theta_4)cos(\theta_2+\theta_3))a_x\\ &\quad+(cos(\theta_4)sin(\theta_1)cos(\theta_2+\theta_3))a_y\\ &\quad-sin(\theta_2+\theta_3)cos(\theta_4)a_z\\ &k_2=-sin(\theta_2+\theta_3)cos(\theta_1)a_x-sin(\theta_2+\theta_3)sin(\theta_1)a_y-cos(\theta_2+\theta_3)a_z\\ \quad\\ &\theta_5=atan2(k_1,-k_2)\\ \end{aligned} k1=(sin(θ4)sin(θ1)+cos(θ1)cos(θ4)cos(θ2+θ3))ax+(cos(θ4)sin(θ1)cos(θ2+θ3))ay−sin(θ2+θ3)cos(θ4)azk2=−sin(θ2+θ3)cos(θ1)ax−sin(θ2+θ3)sin(θ1)ay−cos(θ2+θ3)azθ5=atan2(k1,−k2)
求解关节六
k 1 = ( s i n ( θ 4 ) s i n ( θ 1 ) c o s ( θ 5 ) − c o s ( θ 1 ) s i n ( θ 5 ) s i n ( θ 2 + θ 3 ) + c o s ( θ 1 ) c o s ( θ 4 ) c o s ( θ 2 + θ 3 ) c o s ( θ 5 ) ) o x − ( c o s ( θ 1 ) s i n ( θ 4 ) c o s ( θ 5 ) + s i n ( θ 1 ) s i n ( θ 5 ) s i n ( θ 2 + θ 3 ) − s i n ( θ 1 ) c o s ( θ 4 ) c o s ( θ 5 ) c o s ( θ 2 + θ 3 ) ) o y + ( s i n ( θ 2 ) s i n ( θ 3 ) s i n ( θ 5 ) − c o s ( θ 2 ) c o s ( θ 3 ) s i n ( θ 5 ) − c o s ( θ 4 ) c o s ( θ 5 ) s i n ( θ 2 + θ 3 ) ) o z k 2 = ( c o s ( θ 1 ) s i n ( θ 4 ) c o s ( θ 2 + θ 3 ) − c o s ( θ 4 ) s i n ( θ 1 ) ) o x + ( c o s ( θ 1 ) c o s ( θ 4 ) + s i n ( θ 1 ) s i n ( θ 4 ) c o s ( θ 2 + θ 3 ) ) o y − s i n ( θ 2 + θ 3 ) s i n ( θ 4 ) o z θ 6 = a t a n 2 ( − k 1 , k 2 ) θ 6 周 期 为 2 π , 当 θ 6 > 0 时 , 取 θ 62 = θ 6 − 2 π , 否 则 , 取 θ 62 = θ 6 + 2 π . \begin{aligned} &k_1=(sin(\theta_4)sin(\theta_1)cos(\theta_5)-cos(\theta_1)sin(\theta_5)sin(\theta_2+\theta_3)+cos(\theta_1)cos(\theta_4)cos(\theta_2+\theta_3)cos(\theta_5))o_x\\ &\quad-(cos(\theta_1)sin(\theta_4)cos(\theta_5)+sin(\theta_1)sin(\theta_5)sin(\theta_2+\theta_3)-sin(\theta_1)cos(\theta_4)cos(\theta_5)cos(\theta_2+\theta_3))o_y\\ &\quad+(sin(\theta_2)sin(\theta_3)sin(\theta_5)-cos(\theta_2)cos(\theta_3)sin(\theta_5)-cos(\theta_4)cos(\theta_5)sin(\theta_2+\theta_3))o_z\\ &k_2=(cos(\theta_1)sin(\theta_4)cos(\theta_2+\theta_3)-cos(\theta_4)sin(\theta_1))o_x\\ &\quad+(cos(\theta_1)cos(\theta_4)+sin(\theta_1)sin(\theta_4)cos(\theta_2+\theta_3))o_y\\ &\quad-sin(\theta_2+\theta_3)sin(\theta_4)o_z\\ \quad\\ &\theta_6=atan2(-k_1,k_2)\\ &\theta_6周期为2\pi,当\theta_6\gt0时,取\theta_{62}=\theta_6-2\pi,否则,取\theta_{62}=\theta_6+2\pi. \end{aligned} k1=(sin(θ4)sin(θ1)cos(θ5)−cos(θ1)sin(θ5)sin(θ2+θ3)+cos(θ1)cos(θ4)cos(θ2+θ3)cos(θ5))ox−(cos(θ1)sin(θ4)cos(θ5)+sin(θ1)sin(θ5)sin(θ2+θ3)−sin(θ1)cos(θ4)cos(θ5)cos(θ2+θ3))oy+(sin(θ2)sin(θ3)sin(θ5)−cos(θ2)cos(θ3)sin(θ5)−cos(θ4)cos(θ5)sin(θ2+θ3))ozk2=(cos(θ1)sin(θ4)cos(θ2+θ3)−cos(θ4)sin(θ1))ox+(cos(θ1)cos(θ4)+sin(θ1)sin(θ4)cos(θ2+θ3))oy−sin(θ2+θ3)sin(θ4)ozθ6=atan2(−k1,k2)θ6周期为2π,当θ6>0时,取θ62=θ6−2π,否则,取θ62=θ6+2π.