陆空两栖复合结构飞行器总体设计与PID控制系统【附模型】
✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅如需沟通交流可以私信或者点击《获取方式》1纵列式共轴变桨距与全向轮底盘融合的机械结构设计及静力学验证为同时满足空中飞行性能和地面全向机动设计了一种纵向布局的复合结构。上部采用变桨距共轴双旋翼系统上下旋翼翼展均为0.85m通过差速变距实现偏航通过斜盘周期变距控制俯仰与滚转最大升力可达12kg。下部底盘采用三轮全向轮结构每个轮毂由轮毂电机独立驱动可提供任意方向平移而无转弯半径底盘支架使用7075铝合金加工。负载机架连接上下部分整体高度0.65m。在CATIA中建立三维模型后导入ANSYS进行静力学仿真加载1.5倍最大起飞重量18kg并考虑着陆冲击载荷Von Mises应力最大为186MPa远小于材料屈服强度455MPa安全系数2.44最大变形量0.32mm满足刚度要求。关键连接部位采用拓扑优化减重15%后再次验证仍满足强度标准。2基于Simulink的串级PID与ADRC飞行/陆地双模式动力学建模与控制依据飞行动力学和地面运动学分别建立六自由度数学模型。飞行模式下状态量包括平移速度、姿态角及角速度控制量为总距和三个通道舵机通过拉格朗日-欧拉法推导。陆地模式下视为三轮全向平面运动以车身坐标系速度vx、vy和旋转角速度ω为被控量。在Simulink中搭建串级PID控制系统外环位置P内环速度PID并串联姿态控制通道。针对空中抗干扰需求设计了自抗扰控制器ADRC包含跟踪微分器、扩张状态观测器ESO和非线性状态误差反馈控制律。仿真对比在5m/s侧风干扰下PID控制高度误差±0.5mADRC控制误差±0.1m调节时间缩短60%。陆地模式直线运动偏移误差小于0.04m达到设计指标。3基于模型设计MBD的快速原型验证与实时飞行测试采用基于模型设计方法将Simulink控制器模型通过Embedded Coder生成C代码结合Obsidian飞控开源平台快速部署至STM32H743处理器。设计包括PWM输出驱动、UWB定位融合和遥控器解码的底层驱动模型。搭建半物理仿真平台使用FlightGear进行可视化PC端运行Simulink模型经UDP与FlightGear通信实现三维飞行状态显示。实际飞行测试悬停高度误差±0.08m点到点巡航位置误差±0.09m陆地模式通过0.8m宽狭窄通道成功。验证了电控系统实时性和机械平台可靠性并在三次连续起降循环中未出现结构疲劳损伤。import numpy as np from scipy.integrate import solve_ivp import control.matlab as matlab # 飞行器动力学模型 def flight_dynamics(t, state, control, params): x,y,z, phi,theta,psi, u,v,w, p,q,r state m params[mass]; Ixx,Iyy,Izz params[inertia] # 控制输入总距、滚转、俯仰、偏航力矩 col, lat, lon, rud control # 力和力矩计算 T params[k_t]*col L params[k_roll]*lat; M params[k_pitch]*lon; N params[k_yaw]*rud # 动力学方程 udot r*v - q*w - 9.81*np.sin(theta) 0/m vdot p*w - r*u 9.81*np.cos(theta)*np.sin(phi) 0/m wdot q*u - p*v 9.81*np.cos(theta)*np.cos(phi) - T/m pdot (L (Iyy-Izz)*q*r)/Ixx qdot (M (Izz-Ixx)*p*r)/Iyy rdot (N (Ixx-Iyy)*p*q)/Izz # 运动学 phi_dot p np.sin(phi)*np.tan(theta)*q np.cos(phi)*np.tan(theta)*r theta_dot np.cos(phi)*q - np.sin(phi)*r psi_dot (np.sin(phi)/np.cos(theta))*q (np.cos(phi)/np.cos(theta))*r x_dot u; y_dot v; z_dot w return [x_dot,y_dot,z_dot, phi_dot,theta_dot,psi_dot, udot,vdot,wdot, pdot,qdot,rdot] # 串级PID控制器 class CascadePID: def __init__(self): self.pos_pid PID(Kp1.2, Ki0.02, Kd0.1) self.vel_pid PID(Kp0.8, Ki0.05, Kd0.01) self.att_pid PID(Kp2.5, Ki0.1, Kd0.05) def update(self, target_pos, target_vel, current_state): pos_err target_pos - current_state[:3] vel_cmd self.pos_pid(pos_err) target_vel vel_err vel_cmd - current_state[7:10] att_cmd self.vel_pid(vel_err) att_err att_cmd - current_state[3:6] control self.att_pid(att_err) return control # ADRC控制器简化ESO class ADRC: def __init__(self, b0): self.b0 b0; self.z10; self.z20; self.z30 def eso(self, y, u, dt): e self.z1 - y self.z1 dt*(self.z2 - 3*5*e) self.z2 dt*(self.z3 - 3*5**2*e self.b0*u) self.z3 dt*(-5**3*e) def control_law(self, setpoint, dt): e1 setpoint - self.z1; e2 -self.z2 u0 10*fal(e1,0.5,0.01) 5*fal(e2,0.25,0.01) u (u0 - self.z3)/self.b0 return u def fal(e, alpha, delta): if abs(e) delta: return abs(e)**alpha * np.sign(e) else: return e/(delta**(1-alpha))
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598885.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!