【数学问题】四足机器人腿部运动学代数求解方法

一、运动学

在这里插入图片描述

1、正解

不考虑横向髋关节运动时,四足机器人的腿部可以简化成二连杆机构,如上图。如果已知 α , β \alpha,\beta ,可以通过下式求P[x,y]位置:

x = L 1 sin α L 2 sin ( α β ) x =- L_1\sin\alpha - L_2\sin(\alpha-\beta )

y = L 1 cos α L 2 c o s ( α β ) y = - L_1\cos\alpha - L_2cos(\alpha - \beta)

2、逆解

已知P[x,y]位置,求 α , β \alpha,\beta

我们用代数的方法求逆解,首先两边平方相加

x 2 + y 2 = ( l 1 s i n ( α ) + l 2 s i n ( α β ) ) 2 + ( l 1 c o s ( α ) + l 2 c o s ( α β ) ) 2 x^2 + y^2 = (l_1sin(\alpha) + l_2sin(\alpha - \beta))^2 + (l_1cos(\alpha) + l_2cos(\alpha - \beta))^2

拆开,并写成更简洁的形式,其中 c o s α = c 1 , c o s β = c 2 cos\alpha=c1, cos\beta=c2 以此类推:

x 2 + y 2 = l 1 2 s 1 2 + 2 l 1 l 2 s 1 s 12 + l 1 2 c 1 + 2 l 1 l 2 c 1 c 12 + l 2 2 s 12 2 + l 2 2 c 12 2 x^2 + y^2 = l_1^2s_1^2 + 2l_1l_2s_1s_{12} + l_1^2c_1 + 2l_1l_2c_1c_{12} + l_2^2s_{12}^2 + l_2^2c_{12}^2


x 2 + y 2 = l 1 2 + l 2 2 + 2 l 1 l 2 ( s 1 s 12 + c 1 c 12 ) x^2 + y^2 = l_1^2 + l_2^2 + 2l_1l_2(s_1s_{12} +c_1c_{12})

根据和差公式:
s 1 s 12 = s 1 2 c 2 s 1 c 1 s 2 s_1s_{12} = s_1^2 c_2 - s_1c_1 s_2

c 1 c 12 = c 1 2 c 2 + s 1 c 1 s 2 c_1c_{12} = c_1^2 c_2 + s_1c_1 s_2

最终得到:

l 1 2 + l 2 2 + 2 l 1 l 2 c 2 l_1^2 + l_2^2 + 2l_1l_2c_2

或者直接利用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(result)

我们能够得到同样结果

L1**2 + 2*L1*L2*cos(b) + L2**2

求得
cos β = l 1 2 l 2 2 + x 2 + y 2 2 l 1 l 2 \cos\beta = \frac{- l_{1}^{2} - l_{2}^{2} + x^{2} + y^{2}}{2 l_{1} l_{2}}

sin β = ± 1 cos 2 β \sin\beta = \pm\sqrt{1-\cos^2\beta}

这里在求解时需要注意x,y值,验证其是否超过腿部动作空间。
sin β \sin\beta 有两个取值,会对 α \alpha 的值产生影响

接下来我们通过正解来求 α \alpha

x = k 1 s 1 + k 2 c 1 x = k_1s_1 + k_2c_1

y = k 1 c 1 k 2 s 1 y = k_1c_1 - k_2s_1

其中
k 1 = ( l 1 + l 2 c 2 ) k 2 = l 2 s 2 \begin{matrix} k_1 =& -(l_1 + l2c_2)\\ \\ k_2 =& l_2s_2 \end{matrix}

k 1 , k 2 k_1,k_2 进行变换:

k 1 = r cos γ k_1 = r\cos\gamma

k 2 = r sin γ k_2 = r\sin\gamma

其中 r = k 1 2 + k 2 2 , γ = a t a n 2 ( k 2 , k 1 ) r=\sqrt{k_1^2 + k_2^2},\gamma = atan2(k_2,k_1)

代入正解方程:
x r = cos γ sin α + sin γ cos α \frac{x}{r}=-\cos\gamma\sin\alpha +\sin\gamma\cos\alpha

y r = cos γ cos α sin γ sin α \frac{y}{r}=-\cos\gamma\cos\alpha -\sin\gamma\sin\alpha

最终化简成:

sin ( γ + α ) = x r \sin(\gamma + \alpha) = \frac{x}{r}

cos ( γ + α ) = y r \cos(\gamma + \alpha) = \frac{y}{r}

同样使用atan2函数计算得到: γ + α = a t a n 2 ( x , y ) \gamma + \alpha = atan2(x, y)

最终:
α = a t a n 2 ( x , y ) a t a n 2 ( k 2 , k 1 ) = a t a n 2 ( x , y ) a t a n 2 ( l 2 s 2 , l 1 l 2 c 2 ) \alpha = atan2(x,y) - atan2(k_2,k_1)= atan2(x,y) - atan2( l_2s_2 ,-l_1 - l2c_2)

整理一些写成可计算的python程序如下:

c2 = (-L1**2 - L2**2 + x**2 + y**2)/(2*L1*L2)
s2 = np.sqrt(1-c2**2)
# 根据关节配置方式我们取beta为正
beta = np.arctan2(s2, c2)
alpha = np.arctan2(x, y) - np.arctan2(L1*s2, -L1-L2*c2)
发布了47 篇原创文章 · 获赞 319 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/weixin_41045354/article/details/104878956