四旋翼自主飞行器探测跟踪系统项目的随笔

项目介绍

本项目以16位瑞萨单片机RX23T/R5F523T5ADFM做主控,STM32F407单片机做飞控板,驱动四个直流电机,利用角速度传感器,加速度传感器等各类传感器组成飞行器飞行状态检测控制,采用超声波,光流计检测高度。以C++语言,PID算法实现控制软件的编写及系统方案设计分别完成了总体结构设计,硬件设计,软件设计,最后,进行调试,验证试飞,测试各项功能

项目特点

  1. 本项目采用主控和飞控分开的结构,降低主控负荷。
    
  2. 使用了双环PID控制技术,增强飞行器稳定性。
    
  3. 主要功能模块分开开发,提升了项目开发效率。
    
  4. 各个功能模块彼此独立,易于调试排错。
    
  5. 项目层次分明,有着良好的可读性,易扩展性。
    

主要内容

1. 主控与飞控串口通信协议及程序开发,兼容遥控器PWM波通信,以防飞行器失控。
2. 追踪算法,包括图像采集处理,腐蚀算法,PID位移环控制。
3. 总体框架设计。

个人随想

这是我本科阶段完成的难度较大的项目。通过这次实践,对单片机开发,各传感器模块使用以及器件选型设计等多方面能力有一定锻炼作用。

跟同学合作开发项目,在图像采集,悬停定位等步骤存在很多争议,但是最后我们通过耐心商讨或测试来解决争议。

在项目开发过程中遇到了各种问题,通过查阅API,百度,知网,翻CSDN,将问题解决。

以下为具体描述:

飞控选择

如果想参加电赛,并且希望学习简洁高效的开源飞控代码,及相关算法,推荐匿名科技的四轴飞行器。

四旋翼自主飞行器探测跟踪系统项目的随笔

开发初期

mpu6050的运用,三轴加速度器和陀螺仪能在模块内部的mcu进行数据处理,,经过复杂的数学运算得到四元数,然后除以q30,再经过简单的代数运算就能得到欧拉角(即俯仰pit,横滚rol,航向角度yaw),mpu6050自带fifo,可以不用在意数据传输的时序问题,cpu可以很方便的从fifo读取数据进行处理

我们可以通过遥控器来发送标准航模信号对飞控进行控制,,飞控stm32f407zgt6单片机里面的定时器3和定时器4总共8个输入捕获通道,将接收机接受到的信号捕获进单片机,,并且在通道数据处理函数中赋值给相关函数,进行数据处理。

除了模拟pwm波对飞控进行控制,我们还可以用一块单片机通过串口,iic,对飞控进行控制,根据通信协议,将数据以合法的帧发送,飞控接受到数据,进行协议预解析,判断数据合法性,如果合法,则自动调用协议解析函数,执行相应的功能。

关于腐蚀算法,CSDN有大佬有详细介绍,我也是借用他的思路来实现的,读者自己搜索。

四旋翼自主飞行器探测跟踪系统项目的随笔

追踪小车设计

小车是在超市买的一个遥控汽车,通体刷红,是为了与背景(白色)有明显区别,提高图像识别中腐蚀算法的准确度

小车自带一块3.7V的1S电源,对主控板供电,主控板控制超声波测距传感器,在一定距离检测到飞机处于小车上空,则蜂鸣器发出声响,二极管进行闪烁。

四旋翼自主飞行器探测跟踪系统项目的随笔

飞行器底部

其实定高较容易实现,直接写一个高度环,对角度进行PID控制就能收到不错的效果,而在水平面上的悬停较难实现。初期有考虑使用光流计,效果比较OK,但是违反大赛规定,只能需求其他办法。

队友有提出根据六轴数据进行积分纠偏,实际效果可行,但追踪需要另外的代码实现。

另一种方案则是,在摄像头所拍摄的画面建立坐标系,以图像中心为原点,并规定为飞行器所在位置,利用腐蚀算法获取目标坐标设为期望坐标,在两轴上分别计算期望差,对其进行PID控制。理论上来说,是较好的解决方案,因为以后追踪的原理可以与此相同。

但此方案存在个问题就是,摄像头画面不水平会带来较大误差,实际中摄像头画面肯定不是水平的,所以需要根据机身倾斜角度对其建立的坐标系进行一个投影变换(对俯仰角,横滚角分别代入变换,但航向角不用变换,此处我们不需要准确的航向角),变换成水平面上的投影坐标系才可用。

四旋翼自主飞行器探测跟踪系统项目的随笔

飞行器完全图

整体设计为:由主控获取并处理各传感器数据及图像数据,隔行存储获得240*360的二进制图像,以此做为图像处理的原始数据。根据结果建立一个环对飞控进行操控,理论上双环PID就变成了三环,除角速度环,角度环之外增加了控制环。

为防止意外,应该给与PWM波高优先级,若飞机失控,可以通过遥控操作使其降落。PWM波在于检测高电平的长度来传递信息,所以与频率无关。
四旋翼自主飞行器探测跟踪系统项目的随笔

测试环境

地面站调整很方便,pid参数调整,收发指令,航线姿态,关键参数,数据波形分析。超声波和气压计联合定高,室外gps悬停,地面站减轻了测试负担。

关于pid的调整,可以通过地面站直接进行调整,比在代码中修改数值,方便很多,另外有一个串口可以接数传模块,我们可以在飞行过程中飞控实时将数据传到地面站,观察相关传感器的参数变化,对于后期调整pid,能够有资料可依而不是背口诀碰运气。

测试花的时间比开发要长,实际上在无GPS情况下实现准确悬停是一个较难的事,我们试过很多方法,但终究不尽如意,希望读者加油!
四旋翼自主飞行器探测跟踪系统项目的随笔

结束语

如有错误,欢迎指正!