Crazypony四轴飞行器代码框架
软件框架讲解
作者:nieyong
飞控源代码部分,都是属于一砖一瓦敲出来的。没有使用实时操作系统(RTOS),我们称之为裸机代码,托管在Github上,名字为crazepony-firmware-none,尾缀none表示未使用操作系统裸跑的意思。
那么,现在就结合裸机代码,来说说Crazepony的软件框架。
本文档以Crazepony 5.2版本为基础。Crazepony 5.0版本及以前的代码主要由马骏(CamelGo)完成。贡献者黄永祥在5.1版本中对飞控代码进行了重构,将Crazepony的稳定性推向了一个新的高度。贡献者Nieyong在5.2版本中对代码进行了整理。
软件流程图
Crazepony软件流程如下图所示:
Craepony主控使用的是STM32芯片,没有上实时操作系统,依靠中断嵌套来完成整体功能。程序核心就是通过定时器,在主循环中通过不断查询判断各个条件,这样就产生了几个大小不一样的时间段,我们根据需要就可以完成以多大的频率扫描一次遥控器指令、多久更新一次传感器数据、多久更新一次控制等等飞控需要实现的功能,尽可能的利用主控的资源。
初始化
进入主函数之后就是STM32处理器及各个部分的初始化。
接下来就是进入主循环while(1)
之中了,主循环也就是整个程序功能实现的关键,程序进入这里面就循环在里面运行了,当然中断会打断去运行中断服务程序运行完之后再回到这里运行。
主循环-100Hz循环
主循环体中首先有if(loop100HzCnt >= 10){}
这个结构,其中loop100HzCnt这个变量是在TIM4中断服务程序中累加的,1ms累加一次,也就是说定时每10ms就去完成一次其中的工作。
那么100Hz需要做一次的工作是什么呢?读取mpu6050数据,气压计数据并进行整合。因为采用软解姿态,读取的数据为加速度计和陀螺仪的AD值,将数据进行标定、滤波、校正后通过四元素融合得到三轴欧拉角度。如下图。
加速度传感器采集数据容易失真,造成姿态解算出来的欧拉角错误,只用角度单环情况下,使系统很难稳定运行,因此可以加入角速度作为内环,角速度由陀螺仪采集数据输出,采集值一般不存在受外界影响情况,抗干扰能力强,并且角速度变化灵敏,当受外界干扰时回复迅速增强了系统的鲁棒性。
Crazepony采用双闭环PID控制,如下图所示。
角度作为外环,角速度作为内环,进行姿态双环PID控制。角度环的输出值作为角速度环的输入建立自稳系统。
主循环-50Hz循环
在if(loop50HzFlag){}
进入50Hz(20ms执行一次)循环。loop50HzFlag
标志位是在TIM4中断中每20ms置位一次的,这里解析了收到的遥控器无线发送过来的指令,结合当前的姿态计算更新这些控数据给核心控制算法输出控制飞控,我们就可以控制飞控前进后退,上升下降等等操作了。如下图。
主循环-10Hz循环
同样的思路if(loop10HzFlag){}
也就是以10Hz的频率去执行下面功能。在这里可以通过蓝牙向我们的手机APP传送一些飞控的姿态信息,然后查询飞控的电量没有足够的话就让飞控降落下来,查询高度啊超出可控范围也把飞控降下来,查询是否和遥控器失联啊,失联就降下飞控等等安全飞行的控制。如下图
最后就是if(pcCmdFlag)这个了,这是一个与上位机调试有关的东西,主循环查询这个标志位,标志位是由上位机发送过来的指令置位的,它主要是处理pc机发送过来的指令,PID参数读取,修改等等。
转载于:https://www.cnblogs.com/ne-zha/p/7414175.html
Crazypony四轴飞行器代码框架相关推荐
- 3D打印Arduino 四轴飞行器
3D打印Arduino 四轴飞行器 查看原文 简介:3D打印Arduino Quadricopter 概述: 在网上搜索了构建四轴飞行器的廉价方法并且没有找到可行的解决方案之后,我们决定最好自己制造一 ...
- Udacity机器人软件工程师课程笔记(二十五) - 使用PID控制四轴飞行器 - 四轴飞行器(四旋翼)模拟器
1.四轴飞行器运动学和动力学模型 在讨论四轴飞行器时,明确定义两个参考坐标系会很有帮助:一个固定的世界坐标系W{W}W和一个牢固地附着到四轴飞行器的质心(CoM)的运动坐标系B{B}B. 假设运动坐标 ...
- 用Dota2“最强”算法PPO完成CarPole和四轴飞行器悬浮任务
[飞桨开发者说]吉祥:黑龙江哈尔滨人,毕业于桂林理工大学,检测技术与自动化装置专业,百度深度学习工程师集训营最佳学员,百度强化学习7日学员 2019年Dota 2比赛中,OpenAI Five完胜世界 ...
- ICRA2022 | OPV2V: 首个大型自动驾驶协同感知数据集+代码框架已开源
作者丨叶小飞 编辑丨极市平台 导读 本篇文章提出了首个大型自动驾驶协同感知数据集, 并提供了多达16个模型的综合Benchmark以及一套完整的代码框架,为协同感知这个新领域提供了基准. OPV2V: ...
- 四轴飞行器1.4 姿态解算和Matlab实时姿态显示
四轴飞行器1.4 姿态解算和Matlab实时姿态显示 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波 ...
- 四轴飞行器1.1 Matlab 姿态显示
四轴飞行器1.1 Matlab 姿态显示 开始做四轴了,一步一步来,东西实在很多,比较杂.先做matlab上位机,主要用来做数据分析,等板子到了可以写飞控的程序了,从底层一层一层开始写..希望能好好的 ...
- 第1讲、Cadence Allergo绘制小马哥DragonFly四轴飞行器PCB四层板教程简介
初学者在学习单片机的时候大多都没有很明确的学习目的,所以往往学了很多课程之后,还是不能独立开发一个比较简单的项目,甚至不能完成一个简单项目的单独软件或者硬件部分的开发.这是因为大多数人是被动的.没有目 ...
- 移动机器人(四)四轴飞行器
四轴飞行控制原理 四轴飞行器在空间上有6个自由度,分别是沿3个坐标轴进行平动和转动,通过对四个旋翼的转速控制来实现,6个自由度方向的运动姿态分别为:垂直升降.俯仰角度.前后飞行.横滚角度.左右侧向飞行 ...
- 四轴飞行器入门——基础知识
引言 从2016年起,细细数来入门无人机已经有两年时间.两年期间,自己边学边摸索,组装过机架四轴无人机,也修改过开源飞控的代码,但是因为种种原因,始终没有写过相关博客记录下自己的学习历程.最近,一个学 ...
最新文章
- 防止模型过拟合的必备方法!
- 什么是数据中心,它们是如何变化的?
- 求1+2+……+N的和
- Linux crond实例
- java 里面matches什么意思_Java Regex中的matches()和find()之间的区别
- html中select标签乱码,select 的过程中中文乱码有关问题求教
- 【踩坑】activiti工作流的svg-xml解析报错
- 桌面虚拟化(四):第二阶段,形影不离的贴身秘书
- python menu_Python——Menu控件
- 棋盘算法c语言程序,C语言经典算法 - 骑士走棋盘
- 文字练习-读书的目的
- Android蓝牙系统框架和代码结构
- wps将批量数字转换成条形码_excel表格怎么把数据转换条形码-WPS表格中怎么把数字还原成条形码,本来是条形码的。...
- 常用邮箱服务器地址、端口(POP3/SMTP)
- python练习题:求10万以内的质数
- linux之ps命令--进程快照
- ?? 关于zmq_proxy
- 【Kotlin学习】Kotlin基础知识
- 企业如何成功?先看公司战略(二)
- 【luogu P3214】卡农(数学)(DP)
热门文章
- Trace文件过量生成问题解决
- zabbix-2.0.8日常巡检-检测项目状态
- Ubuntu 源码方式安装Subversion
- php当前月每天时间戳,php获取当前月与上个月月初及月末时间戳的方法
- C++ 接口 函数导出_Matlab与C/C++混合编程、Visual C++与Matlab封装库互相调用相关要点...
- 在此iphone上尚未受信任_通知:这5款iPhone过保依然可以免费维修
- Vue简介及HelloWord编写
- Python机器学习:线型回归法007多元线性回归和正规方程的解
- html瀑布流视频列表,StaggeredGridLayoutManager实现瀑布流视频列表和头部广告位以及分栏Header条...
- android+后台+拍照,Android相机无法从后台服务拍照