小组成员: 杨佳瑶,李焓蕾,张恒

跟踪日志

2024/6/28

完成内容

  • 观看视频学习开发板硬件参数以及外设资源
  • 完成开发软件Keil uVision5环境搭建
  • 实现库函数点灯程序烧录,并成功将led引脚从PD7改为PA5
  • 小组成员公共完成遥控器和信号接收器的对码,并实现遥控器控制舵机转动
  • 完成接收遥控器的信号获取输入捕获和输出比较,并统计结果

后续安排

  • 观看后续视频
  • 利用MPU6050及磁力计进行姿态解算,修正yaw轴

2024/6/29

完成内容

  • MPU6050姿态解算视频学习
  • MPU6050移植到梁山派开发板并在串口调试助手输出欧拉角度
  • MPU6050欧拉角度数据测试
  • 对于数据误差,经讨论得出,现在有两种方法解决,一个是跟视频用mpu6050来获得xyz轴角度(梁山派有从STM32移植过来的代码,验证可以直接使用),用磁力计来修正y轴偏差,其他角度尝试利用卡尔曼滤波,另一个是使用他们比赛小车上的IMU(已经从硬件角度解决漂移问题,xyz轴角度很稳定),要解决的是自己从stm32移植到梁山派。

后续安排

  • 观看后续视频
  • 完成HMC5883L移植到梁山派开发板并在串口调试助手输出数据

2024/7/02~2024/7/03 由于小学期结课任务,每天陆陆续续不能得出固定产出,今天统一写出成果

  • 查询大量资料。通过修改GPIO输出方式,修改软件I2C稳定了mpu6050的数值,但yaw角问题依然存在(老问题),利用磁力计互补能改善,但一般由于无人机四轴电机磁转影响,查询得知,会使无人机控制中更容易失调,所以选择不再加入磁力计。
  • 学习四轴飞行控制原理,6自由度
  • 复习PID算法

2024/7/06

【完成】:
(1)观看单级PID和串级PID视频,了解PID基础原理
(2)学习飞控PID算法
(3)学习梁山派芯片开发手册
(4)完成无人机叶片调整及测试
(5)完成无人机试飞

【遇到的问题】:
(1)将两个摇杆控制四个电机旋转改为一个遥感控制电机运行
(2)飞控与遥控器信号的对应,暂时不能得知

【问题解决】:
(1)通过修改代码完成1个信号PWM输入四个引脚输出

【后续工作安排】:
(1)观看后续视频
(2)通过代码编写完成另外一个摇杆控制无人机飞行方向
(3)PID调参实现无人机悬停

2024/7/08

7月8日工作进展:
【完成】
(1)观看视频,分析代码
代码来源:https://github.com/hzacross/FlightControlSystem_Study
(2)了解PID的原理以及输入输出参数

问题:暂无

后续工作安排:
继续研究代码,学习参数调整

2024/7/09

【完成】:
完成PID算法的开发,利用姿态仪反馈的角度数据实现无人机的精确悬停控制。

【遇到的问题】:
(1)mpu6050的横滚角和俯仰角用代码修正以后稳定状态和测量状态输出数据有误
(2)在使用PID算法根据姿态仪反馈的角度数据进行系统调整时,遇到了数据不稳定的问题

【问题解决】:
(1)通过在程序中debug,发现在 main函数中for(num =0; num<100; num++) 循环时,acc_x_cal 和 acc_y_cal 被累加,数组 accData 出现了越界,通过改变数组的索引方式解决了输出错误的问题。
(2)通过与其他同学的PID算法进行比较发现是因为姿态仪受到噪声干扰,导致反馈数据不准确,影响了PID控制器的性能,通过对姿态仪的反馈数据进行滤波处理解决了此问题。

【后续工作安排】:
(1)将芯片安装至无人机上进行调参
(2)针对视频学习的控制,进一步学习FreeRTOS实时操作系统进行实现

2024/7/10

学习FreeRTOS实时操作系统

2024/7/11

【完成】:
完成对FreeRTOS的裁剪
学习FreeRTOS抢占调度和时间片轮转的底层逻辑和过程,队列的使用,同步与互斥关系定义
继续完成对无人机线路及接线的优化,利用面包板和核心板排线,稳定搭载的传感器

【问题解决】:
暂无

