基于STM32的四旋翼无人机项目(一):基础知识篇

news2024/11/28 6:52:13

前言:本篇博客为飞控专栏的第一篇系统性概述文章,将对飞控系统进行详细讲解介绍。考虑到飞控项目具有一定工程复杂度,所以作者将整个项目进行分章节教学与讲解,希望可以给读者朋友带来更好地学习体验。项目将以 C-Quad 四轴无人机为工程样机,飞行器主控为 STM32F103C8T6,遥控为 STM32F103C6T6。项目代码为 HAL 库版本,该项目博客将把算法与硬件相结合,深入挖掘飞控的奥妙与原理。(代码开源!

硬件实物图:

效果图:

一、飞控概述

飞控即无人机飞行控制器,可理解为飞行器的大脑,其核心是微控制器MCU。微控制器基于外部传感器(如姿态传感器气压传感器GPS光流等)返回的数据,经过一系列处理与融合后,控制无人机的飞行姿态。飞控的种类有很多,常见的有:四旋翼、六旋翼和八旋翼无人机等(本项目专栏为四旋翼无人机项目)。

四旋翼无人机又叫做四轴飞行器,是一种小型的智能化产品。随着自动控制技术的更新换代以及人工智能广泛应用,使得无人机更加贴近人们的生活。其中,四旋翼无人机由于其价格低廉,结构稳定,性能优越,易于控制的特点而被广泛使用。

二、飞控相关知识点

2.1 pitch、yaw、roll角度

飞行器在飞行过程中有个重要的指标:飞行姿态。飞行姿态则涉及到如下欧拉角:pitch(俯仰角)、yaw(偏航角)、roll(横滚角)。

特别说明:飞机的坐标轴体系和AR眼镜是不一样的,指向机头的是X轴,指向右机翼的是Y轴,垂直向上的是Z轴(建议大家别人云亦云,多去参考正规性学术论文)。

pitch():俯仰,将物体绕Y轴旋转(localRotationY)

yaw():航向,将物体绕Z轴旋转(localRotationZ)

pitch yaw roll 的区别(转载) - 江南雨 - 江南雨的博客

roll():横滚,将物体绕X轴旋转(localRotationX)

pitch yaw roll 的区别(转载) - 江南雨 - 江南雨的博客

2.2 遥控知识点

飞行器通常都是需要设计配套遥控器的。当然,可以使用手机APP适配之后操作,也可以制作一个遥控手柄。本项目中四旋翼飞行器与遥控手柄通过 NRF24L01 2.4G 模块进行通讯。

油门:飞控的设计制作过程中,都会设计到一个关键词汇 “油门(throttle)” ,油门方向的遥感不具备自动回调的特性,通过油门方向的遥感控制飞行器的飞行高度。

解锁:高速旋转的机翼通常都具有一定的杀伤能力,为了防止简单误触造成飞行器意外起飞等情况。飞控的设计中存在锁门的这个概念,即:需要解锁操作,之后才能正常控制飞控。不同的遥控手柄的解锁方式往往不同,比较常见的解锁有: “外八字” 解锁和 “下上下” 油门解锁等。

上锁:飞行器飞行过程中难免可能出现意外情况,这个时候可以使用上锁操作强制锁定机翼转动。上锁方式同样根据实际情况设计。

三、四旋翼无人机飞行原理

四旋翼无人机主要分 “×” 型和 “+” 型两种,两种无人机的主要区别在于机头方向的选择。四旋翼无人机的简化结构如下图所示,无刷电机转动带动四个桨叶高速旋转产生向上的升力作用于无人机,当推动遥控器的油门使升力逐渐超过无人机自身重力时,四旋翼无人机便能够起飞升空,控制器发出的指令不断改变无人机的电机转速,就可以使无人机切换到不同的运动模式。考虑到“×” 型四旋翼无人机机动性更好,故本项目将采用 “×” 型四旋翼无人机设计。

本项目以 “×” 型飞行器为设计标准,故后续以 “×” 型飞行器的运动控制学进行分析,该类型飞行器结构图如下:

为了方便描述,将四旋翼无人机的四个电机分别编号为:Motor1、Motor3、Motor2、Motor4Motor1和 Motor3电机逆时针进行旋转,从而可以产生逆时针方向的扭矩,Motor2和 Motor4电机顺时针进行旋转,从而可以产生顺时针方向的扭矩。如此,四个旋翼旋转所产生的扭矩便可相互抵消。当四个旋翼具有相同的转速,产生的上升合力正好与自身重力相等,则飞行器将进入悬停状态!

3.1 垂直运动

如上图所示,在保证四旋翼无人机每个旋翼转速大小相同(产生的总扭矩为零),对每个旋翼增加/减小大小相同的转速,便可实现无人机的垂直上升/下降运动。

旋翼总升力>无人机重力,垂直上升;
旋翼总升力<无人机重力,垂直下降。

3.2 俯仰运动

将电机Motor1Motor4的转速减小或者将Motor2Motor3增加时,四旋翼会产生向前上方的力,使四旋翼向前飞行。反之,如果将Motor1Motor4的转速增加或者将Motor2Motor3减小时,四旋翼会产生向后上方的力,使四旋翼向后飞行。

3.3 滚转运动

将电机Motor1Motor2的转速增加或者将Motor3Motor4的转速减小时,四旋翼会产生向右上方的合力,使四旋翼向右飞行。反之,如果减小Motor1Motor2的转速或者增加Motor3Motor4的转速,四旋翼会产生向左上方的合力,使四旋翼向左飞行。

3.4 偏航运动

将电机Motor2Motor4的转速增加或者将Motor1Motor3的转速减小,四旋翼会向右旋转,实现向右偏航。反之,如果将Motor2Motor4的转速减小或者将Motor1Motor3的转速增加,四旋翼会向左旋转,实现向左偏航。

四、四旋翼飞行器控制结构

 一般情况下,四旋翼无人机由检测模块、控制模块、驱动模块以及电源模块四个部分组成。

检测模块:负责对无人机当前姿态进行量测,并对控制模块提供数据;

控制模块:负责对无人机当前姿态进行解算,优化控制,并对驱动模块产生相对应的控制量;

驱动模块:负责驱动4台电机进行旋转,从而使得无人机进行正常飞行;

电源模块:负责对整个系统进行供电,其中,分为控制供电与动力供电。

4.1 控制模块

飞控的控制模块即飞行器的微控制器MCU,现如今飞控多采用 STM32F4 系列的芯片,算力和成本都非常适宜。当然,本项目作者使用的 MCUSTM32F103C8T6 ,成本相对来说更低。当然,制作的飞控整体控制起来难度更大一点。MCU负责计算控制以及维持各个模块之间的通讯联动。

4.2 检测模块

检测模块则通常包括:惯性检测单元(MPU6050,磁力计等),气压计(MS5611等),电子罗盘(GPS等)。通过各类检测模块的运作,可以在一定程度上得到飞行器的位姿(位置和飞行姿态)。

惯性检测单元:惯性检测单元通常由姿态传感器 + 磁力计构成。航模新手的话仅使用六轴姿态传感器 MPU6050 作为惯性检测单元即可近似完成飞行器的姿态解算,得到飞行器的欧拉角度。本项目中的惯性检测单元仅使用 MPU6050。

问题:惯性检测单元为什么还需要磁力计的帮助?

欧拉3角:pitch(俯仰角)、yaw(偏航角)、roll(横滚角),其中的偏航角yaw,因为姿态解算算法的原因长期使用后会导致误差积累,故此需要使用磁力计的帮助进行校正。

气压计:气压计在飞行器中通常用来检测飞行器的飞行高度,帮助飞行器实现定高功能。常见的气压计为 MS5611 模块,MS5611 气压传感器是集合 SPI I²C (高达20 MHz)总线接口的高分辨率气压传感器,分辨率可达到 10 cm。内部有一个高线性度的压力传感器和一个超低功耗的 24 位AD。

4.3 驱动模块

本项目制作的为四旋翼飞行器,故需要驱动4个电机。飞行器的电机驱动需要设计专门的驱动电路或者使用电调装置。本项目使用如下驱动电路:

电路分析:

100Ω电阻:起到限流作用,在 MOS 开启瞬间时需要吃电流,如果电流过大,会导致瞬间开启,缩短 MOS 管的寿命。

10K 电阻:IC 在复位状态下,所有 IO 口都处于浮空输入状态,加 10K 下拉电阻就可以避免在单片机还没工作时,MOS 导通,电机疯狂旋转打伤人。

2302MOS:NMOS,高电平导通。通过 PWM 占空比控制 MOS 管的导通,从而控制电机的平均功率。2302 在门级开启电压 Vth=3.3V 下导通电流可达 3A,而最大的空心杯电机(8520)最大消耗电流>1A,如果按照瞬间导通的电流 2.5 倍计算,MOS 承受的电流应在 2.5A 左右。故 2302 符合使用条件。

电容:吸收电机产生的高频杂讯

4.4 电源模块

 飞行器的电源模块通常使用航模专用锂电池。由于四轴在飞行过程中,电量不断下降,当下降到一定程度后,可能会出现瞬间低于 3.3V,这样稳压就会无法正常工作,导致输出截断,所以配备升压。

升压:BL8530 升压 IC 需要 47uH 电感作为储能,内部集成类似 BOOST 升压电路,大家学过电路原理的都会学到 BOOST 升压电路。而这个肖特基二极管,在这里起到续流作用。

稳压:662K 3.3V 稳压 IC,稳压(LDO)这个很好理解。

航模的锂电池通常具有高电流的特性,保证有足够电流量去驱动电机转动。

五、本篇总结

本篇作为飞控专栏的第一篇文章,其主要目的为帮助读者朋友们了解飞控的基础原理和设计框架。后续作者将手把手教大家完成四旋翼飞行器的制作,项目的硬件原理图和程序代码将全部开源给大家。当然,飞控算是较为复杂的嵌入式设计,建议读者朋友除了参考本人的博客,还可以多借鉴“匿名者”等优秀的飞控设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 中使用 JWT 案例分享详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

大模型LLM领域,有哪些可以作为学术研究方向?

清湛人工智能研究院 2023-05-31 09:23 发表于江苏 编者&#xff1a;本文转载了清华大学计算机系刘知远教授对大模型的一些思索&#xff0c;以飨读者。 刘知远 CCF 高级会员&#xff0c;CCCF 前编委。清华大学计算机系副教授、博士生导师。已在ACL、IJCAI、AAAI等人工智能领域…

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于GRU-AdaBoost门…

单品GMV破千万,这些品类正在抖音热卖

优势品类及核心产品能更好触达消费者&#xff0c;以较低的成本让用户感知品牌&#xff0c;塑造品牌力。 抖音作为品牌最核心的线上渠道之一&#xff0c;该如何找到平台优势品类&#xff1f;制定品牌营销策略&#xff1f;有效提升产品销量呢&#xff1f; 近期&#xff0c;新抖上…

【CesiumJS入门】(4)加载3D Tiles并获取tileset

前言 本次&#xff0c;我们将写一个函数来加载3D Tiles数据&#xff0c; 3D Tiles数据的文档&#xff1a;CesiumGS/3d-tiles: Specification for streaming massive heterogeneous 3D geospatial datasets (github.com) 同时我们将获取加载成功后的tileset数据集&#xff08;有…

Python 中错误 ImportError: No Module Named Sklearn

在 Python 中,sklearn 被用作机器学习工具,用于在回归、集群等方面创建程序。很多时候,导入它会抛出错误—— No module named sklearn。 这意味着由于安装错误、无效的 Python 或 pip 版本或其他问题,系统无法找到它。 Python中错误ImportError: No module named sklearn…

基于Java营业厅宽带系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

Karl Guttag评Vision Pro:比Quest Pro做了更多正确选择

上周苹果正式发布Vision Pro&#xff0c;尽管要到明年才发售&#xff0c;但光学领域的专业博主Karl Guttag也发表了自己的看法。他提到&#xff1a;目前受邀体验的媒体中要不是苹果粉丝、要不就是对AR、VR了解比较少&#xff0c;没有我看到“批判性思维”或太多对技术分析的内容…

MySQL常用操作(一)

创建表 create table user(id int unsigned primary key not null auto_increment,name varchar(50) unique not null,age tinyint not null,sex enum(M, W) not null )engineINNODB default charsetutf8;# 查看创建表语句 show create table user两种插入方式比较 # 方式1 i…

加速千行百业转型,华为如何为智能世界构建感知底座

导读&#xff1a;感知正成为行业数字化的新引擎。 我们正在迈进一个万物感知的时代。 日常生活中&#xff0c;感知已经无处不在。小到智能家居的控制系统&#xff0c;大到智慧城市虚实联动的数字孪生&#xff0c;感知是一切智能化的前提&#xff0c;也是行业数字化转型的基础。…

如何恢复被隔离的u盘数据?2种恢复u盘隔离数据的方法

很多时候&#xff0c;我们可能会因为各种原因导致U盘数据丢失&#xff0c;比如误删、格式化等情况。但最近有一位朋友咨询小编关于U盘文件被隔离的问题&#xff0c;他在使用U盘时发现有些文件被隔离了&#xff0c;想知道如何恢复。其实&#xff0c;U盘文件被隔离可能是由于存在…

记录--为什么推荐用svg而不用icon?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 使用背景&#xff1a; 1.因为svg图标在任何设备下都可以高清显示&#xff0c;不会模糊。而icon会在显卡比较低的电脑上有显示模糊的情况 2.svg图标在页面render时 速度会比icon稍微快一点 3.实现小程序…

Hightopo 使用心得(3)- 吸附与锚点

吸附与锚点是 HT for Web 中两个比较重要的概念。这两个概念在执行交互和动画时会经常被用到。 吸附&#xff0c;顾名思义&#xff0c;是一个节点吸附到另一个节点上。就像船底的贝类一样&#xff0c;通过吸附到船身&#xff0c;在船移动的时候自己也会跟着移动&#xff1b;而…

研究显示,超过一半的安全领导者对保护应用程序机密缺乏信心

这可能会让人感到意外&#xff0c;但秘密管理已经成为AppSec房间里的大象。虽然像常见漏洞和暴露(cve)这样的安全漏洞经常成为网络安全领域的头条新闻&#xff0c;但秘密管理仍然是一个被忽视的问题&#xff0c;可能会对企业安全产生直接而有影响的后果。 《卫报》最近的一项研…

AUTOSAR通信篇 - CAN网络通信(四:CanSM)

文章目录 简述CAN网络状态机触发器PowerOnCanSM_InitCanSM_DeInitT_START_WAKEUP_SOURCET_STOP_WAKEUP_SOURCET_FULL_COM_MODE_REQUESTT_SILENT_COM_MODE_REQUESTT_NO_COM_MODE_REQUESTT_BUS_OFF 防护条件G_FULL_COM_MODE_REQUESTEDG_SILENT_COM_MODE_REQUESTED 作用E_PRE_NOCO…

Question Log

Question Log 提示&#xff1a;记录一下平常遇到的坑 Question Log&#xff08;★ &#xff1e; &#xff09; Question LogⅠ、★ &#xff1e; 使用VsCode构建Unity开发环境1.环境配置2.遇到的相关问题★.The .NET Core SDK cannot be located: A valid dotnet installation …

【Flutter】Flutter 使用splashscreen包创建启动页面

文章目录 一、 前言二、 什么是启动页面和 splashscreen三、 如何安装和使用 splashscreen四、 详细的代码示例&#xff1a;使用 splashscreen 创建启动页面五、 总结 一、 前言 大家好&#xff0c;今天我们要聊一聊如何在 Flutter 中使用 splashscreen 包来创建一个漂亮的启动…

使用Fiddler模拟网络

Fiddler已经预置提供了模拟Modem速度的选项&#xff0c;其位置位于&#xff1a; Rules->Performances->Simulate Modem Speeds 果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&#x…

【道友避坑】yolov5视频抽帧构建数据集

写在前面&#xff1a;本篇博客记录了yolov5视频抽帧构建数据集的全过程。 目录 一、 视频材料准备 二、数据集构建 三、运行数据集 一、 视频材料准备 1. 在yolov5-master下创建mydata目录&#xff0c;然后创建video目录和images目录、labels目录 2. 下载一个一两分钟的视频…

数据安全保护:DataSecurity Plus助您防止数据泄露

导言&#xff1a; 在数字化时代&#xff0c;数据安全已成为企业和个人必须高度关注的重要议题。数据泄露可能导致重大损失&#xff0c;包括财务损失、声誉受损以及违反法规的风险。为了帮助组织有效地防止数据泄露&#xff0c;DataSecurity Plus是一款强大的解决方案&#xff…