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

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

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


本文用到的是十字形四旋翼无人机结构,坐标系均采用右手坐标系,全局坐标系为“北东地”,局部坐标系为“前右下”,采用PID控制器控制四旋翼无人机在空中悬停。

四旋翼无人机的动力学模型

1、定义四旋翼系统的状态量

x ⃗ = [ X Y Z X ˙ Y ˙ Z ˙ ϕ θ ψ p q r ] T \boldsymbol{\vec{x}=\begin{bmatrix} X&Y& Z& \dot{X}& \dot{Y}& \dot{Z}& \phi & \theta & \psi & p& q& r \end{bmatrix}^T} x =[XYZX˙Y˙Z˙ϕθψpqr]T

符号 含义
[ X Y Z ] T \boldsymbol{\begin{bmatrix} X&Y& Z\end{bmatrix}^T} [XYZ]T 无人机在全局坐标系下的位置分量
[ X ˙ Y ˙ Z ˙ ] T \boldsymbol{\begin{bmatrix} \dot{X}& \dot{Y}& \dot{Z}\end{bmatrix}^T} [X˙Y˙Z˙]T 全局坐标系下位置分量所对应的速度分量
[ ϕ θ ψ ] T \boldsymbol{\begin{bmatrix} \phi & \theta & \psi\end{bmatrix}^T} [ϕθψ]T 欧拉角:翻滚、俯仰、偏航
[ p q r ] T \boldsymbol{\begin{bmatrix} p& q& r\end{bmatrix}^T} [pqr]T 机身坐标系下的角速度

2、定义控制变量

u ⃗ = [ u 1 , u 2 , u 3 , u 4 ] T = [ T ∑ , M 1 , M 2 , M 3 ] T \boldsymbol{\vec{u}=[u_1 ,u_2 ,u_3 ,u_4]^T=[T_{\sum},M_1,M_2,M_3]^T} u =[u1,u2,u3,u4]T=[T,M1,M2,M3]T

符号 含义
T ∑ \boldsymbol{T_{\sum}} T 机体沿着机身坐标系z轴受到的推力总和(注意:这其实是一个标量)
M 1 \boldsymbol{M_1} M1 机体沿机身坐标系x方向受到的力矩
M 2 \boldsymbol{M_2} M2 机体沿机身坐标系y方向受到的力矩
M 3 \boldsymbol{M_3} M3 机体沿机身坐标系z方向受到的力矩

3、空气动力学因素

当无人机机身处于稳态悬停时,转子处于稳态,第i个转子的稳定状态的推力估算模型为:
T i = C T ρ A V t i p 2 = C T ρ A R 2 Ω i 2 ( > 0 ) \boldsymbol{T_i=C_T \rho AV_{tip}^2=C_T \rho A R^2 \Omega _i^2(> 0)} Ti=CTρAVtip

当涉及到四旋翼无人机建模代码时,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、付费专栏及课程。

余额充值