一、效果演示
二、平面運動學建模
本篇將會對四足機器人的腿部進行數學建模,求解器正逆運動學解,包含詳細公式推導與計算
不考慮橫向髖關節運動時,四足機器人的腿部可以簡化成二連桿機構
1、幾何建模
我們將位置點P擺到第一象限,以便符合我們的直覺:
2、運動學正解
如果已知θ1,θ2,可以通過下式求P[x,y]位置:
x=L1cosθ1+L2cos(θ1+θ2)
y=L1sinθ1+L2sin(θ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=l12s12+2l1l2s1s12+l12c1+2l1l2c1c12+l22s122+l22c122x2+y2=l12+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)
4、注意
以上求出的θ1是與x軸正半軸的夾角,需要根據機器人的腿部初始角度進行一定變換,例如圖中這樣腿部初始角度是與地面垂直的,θ1=θ1+90°,θ1是與y軸負半軸的夾角,如最開始的那張圖所示
三、3維運動學建模
本篇將會三維空間中,對四足機器人的腿部進行數學建模,求解器正逆運動學解,包含詳細公式推導與計算
首先,我們來看三維空間中簡圖:
其中a表示髖關節距離主體得偏移,L1,L2共面,與a保持垂直關係,[x,y,z]表示足端相對於髖關節的位置,爲了更容易大家理解,我們將視角轉換到不同的視圖當中去計算幾何關係。
1、正視圖:
首先來回一下小學知識:
- 互餘:如果兩個銳角的和等於90度,那麼這兩個銳角互爲餘角
通過互餘我們可以證明a與y軸的夾角與圖中所示θ0相等。通過其數量關係,我們可以得出:
1.1、正解(已知θ0)
z=−Hcos(θ0)+asin(θ0)(1-1)
y=acos(θ0)+Hsin(θ0)(1-2)
此時,我們只要求出H,即可得到z與y的值
1.2、逆解(已知x,y,z)
H2=z2+y2−a2(2-1)
θ0=atan2(H,∣z∣)−atan2(∣z∣,y)(2-2)
在已知xyz的情況下,通過勾股定理我們能夠輕易求出H,在正視圖我們需要的公式就這麼多,接下來轉到右視圖
2、右視圖
雖說是右視圖,但我們最好不要將其想象成水平向右觀看的視圖,這裏的右視圖指的是L1,L2所在平面的視圖。這裏其實跟二維情況下無疑。H的長度相當於原本的Y軸上的距離。這裏就不再重新推導,詳情請查看文章
2.1、正解(已知θ1,θ2)
此時H是在L1,L2組成的平面當中,如果空間感比較好的小夥伴應該會發現這時候其實跟二維情況下的幾何模型是一致的。因此我們有以下關係:
H=L1cos(θ1)+L2cos(θ1+θ2)(1-3)
x=L1sin(θ1)+L2sin(θ1+θ2)(1-4)
2.2、逆解(已知xyz)
c2=2L1L2−L12−L22+x2+H2)
s2=1−c22
θ2=atan2(s2,c2)
θ1=atan2(−z,x)−atan2(L2s2,L1+L2∗c2)
3、整理
我們將所有公式整理一下:
3.1、正解
H=L1cos(θ1)+L2cos(θ1+θ2)(1-3)
x=L1sin(θ1)+L2sin(θ1+θ2)(1-4)
z=−Hcos(θ0)+asin(θ0)(1-1)
y=acos(θ0)+Hsin(θ0)(1-2)
3.2、逆解
H2=z2+y2−a2
θ0=atan2(H,∣z∣)−atan2(∣z∣,y)
c2=2L1L2−L12−L22+x2+H2)
s2=1−c22
θ2=atan2(s2,c2)
θ1=atan2(−z,x)−atan2(L2s2,L1+L2∗c2)
同樣,需要根據機器人各個關節的初始角度對θ0,θ1,θ2進行一定相加減
四、俯仰角
通過一到三章,我們已經建立了四足機器人的運動學模型,下面將會對姿態調節中的俯仰角進行數學建模,求解其正逆運動學解,包含詳細公式推導與計算
1、幾何模型
假設俯仰角爲λ,對於座標系A足端位置PA[x,y],我們求出其在B座標系下的位置PB=[x′,y′],然後通過逆運動學求解關節角度θ1,θ2即可。假定機器人半身長爲L,腿長分別爲L1, L2
2、座標變換
前腿
a、座標系A-O變換矩陣:
T1=⎣⎡100010L01⎦⎤
b、座標系O-B變換矩陣:
T2=⎣⎡cosλsinλ0−sinλcosλ0−L01⎦⎤
根據變換矩陣,我們可以求出PB座標:
PB=T2T1PA
即:
⎣⎡x′y′1⎦⎤=⎣⎡cosλsinλ0−sinλcosλ0−L01⎦⎤⎣⎡100010L01⎦⎤⎣⎡xy1⎦⎤
化簡之後:
⎣⎡x′y′1⎦⎤=⎣⎡cosλsinλ0−sinλcosλ0Lcosλ−LLsinλ1⎦⎤⎣⎡xy1⎦⎤
後腿
對於後腿實際上只是L取反即可:
⎣⎡x′y′1⎦⎤=⎣⎡cosλsinλ0−sinλcosλ0−Lcosλ+L−Lsinλ1⎦⎤⎣⎡xy1⎦⎤
3、逆運動學求解
根據離地高度確定初始位置P0,再根據變換矩陣將其轉換致參考系B中得到PB,通過逆運動學求解兩個關節角度,公式如下(推導可回看前三章):
cosβ=2l1l2−l12−l22+x2+y2sinβ=1−cos2ββ=atan2(sinβ,cosβ)α=atan2(y,x)−atan2(l2s2,l1+l2c2)
4、最大俯仰角
對於給定離地高度h,俯仰角存在一個最大值,在實際控制時,我們需要保證俯仰角在允許範圍內。
如上圖,當L1, L1共線時,俯仰角最大,此時有以下關係:
cos(r+φ)=2L(L2+h2)L2+(h2+L2)−(L1+L2)2
其中φ=atan2(h,L),因此我們可以解出此時的r
五、滾轉角
5.1 幾何模型
從正面觀看我們的四足機器人時,可以簡化成以下幾何圖形,接下來我們就根據該模型來分析四足機器人的滾轉角調節
我們設定符號:
- 機身寬度W,
- 髖關節偏移a,
- 滾轉角R
- 腿長L1,L2
- L12爲髖關節點PH到足端PE的距離,是個變量
根據結構,我們可以推測出以下固有的幾何關係:
5.2、座標變換
已知PE相對於{H}的位置爲[x,y,z]T。我們同樣通過座標變換的思路來求解PE相對於{H’}的位置
a、PE相對於機身質心位置O的位置可以通過以下變換矩陣得到:
T1=⎣⎢⎢⎡1000010000100a01⎦⎥⎥⎤
b、{O}座標系下的位置轉換到{H’}下的位置:
T2=⎣⎢⎢⎡10000cos(R)sin(R)00−sin(R)cos(R)00−a01⎦⎥⎥⎤
因此我們有以下公式:
PE′=T2T1PE
化簡後即:
⎣⎢⎢⎡x′y′z′1⎦⎥⎥⎤=⎣⎢⎢⎡10000cos(R)sin(R)00−sin(R)cos(R)00acos(R)−aasin(R)1⎦⎥⎥⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤
得到變換後的座標點PE′即可代進逆運動學模型(第三章)中求解出關節角度即可
六、偏航角
6.1、幾何模型
從正上方觀看我們的四足機器人時,可以簡化成以下幾何圖形,接下來我們就根據該模型來分析四足機器人的偏航調節以右前腿爲例
我們設定符號:
機身寬度W,
機身長度L
偏航角Y
6.2、座標變換
假設A點爲初始狀態足端位置[x,y,z]T,B爲機身沿Z軸旋轉Y度後,髖關節位姿,計算A,相對於B的位置,我們可以通過以下變換矩陣求出:
{A}相對於{O}的位置:
T1=⎣⎢⎢⎡100001000010LW01⎦⎥⎥⎤
{O}相對於{B}的位置:
T2=⎣⎢⎢⎡cos(Y)sin(Y)00−sin(Y)cos(Y)000010−L−W01⎦⎥⎥⎤
因此{A}相對於{O}的位置可以用下式表示:
PB=T2T1PA
即,
⎣⎢⎢⎡x′y′z′1′⎦⎥⎥⎤=⎣⎢⎢⎡cos(Y)sin(Y)00−sin(Y)cos(Y)000010Lcos(Y)−L−Wsin(Y)Lsin(Y)+Wcos(Y)−W01⎦⎥⎥⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤
注意,我們這裏求的右前腿的變換,其餘不同位置的腿需要適時對W,L取反。
最後將{P_B}點位置代入逆運動學方程即可求解關節角度。
七、姿態調節矩陣
四到六章分別介紹了繞不同軸的姿態調節,爲了方便描述,我們分別用Ω=[α,β,γ]表示機身旋轉角,其中
R(β)=⎣⎡cosβsinβ0−sinβcosβ0Lcosβ−LLsinβ1⎦⎤
-
滾轉角(α)變換
R(α)=⎣⎢⎢⎡10000cos(α)sin(α)00−sin(α)cos(α)00l0cos(α)−l0l0sin(α)1⎦⎥⎥⎤
-
偏航角(γ)調節
R(γ)=⎣⎢⎢⎡cos(γ)sin(Y)00−sin(γ)cos(γ)000010Lcos(γ)−L−Wsin(γ)Lsin(γ)+Wcos(γ)−W01⎦⎥⎥⎤
以roll-pitch-yaw的順序進行旋轉,得到變換矩陣爲
T=R(α)R(β)R(γ)
如果覺得ok,點個贊,點個關注,也歡迎給個打賞支持一下編者的工作