MWCv2.2代码解析: LOOP()函数深度解读
5星 · 超过95%的资源 需积分: 47 156 浏览量
更新于2024-09-11
收藏 1.16MB DOC 举报
"MWC (MultiWii Control) 是一个开源的飞行控制系统,常用于无人机和多旋翼飞行器。本文主要对MWCv2.2版本中的代码进行解析,特别是`LOOP()`函数,它是MWC的核心循环,负责处理传感器数据、控制指令以及飞行稳定算法。"
在MWC代码中,`LOOP()`函数是整个系统运行的关键部分,它不断地执行,以实现对飞行器的实时控制。这个函数包含以下几个主要部分:
1. 变量声明:
- `trcDelayCommand`:用于记录遥控器输入保持时间,以便执行命令或关闭电机。
- `trcSticks`:存储用于命令组合的摇杆位置。
- `axis`, `i`: 用于遍历不同轴的数据。
- `error`, `errorAngle`: 代表当前的控制误差和角度误差。
- `delta`, `deltaSum`: 计算误差变化和累计误差。
- `PTerm`, `ITerm`, `DTerm`: 分别代表比例、积分和微分控制器的输出。
- `PTermACC`, `ITermACC`, `PTermGYRO`, `ITermGYRO`: 用于积分和微分控制的累积变量。
- `lastGyro[]`: 存储上一次的陀螺仪数据。
- `delta1[]`, `delta2[]`: 用于计算速度变化。
- `errorGyroI[]`, `errorAngleI[]`: 积分误差。
- `trcTime`: 用于计时。
- `initialThrottleHold`: 初始油门保持值。
- `timestamp_fixated`: 用于特定时间戳。
2. 遥控器数据处理:
- 通过`readSpektrum()`和`Read_OpenLRS_RC()`函数读取特定遥控器(如Spektrum和OpenLRSv2MULTI)的数据,确保及时更新遥控器输入。
3. 时间检查:
- 检查是否超过50Hz周期的20ms,如果是,则执行`computeRC()`函数,该函数对遥控器信号进行滤波和平均,以提高输入稳定性。
4. 控制逻辑:
- 在`LOOP()`函数中,会计算PID控制器的输出,这些输出用于调整飞行器的各个轴以达到稳定飞行。PID控制器的三个组成部分(比例、积分和微分)在误差计算和调整过程中起到关键作用。
5. 陀螺仪数据处理:
- 使用当前陀螺仪数据与上一次数据的差值来计算旋转速率,并结合积分和微分项来校正飞行器姿态。
6. 其他功能:
- 根据需要,函数还可能包含其他特定功能,例如电机控制、状态更新、故障检测等,但具体实现细节未在提供的内容中详细说明。
通过这样的循环,MWC能够实时处理传感器数据,不断调整飞行器的姿态和运动,以达到预定的飞行控制目标。这种实时性和准确性对于无人机和其他飞行器的安全和性能至关重要。理解并优化`LOOP()`函数是改进MWC性能和功能的关键。
2021-09-14 上传
2021-09-13 上传
2015-07-24 上传
2016-03-14 上传
wsxiaolx
- 粉丝: 0
- 资源: 5
最新资源
- music-metadata-react:React应用程序以测试与音乐元数据浏览器的集成
- 应用于可穿戴设备的皮肤温度测量传感器资料(原理图、PCB源文件、源代码)-电路方案
- konamicode.js:使用 konami 代码为您的网站制作复活节彩蛋
- pre-commit:自动在您的git仓库中安装一个git pre-commit脚本,该脚本在pre-commit时运行您的`npm test`。
- GeekBrains_lvl-2_FX_Chat
- yakker:用于浏览器的现代IRC客户端
- User-login:制作注册画面
- pixelcounter:计算文件夹中所有图像的像素
- 联想驱动自动安装程序.zip
- Capacitacion3:Pruebas de Liany
- cnblogs博客的Android客户端源代码
- NKalore Compiler-开源
- core.async:Clojure中用于异步编程和通信的工具
- demo-flickr:演示应用程序搜索并显示来自 Flickr 的照片
- Python库 | imbDRL-2021.1.22.1.tar.gz
- DIY制作红外遥控密码开门(原理图、程序源码、论文)-电路方案