/electronic-contest-flight

2023 年电子设计大赛无人机

Primary LanguageC

2023 年电子设计大赛无人机题

最终效果

硬件介绍

前置知识

通信协议说明

实现方法

问题

1 最终效果

使用 UWB + 光流基础部分全部完成,发挥部分发现火源后未能进入下一步动作。

2 硬件介绍

2.1 飞控

飞控使用匿名的凌霄飞控,凌霄飞控是半开源飞控,里面有两部分分别为凌霄 IMU 和单片机。IMU 闭源使用各种飞控算法对 IMU 传感器数据进行融合,用户可通过对单片机编程通过 API 向 IMU 发送指令,模拟遥控器对飞机控制。

2.2 T265

本来使用 T265 追踪摄像头上跑的 VINS 算法输出的位置坐标进行室内定位,但经过多次测试,稳定性较差,所以放弃使用该方案,改用 UWB 定位。

2.3 UWB

使用 NoopLoop 的 LTP-S 的基站和 LTP-SS 的标签。参考用户手册即可对其开发。

2.4 机架

F450,使用匿名上位机可以针对飞机飞行情况,调整单参数。

3 前置知识

3.1 C/C++ 编程

可以自己在网上找相关课程学习

3.2 单片机基础

可以学习 STM 32 单片机,懂得串口、时钟、中断等基础知识即可。

3.3 T265 使用方法

虽然最终没有使用 T265 ,但还是花了一定时间去了解这个摄像头,所以说一下。T265 使用是通过 SDK 获取摄像头上的图像,数据等。获取的数据包括 IMU 输出的姿态解算数据,融合图像 SLAM 算法处理后输出的坐标数据,速度数据等。SDK 有 Python,C++ 等接口很容易使用。

3.4 PID 算法

推荐教程:视频教程

4 通信协议说明

本代码中飞控与外设通信使用相同的协议。

帧头 功能码 数据长度 数据 校验和 附加校验和
0xbb ID 号 length data sum add_sum
ID号
树莓派 0x01
小车数传 0x02
OpenMV 0x03
OpenMV命令编号
开始识别 0x02
开警示灯 0x03
舵机旋转 0x04
关闭识别 0x05

5 实现方法

基本上是两个任务,一个是在 user_task.c 文件里,一个是在 ano_lx.c 文件里的定时器中断里每秒发送坐标。

5.1 用户任务状态机

|-> 辅助通道 3 拨到 2000 且 openmv 任务开始 且 openmv 任务未结束 且 openmv 识别到火源。进入靠近火源任务。
|
|-> openmv 任务未开始 且 openmv 没识别到火源。进入正常巡航任务。
|
|-> openmv 识别到火源 且 openmv 任务未结束。进入悬停,计算识别时间200ms防止误识别。
|
|-> openmv 任务开始 且 openmv 未识别到火源。进入悬停,计算未识别时间,超过 2s 自动退出 openmv 任务。

5.2 室内无人机角度获取靠IMU输出欧拉角(需要把罗盘融合参数调为0)

6 问题

6.1 逻辑感觉没问题,但识别到后一直悬停,不结束。

6.2 t265 替换光流速度速度方向没问题(需要做坐标系变换),但转过角度后无法定点。