• 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参数读取,修改等等。

  • 相关阅读:
    Linux KVM
    linux 下添加,修改,删除路由
    爬虫之requests urllib urllib2 BeautifulSoup
    MyBatis-Plus+mysql5.7 动态拼接sql语句 分页查询 自定义sql 查询条件 分组 排序
    springboot2.x+neo4j创建图形数据库
    linux(centos7)下springboot项目jar包使用shell脚本运行
    java网络爬虫-利用phantomjs和jsoup爬取动态ajax加载页面
    springboot开发qq第三方授权登录
    linux(centos7)下nginx访问静态文件403错误解决过程
    idea2019.2+springboot2.2.1版本配置热部署
  • 原文地址:https://www.cnblogs.com/ne-zha/p/7414175.html
Copyright © 2020-2023  润新知