本篇將會對四足機器人的腿部進行數學建模,求解器正逆運動學解,包含詳細公式推導與計算
一、運動學
不考慮橫向髖關節運動時,四足機器人的腿部可以簡化成二連桿機構
1、幾何建模
我們將位置點P擺到第一象限,以便符合我們的直覺:
2、運動學正解
如果已知θ1,θ2,可以通過下式求P[x,y]位置:
x=L1sinθ1+L2sin(θ1+θ2)
y=L1cosθ1+L2cos(θ1+θ2)
如果不明白上面兩條公式如何來的,畫一條輔助線就能夠明白了,如下圖:
3、逆解
已知P[x,y]位置,求θ1,θ2, 我們用代數的方法求逆解
首先兩邊平方相加:
x2+y2=(l1sin(θ1)+l2sin(θ1:+θ2))2+(l1cos(θ1)+l2cos(θ1−θ2))2
將表達式展開,並寫成更簡潔的形式,其中cosθ1=c1,cosθ2=c2以此類推:
x2+y2=x2+y2=l12s12+2l1l2s1s12+l12c1+2l1l2c1c12+l22s122+l22c122l12+l22+2l1l2(s1s12+c1c12)
根據和差公式:
s1s12=s12c2−s1c1s2
c1c12=c12c2+s1c1s2
最終得到:
x2+y2=l12+l22+2l1l2c2
或者直接利用python對錶達式進行化簡
L1 = symbols('L1')
L2 = symbols('L2')
b = symbols('b')
a = symbols('a')
x = - L1 * sin(a) - L2 * sin(a - b)
y = - L1 * cos(a) - L2 * cos(a - b)
temp = x**2 + y ** 2
result = simplify(temp)
print('x**2 + y ** 2 = ', result)
我們能夠得到同樣結果
x**2 + y ** 2 = L1**2 + 2*L1*L2*cos(b) + L2**2
求得
cosθ2=sinθ2=2l1l2−l12−l22+x2+y2±1−cos2θ2
這裏在求解時需要注意x,y值,驗證其是否超過腿部動作空間。
sinθ2有兩個取值,會對θ1的值產生影響,在我們當前使用是關節配置方式,sinθ2取正值, 即sinθ2=1−cos2θ2
接下來我們通過正解來求θ1,先對公式進行以下變換:
x=k1s1+k2c1
y=k1c1−k2s1
其中
k1=k2=l1+l2c2l2s2
再對k1,k2進行變量替換:
k1=rcosγ
k2=rsinγ
其中r=k12+k22,γ=atan2(k2,k1),同樣,我們畫個圖方便理解,k1,k2相當於座標軸上的點P,γ是r與x軸的夾角。
代入正解方程:
rx=cosγsinθ1−sinγcosα
ry=cosγcosθ1+sinγsinθ1
最終化簡成:
sin(γ+θ1)=rx
cos(γ+θ1)=ry
同樣使用atan2函數計算得到:γ+α=atan2(y,x)
最終:
θ1=atan2(y,x)−atan2(k2,k1)=atan2(y,x)−atan2(l2s2,l1+l2c2)
整理一些寫成可計算的python程序如下:
c2 = (-L1**2 - L2**2 + x**2 + y**2)/(2*L1*L2)
s2 = np.sqrt(1-c2**2)
theta_2 = np.arctan2(s2, c2)
theta_1 = np.arctan2(y, x) - np.arctan2(L2*s2, L1+L2*c2)
注意
以上求出的θ1是與x軸正半軸的夾角,需要根據機器人的腿部初始角度進行一定變換,例如圖中這樣腿部初始角度是與地面垂直的,θ1=θ1+90°,θ1是與y軸負半軸的夾角,如最開始的那張圖所示
如果覺得ok,點個贊,點個關注,也歡迎給個打賞支持一下編者的工作