【后续工作安排】:
(1)继续学习FreeRTOS
(2)规划无人机飞行状态,确定任务调度过程及数据传输

2024/7/12

【完成】:
通过调整PID参数逐步稳定机身
无人机解锁条件修改为当VRA的值小于1100并且start = 0时,解锁无人机(成功,并且非常好控制,较为安全)

【问题】
平衡参数还未达到最优,侧翻问题还会时不时出现

【后续工作安排】:
(1)继续学习FreeRTOS
(2)继续对无人机PID参数进行调整,实现各个方向的运动,并对运动方向进行任务级的划分

2024/7/15

【完成】:
学习使用GT-U12模块获取GPS定位信息
模块输出语句的解析

【问题】
GPS定位不准,稍有0.01的偏差,后边进行多次定位,尝试用不同型号的卫星进行定位信息的校准

【后续工作安排】:
(1)数据串口输入到梁山派开发板
(2)完成对数据的解析和标定,找出最准确的定位位置信息

2024/7/16

【完成】:
(1)找到STM32F103的相关解析GPS的代码
(2)对代码进行移植并测试

【后续工作安排】:
(1)继续学习FreeRTOS
(2)继续对无人机PID参数进行调节,搭配GPS实现自动返航任务

2024/7/18

【完成】:
(1)完成FreeRTOS的学习
(2)解决了GPS通信串口输入的问题

【后续工作安排】:
(1)串口输入数据还需要解析,而且由于GPS数据较慢,串口速度读取很快,出现很多空数据的情况,正在尝试匹配数据速率,实现对GPS数据的正确解析
(2)对飞行任务进行操作系统级别的设计和编码

2024/7/19 ~ 2024/7/22

【完成】:
(1)GPS数据解析完毕
(2)设计无人机飞行任务发现很困难,在寻找思路的时候发现有开源的代码,也是用FreeRTOS实现的:2021年 G题 植保飞行器,观看了其演示视频,发现效果很好,顺其代码往下看,其实他这个也是其他开源飞控改过来的:MiniFly四轴飞行器 ,效果也非常好,能借鉴,其中也包含了硬件资料、地面站使用教程,可以涵盖我们目前的任务。
(3)完成PID调参架的搭建

【后续工作安排】:
学习MiniFly的源代码,尝试在我们自己的设备上实现

2024/7/24

【完成】:
(1)分析MiniFly中FreeRTOS的调度及任务关系
(2)搜索了有关图传的信息,结合评论等,如果要实现一个功能完善,效果稳定的图传,直接淘宝购买是最合适的

【后续工作安排】:
(1)查看MiniFly中用户数据使用方法,能自己写协议与地面站进行通信,实时调参

2024/7/25

【完成】:
(1)学习了匿名飞控地面站的使用,学习了定义的通信协议

【后续工作安排】:
(1)写协议与地面站进行通信,实时调参
(2)找到minifly中通信协议的定义,能够挪用到我们板子上

参考文章

遥控器的信号获取输入捕获与输出比较

MPU6050姿态解算介绍

详细开发过程

问题与解决

6月28日问题

(1)在搭建程序时遇到ULINK2/ME-Cortex-M Error,NO ULINK2/ME Device found的问题
(2)接收遥控器的信号获取输入在串口监视器上数值不变
(3)无法导入GD32F4xx库
(4)下载的时候报错:Error: Flash Download failed - Target DLL has been cancelled
(5)keil免费激活

6月28日解决

(1)通过网上查找资料发现自己搭建的项目与芯片型号不符,通过修改项目型号成功解决问题
(2)通过单一变量法解决接线对应的数据变化
(3)使用离线导入即可
固件库下载地址:https://www.gd32mcu.com/cn/download/7?kw=GD32F4下载GD32F4xx AddOn压缩包,解压后安装GigaDevice.GD32F4xx_DFP.3.2.0.pack
(4)type-c接口未完全插入
(5)科学软件使用教程:https://blog.csdn.net/qq_54995462/article/details/126533029

6月29日问题

(1)MPU6050移植到梁山派开发板上以后无法在串口调制助手输出数据
(2)MPU6050数据三个角度都有很大误差,更新慢

6月29日解决

(1)经过仔细排查发现是杜邦线有问题,换掉有问题杜邦线之后数据正常输出
(2)尝试用磁力计进行互补滤波算法,修正误差

