遗留问题
- 电池和力的关系没有解决,会出现掉高的现象。【已解决,新代码中
task.h
中88行,注释宏定义,即使用双环控制(高度环和速度环),避免加速度环积分造成的影响。】
- 关乎巡线的偏向角,后面可以去改改看
- 寻线:左右位置双闭环,前后光流数据
- 验证:相机坐标的正负问题
- 验证:串口模式1 2
引脚注记表
飞控模块 | 功能 |
---|---|
串口SicA | 外接GPS |
串口SicC | 接收STM32转发来的数据 |
执行周期注记
模块功能 | 频率 |
---|---|
STM32位置信息转发速率 | 60Hz |
位置控制速率 | 200Hz(可提高到500Hz) |
姿态控制 | 200Hz |
飞机姿态
俯仰(pitch) - x轴
翻滚(roll) - y轴
偏航(yaw) - z轴
一、起飞注意
- 开箱装电池的时候务必注意,固定电池的魔术扣不要挡住超声波~
- 在进行视觉模块的SD卡WIFI设置时,千万不要格式化!!!
- 起飞前摄像头一定要放到黑点正上方
- 意外情况,猛地向上提拉飞机
- 视觉模组下程序需要用电池供电,飞控下程序电池断开用USB供电下
二、软件
地面站
- 无人机和地面站之间的通讯 - 蓝牙
- 在地面站软件中【通讯设置】,打开串口,注意观察对应的高度信息!【必须得有对应的高度信息才能起飞】
- 视觉模组供电注意共地
- 地面站【运动参数配置】:先进行读取FLASH参数,而后然后通过××.pid后缀的文件单独写入参数到FLASH中去。
- 地面站【位置信息与校准】:看那张PID参数的图片(需要手动输入,然后单个写入FLASH)
视觉模块
- 视觉模组与地面站之间的通信 - 无线模块
- 取出SD卡,插上电脑,将wap文件设置局域网的WIFI名称和密码,然后复制到SD卡的boot文件夹
- 插入SD卡到视觉模组
- 打开视觉的IDE,然后选择本机的IP地址。
- 连接完成后,再次打开地面站然健在运动测试界面进行相关的测试
三、飞控程序理解【Blob算法定点为例】
程序总框图
按照这个框图展开,看下面程序。【仔细梳理下,也许就会有头绪了。。】
视觉数据的接收 -> 转换为单位m -> 卡尔曼滤波 -> 得到修正后位置以及x y z三轴运动速度 -> 位置控制-> 期望加速度 -> 期望姿态角 -> 姿态控制
模型定出来之后只跟模型的位置有关,跟姿态控制关系不大。
1、期望偏航获取
视觉模组,捕捉数据并通过串口将实时位置信息转发给STM32。
串口的模式1是直通模式,就是视觉模组的数据通过STM32的DMA直接转接到TI的飞控板,而STM32是单独的读取超声波的数据然后传到飞控板。
串口的模式2是整合模式,视觉模组的12字节数据中,最后一个字节的0xAA。发到32后,在最后的0xAA前会留出4个空字节,以供超声波数据的加入,所以称之为整合模式。
注意
- 数据包头0x55和0xAA,以及数据包尾都是固定的。【协议这样设置的】
- 且视觉模组发给飞控时每次只发12个字节,而STM32发给飞控时发送16个字节,其中在包尾的0xAA前,加入了4字节的超声波数据。
STM32进行数据模组和超声波数据的组合,然后通过串口发送到飞控串口C。飞控的串口C接收到消息后,进行视觉数据的处理。
注1:串口触发方式FIFO,只有FIFO接收到指定数量的数据时才会触发串口中断。
先开视觉,再开飞控这样数据才不会错。
注:FIFO最大16个字节。那0x0030和16个字节还能对应上吗?【这个时候就可以看一下手册了,第4位为深度为,决定了最多只能那个存放2^4个字节,而第五位为使能位。】
信号量在执行完程序后会自动清零。
flyMode中可以自定义模式
注2:我们的期望轨迹是60Hz,而我们的位置控制是200Hz,如何把60Hz转到200Hz呢?没错了卡尔曼滤波。我们的模型就是加速度对应算出的s=1/2at^2,而我们的预测数据就是获取的期望轨迹(误差),两者得到的协方差越小越好!!!(舞草,原来是这个意思哦。~)
卡尔曼滤波就是通过调节卡尔曼增益以期得到观测和模型的相信度,使得协方差达到最优。
卡尔曼滤波参数表
2、位置控制【注意位置输出的是XYZ三轴的加速度量】
三环控制:高度控制 – 速度控制 – 加速度控制
3、姿态控制
姿态控制先进行20Hz的低通滤波
其中β是转动惯量,I是PID输出。
以上是pitch轴的调节,其他两轴的调节大体类似,这里不再一一给出,我们直接看控制分配的。
4、控制分配
以上便是全部的姿态控制,姿态控制的输出是力矩,那么接下来便是进行力矩的分配了。
5、力到油门
附:锡月的控制环节,可以80ms完成的细节:
【获取IMU姿态数据】
加速度截止频率低可以,因为有很大噪声
陀螺仪的截止频率低带来的后果是延迟大~~~
截止频率改变,双闭环的陀螺仪和加速度计的参数都需要调,PID参数已经不再适用!