当前位置: 首页 > news >正文

【无人机】四旋翼飞行器控制、路径规划和轨迹优化(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十

目录

💥1 概述

📚2 运行结果

📃2.1 情景1

📃2.2 情景2

👨‍💻3 参考文献

🎉4 Matlab代码实现

💥1 概述

       在过去七年中,材料、电子、传感器和电池的进步推动了微型无人飞行器(MAV)的发展,MAV的长度在0.1-0.5米到0.1-0.5千克之间。一些小组已经建立并分析了10cm范围内的MAV。其中最小的是Picoflyer,螺旋桨直径为60毫米,质量为3.3克。50 cm范围内的平台更为普遍,一些团体已经建造并飞行了这种尺寸的系统。事实上,在这种尺寸范围内有几种商用RC直升机和研究级直升机。介绍了自主微型无人机开发面临的挑战。在本项目中,我们介绍了GRASP多用途微型飞行器试验台中使用的四旋翼建模,以支持微型飞行器协调动态飞行的研究。,其中描述了现成四转子的建模、控制和集成方法。详细文章讲解见第四部分。

📚2 运行结果

📃2.1 情景1

📃2.2 情景2

部分代码:

function sdot = quadEOM_readonly(t, s, F, M, params)
% QUADEOM_READONLY Solve quadrotor equation of motion
%   quadEOM_readonly calculate the derivative of the state vector
%
% INPUTS:
% t      - 1 x 1, time
% s      - 13 x 1, state vector = [x, y, z, xd, yd, zd, qw, qx, qy, qz, p, q, r]
% F      - 1 x 1, thrust output from controller (only used in simulation)
% M      - 3 x 1, moments output from controller (only used in simulation)
% params - struct, output from crazyflie() and whatever parameters you want to pass in
%
% OUTPUTS:
% sdot   - 13 x 1, derivative of state vector s
%
% NOTE: You should not modify this function
% See Also: quadEOM_readonly, crazyflie

%************ EQUATIONS OF MOTION ************************
% Limit the force and moments due to actuator limits
A = [0.25,                      0, -0.5/params.arm_length;
     0.25,  0.5/params.arm_length,                      0;
     0.25,                      0,  0.5/params.arm_length;
     0.25, -0.5/params.arm_length,                      0];

prop_thrusts = A*[F;M(1:2)]; % Not using moment about Z-axis for limits
prop_thrusts_clamped = max(min(prop_thrusts, params.maxF/4), params.minF/4);

B = [                 1,                 1,                 1,                  1;
                      0, params.arm_length,                 0, -params.arm_length;
     -params.arm_length,                 0, params.arm_length,                 0];
F = B(1,:)*prop_thrusts_clamped;
M = [B(2:3,:)*prop_thrusts_clamped; M(3)];

% Assign states
x = s(1);
y = s(2);
z = s(3);
xdot = s(4);
ydot = s(5);
zdot = s(6);
qW = s(7);
qX = s(8);
qY = s(9);
qZ = s(10);
p = s(11);
q = s(12);
r = s(13);

quat = [qW; qX; qY; qZ];
bRw = QuatToRot(quat);
wRb = bRw';

% Acceleration
accel = 1 / params.mass * (wRb * [0; 0; F] - [0; 0; params.mass * params.grav]);

% Angular velocity
K_quat = 2; %this enforces the magnitude 1 constraint for the quaternion
quaterror = 1 - (qW^2 + qX^2 + qY^2 + qZ^2);
qdot = -1/2*[0, -p, -q, -r;...
             p,  0, -r,  q;...
             q,  r,  0, -p;...
             r, -q,  p,  0] * quat + K_quat*quaterror * quat;

% Angular acceleration
omega = [p;q;r];
pqrdot   = params.invI * (M - cross(omega, params.I*omega));

% Assemble sdot
sdot = zeros(13,1);
sdot(1)  = xdot;
sdot(2)  = ydot;
sdot(3)  = zdot;
sdot(4)  = accel(1);
sdot(5)  = accel(2);
sdot(6)  = accel(3);
sdot(7)  = qdot(1);
sdot(8)  = qdot(2);
sdot(9)  = qdot(3);
sdot(10) = qdot(4);
sdot(11) = pqrdot(1);
sdot(12) = pqrdot(2);
sdot(13) = pqrdot(3);

end
 

 

👨‍💻3 参考文献

[1]谭凯元,朱嘉林,邓君,王荔蔷,杨家源.基于双目视觉的SLAM四旋翼无人机[J].机电工程技术,2022,51(09):83-87+141.

[2]李帅,张杰,杜立杰,李盼.工程测量中无人机航测技术的应用[J].黑龙江科学,2022,13(16):56-58.

🎉4 Matlab代码实现

相关文章:

  • ESP8266-Arduino网络编程实例-Web服务器(从LittleFS加载页面文件)
  • 【图解CAN总线】-7-Classic CAN 2.0总线网络“负载率”计算(方法二)
  • 3.线性神经网络----动手学深度学习
  • 搭建zabbix4.4.6以及企业微信告警功能实现
  • 文件输入与输出io
  • SpringBoot整合Docker实现一次构建到处运行
  • 程序员眼中的Linux操作系统——初识指令
  • process.env.NODE_ENV与@vue/cli-service及其.env.*默认外部环境配置文件之跨域部署
  • MySQL:用户权限和语言接口
  • 2022年广西壮族自治区中职网络安全技能竞赛“Linux操作系统渗透测试详解”
  • 沉睡者 - 抖音中视频计划横版16:9视频制作教程
  • 强大的包管理器Poetry
  • MFC Windows 程序设计[304]之文件夹的枚举(附源码)
  • 【ArcGIS微课1000例】0033:地图点状标记符号设计教程
  • 神经网络中的算法-BN算法
  • 【5+】跨webview多页面 触发事件(二)
  • 10个确保微服务与容器安全的最佳实践
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java程序员幽默爆笑锦集
  • Java多线程(4):使用线程池执行定时任务
  • Java深入 - 深入理解Java集合
  • Lsb图片隐写
  • Node 版本管理
  • PV统计优化设计
  • rc-form之最单纯情况
  • TypeScript迭代器
  • Vue 动态创建 component
  • vuex 笔记整理
  • vuex 学习笔记 01
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 区块链技术特点之去中心化特性
  • 深入浅出webpack学习(1)--核心概念
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一份游戏开发学习路线
  • 找一份好的前端工作,起点很重要
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​io --- 处理流的核心工具​
  • ​Python 3 新特性:类型注解
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $.ajax,axios,fetch三种ajax请求的区别
  • (MATLAB)第五章-矩阵运算
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)c52学习之旅-中断
  • (十八)SpringBoot之发送QQ邮件
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (四)c52学习之旅-流水LED灯
  • (一)kafka实战——kafka源码编译启动
  • (一)基于IDEA的JAVA基础12
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • .NET Project Open Day(2011.11.13)
  • .Net接口调试与案例
  • .NET学习教程二——.net基础定义+VS常用设置
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题