开发收获

遥控器控制以及接线

控制接线

遥控器信号控制舵机

拍摄视频如下:

MPU6050移植

四轴控制算法

无人机四轴机体结构

无人机四轴机体结构

垂直升降运动

升力>重力,四轴电机转动速度不经相同,在我们测试过程中容易出现向一边偏离的情况,这个问题是固然存在的,难以通过硬件电机速度使四轴转动速度一致(首要解决的是稳定悬停)。

俯仰角度/前后运动

前后运动
M1,M2转动速度下降,M3,M4转动速度上升->前进,并保持这个斜角,能往前进(升力在重力反方向的分力始终抵消重力)
M1,M2转动速度上升,M3,M4转动速度下降->前进,并保持这个斜角,能往前进(升力在重力反方向的分力始终抵消重力)

控制框图

横滚角度/左右运动

同前后,原理相似

航偏角度

偏航角
M1,M3转动速度 > M2,M4转动速度->逆时针
M1,M3转动速度 < M2,M4转动速度->顺时针

单级PID控制


四轴飞行器接收遥控器发送来的姿态角,作为期望角度输入到控制系统中与姿态解算算法解算出的实际姿态角度进行求取偏差,分别经过各自的PID控制器进行PID 运算,运算结果转化成电机调速的PWM 方波来调节四个电机的转速,从而调节四轴飞行器的姿态和运动。调节后的姿态角又进过姿态反馈环反馈给了输入为下一次控制做准备。

搜索资料发现:采用单级 PID 控制飞行姿态,四轴飞行器在无遥控打舵控制下自稳性能很不做错,但是遥控打舵的跟随性不够完美。这是由于四轴飞行器的螺旋桨转速与升力不成正比关系,而是呈现平方倍的关系。这也就直接导致了四轴飞行器输入与输出量不再是线性关系。所以只用单闭环 PID 控制姿态,在遥控大舵量遥控时会出现飞行器失衡或跟随时滞的现象

双闭环串级PID控制

解决这个问题可以采用双闭环策略。对角度进行 PID 控制又对角速度进行 PID 控制。 由于角度的微分就是角速度,所以角度环的误差就可以理解成角速度,把角度环的误差作为角速度环的期望值输入到角速度环,角速度环用陀螺仪来观测角速度的变化作为反馈值与期望值求取误差,然后控制角度速度尽快达到期望值,角速度环的输出值给四路电机控制飞机姿态,姿态解算算法获取实时姿态作为角度环的反馈值。这样就将两个PID控制器串联在一起,通常把角度环叫做外环,角速度环叫做内环。

双闭环串级 PID 控制比单闭环 PID 控制,多了个角速度环的控制,角速度的数据是陀螺仪测出来的,测量值一般不容易受到干扰,并且角速度变化比较快,当受外界干扰时反应迅速增强了系统的鲁棒性。这样就解决了单级PID 控制时打大舵量遥控时会出现飞行器失衡或跟随滞后的问题

电机动力分配

无线调参

利用串口进行PID参数输出,手动改代码来修PID显然较为效率低下,正在寻找上位机,希望能进行动态调参。

FreeRTOS

环境搭建

GD32开发板FreeRTOS环境搭建
https://blog.csdn.net/m0_52999945/article/details/135891681

【野火FreeRTOS例程移植到梁山派开发板之按键控灯】 https://www.bilibili.com/video/BV1Lm4y1G7Xi/?share_source=copy_web&vd_source=8e98251de20e8e78de3196f9a8473f8a

学习

GY-U12模块使用

测试将GPS模块放置到室外空旷地带,板载 LED 保持一定的频率闪烁证明定位成功了。、

串口输出GPS信号

GPS

对信号进行解析

GP :只使用 GPS-QZSS-SBAS 卫星
BD :只使用 BEIDOU 卫星
GL :只使用 GLONASS 卫星 DC
GI :只使用 INSAT 卫星
GA :只使用 GALILEO 卫星
GN :多卫星系统组合定位。

协议说明

GGA协议

GGA

GSA协议

GSA

GSV协议

GSV

RMC协议

RMC

TXT

TXT

经纬度转换

转换结果
定位相比较有一点点偏差,尝试解析不同的协议进行选择

正确的位置是在:
正确