四旋翼无人机建模与实现(二)

四旋翼无人机建模与实现(二)

本文是对GitHub上的一个开源的四旋翼无人机建模与编程实现的学习笔记,因为原作者的文档使用英文写的,花了很长的时间才看懂,因此,我觉得用自己的语言将这个开源项目分享出来是有意义的,爱因斯坦曾说过:“如果你不能简单地解释某一概念,说明你没有很好地掌握它”。因此便有了写这篇文档的想法。
原文链接: https://github.com/SKYnSPACE/AE450
本文的贡献在于将原作者文档中的公式做了更为详细的推导,并以更为通俗的语言来描述整个建模过程。


7、旋转运动方程

后六个状态量的变化率可以从旋转运动方程中获得,状态变化率表示如下:
[ ϕ ˙ , ψ ˙ , θ ˙ , p ˙ , q ˙ , r ˙ ] \boldsymbol{[\dot{\phi},\dot{\psi},\dot{\theta},\dot{p},\dot{q},\dot{r}]} [ϕ˙,ψ˙,θ˙,p˙,q˙,r˙]
速度方程:
R ˙ = R ⋅ s k ( ω ⃗ ) \boldsymbol{\dot{R}=R \cdot sk(\vec{\omega})} R˙=Rsk(ω )
我不是太理解原作者写的这些标识意义,我觉得这样写仿佛更容易理解:
R P Y ˙ = T r ⋅ ω ⃗ \boldsymbol{\dot{RPY}=Tr \cdot \vec{\omega}} RPY˙=Trω
其中等号左边是欧拉角的变化率,等号右边时变换矩阵和角速度的乘积,这个公式表达了姿态变化率和角速度的关系。将上述方程展开如下:
[ ϕ ˙ θ ˙ ψ ˙ ] = [ 1 t a n θ s i n ϕ t a n θ c o s ϕ 0 c o s ϕ − s i n ϕ 0 s i n ϕ / c o s θ c o s ϕ / c o s θ ] [ p q r ] \boldsymbol{ \begin{bmatrix} \dot{\phi}\\ \dot{\theta} \\ \dot{\psi} \end{bmatrix}= \begin{bmatrix} 1& tan\theta sin\phi & tan\theta cos\phi\\ 0 & cos\phi & -sin\phi\\ 0 & sin\phi / cos\theta & cos\phi / cos\theta \end{bmatrix} \begin{bmatrix} p\\q\\r \end{bmatrix} } ϕ˙θ˙ψ˙=100tanθsinϕcosϕsinϕ/cosθtanθcosϕsinϕcosϕ/cosθpqr
姿态变化率和角速度之间满足线性变换关系,该线性变换关系是关于翻滚和俯仰角的线性变换关系,和偏航角无关。
加速度方程(牛顿第二定律):
I ω ⃗ ˙ = − ω ⃗ × I ω ⃗ + M \boldsymbol{I \dot{\vec{\omega}}=-\vec{\omega} \times I\vec{\omega}+M} Iω ˙=ω ×Iω +M
将该公式展开后得到:
p ˙ = I y y − I z z I x x ⋅ q r + 1 I x x ⋅ M 1 \boldsymbol{\dot{p}=\frac{I_{yy}-I_{zz}}{I_{xx}} \cdot qr+\frac{1}{I_{xx}}\cdot M_1} p˙=IxxIyyIzzqr+Ixx1M1
q ˙ = I z z − I x x I y y ⋅ r p + 1 I y y ⋅ M 2 \boldsymbol{\dot{q}=\frac{I_{zz}-I_{xx}}{I_{yy}} \cdot rp+\frac{1}{I_{yy}}\cdot M_2} q˙=IyyIzzIxxrp+Iyy1M2
r ˙ = I z z − I y y I z z ⋅ p q + 1 I z z ⋅ M 3 \boldsymbol{\dot{r}=\frac{I_{zz}-I_{yy}}{I_{zz}} \cdot pq+\frac{1}{I_{zz}}\cdot M_3} r˙=IzzIzzIyypq+Izz1

当涉及到四旋翼无人机建模代码时,MATLAB是一个非常强大的工具。下面是一个简单的MATLAB代码示例,用于建模四旋翼无人机的运动方程: ```matlab % 四旋翼无人机建模代码示例 % 定义常数 g = 9.81; % 重力加速度 m = 0.5; % 质量 L = 0.25; % 旋翼到质心的距离 % 定义初始条件 x0 = 0; y0 = 0; z0 = 0; phi0 = 0; theta0 = 0; psi0 = 0; u0 = 0; v0 = 0; w0 = 0; p0 = 0; q0 = 0; r0 = 0; % 定义时间步长和模拟时间 dt = 0.01; % 时间步长 t_end = 10; % 模拟时间 % 初始化变量 t = 0:dt:t_end; % 时间向量 N = length(t); % 时间步数 % 初始化状态向量 x = zeros(N,1); y = zeros(N,1); z = zeros(N,1); phi = zeros(N,1); theta = zeros(N,1); psi = zeros(N,1); u = zeros(N,1); v = zeros(N,1); w = zeros(N,1); p = zeros(N,1); q = zeros(N,1); r = zeros(N,1); % 设置初始条件 x(1) = x0; y(1) = y0; z(1) = z0; phi(1) = phi0; theta(1) = theta0; psi(1) = psi0; u(1) = u0; v(1) = v0; w(1) = w0; p(1) = p0; q(1) = q0; r(1) = r0; % 模拟四旋翼无人机的运动 for i = 2:N % 计算加速度 ax = 0; % 在这里可以根据你的模型添加适当的控制算法 ay = 0; % 在这里可以根据你的模型添加适当的控制算法 az = g - (cos(phi(i-1))*cos(theta(i-1))*cos(psi(i-1)) + sin(phi(i-1))*sin(psi(i-1)))*m; % 计算角加速度 p_dot = 0; % 在这里可以根据你的模型添加适当的控制算法 q_dot = 0; % 在这里可以根据你的模型添加适当的控制算法 r_dot = 0; % 在这里可以根据你的模型添加适当的控制算法 % 更新状态 x(i) = x(i-1) + u(i-1)*dt; y(i) = y(i-1) + v(i-1)*dt; z(i) = z(i-1) + w(i-1)*dt; phi(i) = phi(i-1) + p(i-1)*dt; theta(i) = theta(i-1) + q(i-1)*dt; psi(i) = psi(i-1) + r(i-1)*dt; u(i) = u(i-1) + ax*dt; v(i) = v(i-1) + ay*dt; w(i) = w(i-1) + az*dt; p(i) = p(i-1) + p_dot*dt; q(i) = q(i-1) + q_dot*dt; r(i) = r(i-1) + r_dot*dt; end % 绘制无人机的运动轨迹 figure; plot3(x,y,z); xlabel('X'); ylabel('Y'); zlabel('Z'); title('四旋翼无人机运动轨迹'); % 绘制无人机的姿态角随时间的变化 figure; subplot(3,1,1); plot(t,phi); xlabel('时间'); ylabel('滚转角'); title('滚转角随时间的变化'); subplot(3,1,2); plot(t,theta); xlabel('时间'); ylabel('俯仰角'); title('俯仰角随时间的变化'); subplot(3,1,3); plot(t,psi); xlabel('时间'); ylabel('偏航角'); title('偏航角随时间的变化'); ``` 这段代码演示了一个简单的四旋翼无人机建模过程,其中包括了无人机的位置、姿态角以及速度等状态的模拟。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值