对四旋翼刚体运动学建模过程中基于欧拉角表示方法的推导引发的一些思考

四旋翼刚体运动学模型输入为速度和角速度,输出为位置和姿态。

这里插入欧拉角的介绍:

首先对其定义进行说明:将地球坐标系绕固定点转动三次与其机体坐标系一致。三次转动过程中,每次转动旋转轴都是绕被转动坐标系的某一轴,每次转动的角度为欧拉角。

上述三次旋转对应下图。

根据上图所示,分别绕自身z,y,x轴旋转\alpha,\beta,\gamma角度,分别对应偏航、俯仰、横滚角。

刚体运动学模型根据转动表示方法的不同可分为以下三种表示方式。

1. 基于欧拉角模型

其中 

 上述模型中对于位置运动学模型比较清楚,对机体坐标系位置进行一次微分可得到机体坐标系速度。而式2的详细推导如下:

对于图中三次欧拉旋转,分析第一次绕z轴转动\alpha角度,仅z轴角速度发生变化。

第二次再绕机体坐标系y轴转动\beta角度时,此时z,y轴角速度均发生变化(这里的参考系是初始旋转的机体坐标系,参考的是“固定”的机体坐标系)。

其中, 

第三次最后绕机体坐标系x轴转动,三个轴的角速度均发生变化。 

其中, 

即可得:

 进一步可以得到下式:

 至此,对于欧拉角表示的刚体运动学建模完成。

正常而言,其中旋转过程是围绕机体坐标系转动,旋转矩阵叠加过程应该是右乘,上述推导中Z轴角速度叠加两次旋转却是左乘。其实仔细看可以发现,z轴角速度变换的参考是基于初始转动的机体系而言,本质上是以初始机体系为固定轴进行转动。

此处,引入了左乘和右乘的概念,什么时候右乘,什么时候左乘?

总结而言,围绕固定的轴,世界坐标系等转动,本质上是坐标的变化,左乘;围绕新的坐标系(机体坐标系)转动,本质上是向量基的变化,右乘。

对于上述欧拉角转动,世界坐标系围绕待转动的轴旋转三次和机体坐标系一致,世界坐标系到机体坐标系的旋转矩阵应该是Rz(\alpha) Ry(\beta)Rx(\gamma)。

针对机器人应用中,一般像传感器参数转换(雷达点到车机体转换等)直接左乘就行,因为雷达点转换到车机体下,是以车机体不动,相对固定的坐标系。

### 四旋翼飞行器运动学建模方法 四旋翼飞行器作为一种欠驱动、非线性、强耦合系统,在进行运动学建模时需考虑多个因素。为了简化问题,通常假设飞行器的质量均匀分布于质心处,并忽略空气阻力和其他外力的影响。 #### 1. 定义坐标系 建立地面固定惯性坐标系 \( OXYZ \),其中 \( Z \) 轴向上;同时定义机体坐标系 \( oxyz \),原点位于飞行器重心,\( z \) 轴沿机身竖直方向指向下方[^2]。 #### 2. 描述位姿变化 设四旋翼相对于惯性坐标系的姿态角为滚转角 (\( \phi \))、俯仰角 (\( \theta \)) 和偏航角 (\( \psi \))。这些角度描述了飞行器绕各自轴旋转的程度。通过欧拉角可以表示任意时刻飞行器的空间方位: \[ R(\phi,\theta,\psi)=R_z(\psi)R_y(\theta)R_x(\phi)\] 这里 \( R_i() \) 表示围绕第 i 轴的旋转矩阵[^3]。 #### 3. 推导平移速度关系 基于上述姿态变换,可得飞行器中心的速度矢量表达式如下: \[ V=\begin{bmatrix} v_x\\ v_y \\v_z \end{bmatrix}= \begin{bmatrix} c_\psi c_\theta & s_\phi s_\theta c_\psi-c_\phi s_\psi& c_\phi s_\theta c_\psi+s_\phi s_\psi \\ s_\psi c_\theta & s_\phi s_\theta s_\psi+c_\phi c_\psi& c_\phi s_\theta s_\psi-s_\phi c_\psi \\ -s_\theta & s_\phi c_\theta & c_\phi c_\theta \end{bmatrix}\cdot \begin{bmatrix} u_1\\ u_2 \\u_3 \end{bmatrix} \] 上式中 \( V=[v_x,v_y,v_z]^T \) 是在世界坐标下的线速度分量向量,而 \( U=[u_1,u_2,u_3]^T \) 则是在体坐标下对应的线加速度分量向量[^4]。 #### 4. 实现计算机仿真 对于所构建的动力学模型,可以通过MATLAB/Simulink 或 Python 的 SciPy 库来进行数值积分求解微分方程组,模拟不同工况下的动态特性。例如采用龙格库塔法 (Runge-Kutta method) 来近似计算下一时刻的状态变量值。 ```matlab function dydt = quadrotor_dynamics(t,y,params) % y: state vector [pos; vel; euler_angles; angular_rates] phi=y(7); theta=y(8); psi=y(9); C_b_w = ... ;% Compute rotation matrix from body to world frame F_total=params.thrust; M=[params.tau_phi; params.tau_theta; params.tau_psi]; g=[0;0;-9.8]; % Gravity acceleration m=params.mass; J=params.inertia_tensor; dv_dt=(F_total*C_b_w(:,3)+g)/m-[cross(y(10:12),y(4:6))]; domega_dt=inv(J)*(M-cross(diag([J]),y(10:12))); dydt=[y(4:6)' ;dv_dt;y(10:12)';domega_dt]; end ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

leida_花

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

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

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

打赏作者

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

抵扣说明:

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

余额充值