四足机器人单腿逆运动学几何计算
目标:由给定腿部几何参数和计算出的x/y/z坐标求取关节转动的角度,得到关节转角才能计算电机需要的转角。
三关节腿部概念图
如下图是单腿零位示意图,设电机顺时针转动,角度为正,逆时针转动,角度为负。
看一下一点简单的转动。
几何计算
现给一个又一定x/y/z坐标的三关节腿。
tan α 1 = y z \tan\alpha_1=\frac yz tanα1=zy
tan ( θ 0 + α 2 ) = L y z h \tan(\theta_0+\alpha_2)=\frac {L_{yz}}h tan(θ0+α2)=hLyz
变换一下得到θ0.
θ 0 = arctan L y z h − ( π 2 − arctan y z ) \theta_0=\arctan\frac {L_{yz}}h-(\frac\pi2-\arctan\frac yz) θ0=arctanhLyz−(2π−arctanzy)
其中,Lyz是 大腿根部 到 足端投影到yoz平面点 的长度,后面转换成大腿小腿二维平面时计算。
本来在代码中我在只有大腿小腿的二维平面中,计算(x’, z’)来求θ1和θ2,在三维坐标下不能再使用这个z’
从原点到足端,有一个三棱柱的几何关系图,后面会用到
x 2 + y 2 + z 2 = d 2 x^2+y^2+z^2=d^2 x2+y2+z2=d2
y 2 + z 2 − h 2 = z ′ 2 y^2+z^2-h^2=z'^2 y2+z2−h2=z′2
z ′ 2 + x 2 = L 2 z'^2+x^2=L^2 z′2+x2=L2
这样就求得大腿根部到足端的距离L(其实看髋部垂直大腿小腿平面就得到这个勾股式子):
L = x 2 + y 2 + z 2 − h 2 L=\sqrt{x^2+y^2+z^2-h^2} L=x2+y2+z2−h2
再回到上面的式子,就可以求Lyz了:
L y z = L 2 − x 2 L_{yz}=\sqrt{L^2-x^2} Lyz=L2−x2
有了Lyz就可以从上面的计算得到θ0。接下来利用余弦定理求θ1和θ2:
c o s ( π 2 − θ 2 ) = L 1 2 + L 2 2 − L 2 2 L 1 L 2 θ 2 = π − a r c c o s L 1 2 + L 2 2 − L 2 2 L 1 L 2 θ 1 = a r c c o s L 1 2 + L 2 − L 2 2 2 L 1 L + a r c t a n x L y z cos({\frac π2} -θ_2)={\frac {L_1^2+L_2^2-L^2}{2L_1L_2}} \\ θ_2=π -arccos{\frac {L_1^2+L_2^2-L^2}{2L_1L_2}} \\ θ_1=arccos{\frac {L_1^2+L^2-L_2^2}{2L_1L}}+arctan{\frac x{L_{yz}}} cos(2π−θ2)=2L1L2L12+L22−L2θ2=π−arccos2L1L2L12+L22−L2θ1=arccos2L1LL12+L2−L22+arctanLyzx