MWC_v2.2 LOOP函数详解与代码解析
5星 · 超过95%的资源 需积分: 43 40 浏览量
更新于2024-09-09
1
收藏 216KB DOC 举报
MWC_v2.2代码解读主要关注的是LOOP()函数在一款无人飞行器控制程序中的实现与功能。该函数是整个控制系统的核心部分,负责处理遥控器输入并根据这些输入调整飞行器的姿态控制。以下是关于该函数的详细解析:
1. 变量定义:
- `uint8_trcDelayCommand`:表示电机运行模式切换间隔,以50Hz的RC测量周期为单位。
- `uint8_trcSticks`:保存上一指令组合的杆位状态,用于组合控制策略。
- 一系列整数变量(如`terror`, `errorAngle`, `delta`, `PTerm`, `ITerm`, 等)用于计算PID(比例-积分-微分)控制算法中的误差、角速度差以及各阶段的积分和微分项。
2. PID控制器:
- `LOOP()`函数利用PID算法来稳定飞行器的姿态。PID控制器是一种常见的闭环控制方法,通过比较设定的目标值(errorAngle)与实际值,调整电机的输出(throttle)以减小误差。它包括三个参数:比例P、积分I和微分D,分别对应于PTerm、ITerm和DTerm。
3. 滤波与延迟处理:
- 在函数中,有对RC信号的实时处理,通过`computeRC()`函数对接收到的遥控器信号进行循环滤波,这有助于减少噪声影响,提高控制精度。滤波过程涉及取多组数据的平均值,确保在80毫秒的时间窗口内得到更稳定的信号。
4. 特殊遥控器支持:
- MWC_v2.2代码还考虑到了特定类型的遥控器,如SPEKTRUM和OPENLRSv2MULTI。针对这些遥控器,有专门的读取函数,确保兼容性并获取正确的输入数据。
5. 定时器与状态管理:
- `static uint32_trcTime`记录当前时间,`timestamp_fixated`可能用于固定时间相关的操作,如保持初始的油门值直到某个特定时间点。
6. 初始化与状态跟踪:
- 函数中包含静态变量(如`lastGyro[]`, `delta1[]`, `delta2[]`),用于存储历史数据以便计算加速度和角速度的变化。另外,还有误差积分变量如`terrorGyroI[]`和`terrorAngleI[]`,用于更新PID控制器的积分项。
MWC_v2.2的LOOP()函数是一个复杂的控制逻辑核心,它结合了PID算法、信号处理技术以及对不同遥控器的支持,确保了飞行器在接收到遥控器指令后能准确、稳定地执行动作。理解并调试这样的代码对于维护和优化无人机性能至关重要。
2021-10-10 上传
2021-09-30 上传
2021-10-02 上传
2021-10-01 上传
2022-09-22 上传
2022-07-14 上传
李大戮
- 粉丝: 1
- 资源: 28
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器