【关于四足机器人那些事】腿部运动学建模(三维)

本文详细探讨了三维空间中四足机器人的腿部运动学建模,包括正解和逆解的计算,涉及髋关节角度与足端位置的关系,使用了角度与坐标之间的数学转换进行推导,提供了具体的公式和解题步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇将会三维空间中,对四足机器人的腿部进行数学建模,求解器正逆运动学解,包含详细公式推导与计算

首先,我们来看三维空间中简图:

其中a表示髋关节距离主体得偏移,L1,L2共面,与a保持垂直关系,[x,y,z]表示足端相对于髋关节的位置,为了更容易大家理解,我们将视角转换到不同的视图当中去计算几何关系。

一、正视图:

首先来回一下小学知识:

  • 互余:如果两个锐角的和等于90度,那么这两个锐角互为余角

通过互余我们可以证明a与y轴的夹角与图中所示 θ 0 \theta_0 θ0相等。通过其数量关系,我们可以得出:

1、正解(已知 θ 0 \theta_0 θ0

z = − H cos ⁡ ( θ 0 ) + a sin ⁡ ( θ 0 ) (1-1) z = -H\cos(\theta_0) + a\sin(\theta_0) \tag{1-1} z=Hcos(θ0)+asin(θ0)(1-1)

y = a cos ⁡ ( θ 0 ) + H sin ⁡ ( θ 0 ) (1-2) y = a\cos(\theta_0) + H\sin(\theta_0) \tag{1-2} y=acos(θ0)+Hsin(θ0)(1-2)
此时,我们只要求出 H H H,即可得到 z z z y y y的值

2、逆解(已知x,y,z)

H 2 = z 2 + y 2 − a 2 (2-1) H^2 = z^2 + y^2 - a^2 \tag{2-1} H2=z2+y2a2(2-1)

θ 0 = a t a n 2 ( H , a ) − a t a n 2 ( ∣ z ∣ , y ) (2-2) \theta_0 = atan2(H, a) - atan2(|z|, y) \tag{2-2} θ0=atan2(H,a)atan2(z,y)(2-2)

在已知xyz的情况下,通过勾股定理我们能够轻易求出 H H H,在正视图我们需要的公式就这么多,接下来转到右视图

右视图

虽说是右视图,但我们最好不要将其想象成水平向右观看的视图,这里的右视图指的是L1,L2所在平面的视图。这里其实跟二维情况下无疑。H的长度相当于原本的Y轴上的距离。这里就不再重新推导,详情请查看文章

1、正解(已知 θ 1 , θ 2 \theta_1,\theta_2

### 机器人腿部运动学原理 机器人运动学分析及其运动方程的建立主要基于单腿运动学。这意味着只需要对一条腿进行详细的动态建模,在Matlab或其他仿真环境中完成轨迹规划之后,利用步态相位差就可以方便地把这条腿的动作模应用到其余三条腿上,从而实现整个机体的有效操控[^1]。 对于具体的腿部结构而言,通常情况下每条腿至少具备三个旋转轴来模拟生物体中的髋关节、膝关节和踝关节的功能;而某些高级设计甚至会在末端执行器处增加额外的一个或多个自由度以增强灵活性与适应能力,比如加入轮子形成所谓的“轮”,这不仅提高了移动效率还拓宽了应用场景范围[^4]。 当讨论如何具体实施这些理论时,则涉及到正向运动学(Forward Kinematics, FK)与逆向运动学(Inverse Kinematics, IK)两个方面: #### 正向运动学 (FK) 这是指已知各关节角度的情况下计算末端效应器的位置及方向的过程。通过定义连杆参数并采用Denavit-Hartenberg(DH)表示法能够简化这一过程。一旦建立了合适的坐标系框架,便可以在软件工具如MATLAB中编写程序来进行数值求解或是图形化展示。 ```matlab % 定义DH 参数矩阵 dh_params = [ a1 alpha1 d1 theta1; a2 alpha2 d2 theta2; ... ]; function T = fkine(dh_params) % 初始化变换矩阵T为单位阵I T = eye(4); for i=1:size(dh_params, 1), % 提取当前行的数据作为输入构建齐次变换矩阵Ai Ai = compute_Ai(dh_params(i,:)); % 更新总变换矩阵T T = T * Ai; end end ``` #### 逆向运动学(IK) 相比之下更为复杂一些,因为它涉及到了解一组非线性的联立方程组——即给定目标点的空间坐标后反推出所需设置的具体关节角值。解决IK问题的方法有很多,包括但不限于解析法、几何逼近算法以及迭代优化技术等。 ```python import numpy as np from scipy.optimize import fsolve def ik_solver(target_pos): """ 使用fsolve函数寻找满条件的最佳近似解。 :param target_pos: 目标位置 [x,y,z] """ def equations(vars): # 这里应该填入根据具体情况推导出来的关于变量vars[]之间的关系表达, # 形成一个长度等于未知数数量的一维数组返回 eqs = [] return eqs initial_guesses = [...] # 初始猜测值列表 solution = fsolve(equations,initial_guesses ) return solution ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值