最终效果
硬件介绍
前置知识
通信协议说明
实现方法
问题
使用 UWB + 光流基础部分全部完成,发挥部分发现火源后未能进入下一步动作。
飞控使用匿名的凌霄飞控,凌霄飞控是半开源飞控,里面有两部分分别为凌霄 IMU 和单片机。IMU 闭源使用各种飞控算法对 IMU 传感器数据进行融合,用户可通过对单片机编程通过 API 向 IMU 发送指令,模拟遥控器对飞机控制。
本来使用 T265 追踪摄像头上跑的 VINS 算法输出的位置坐标进行室内定位,但经过多次测试,稳定性较差,所以放弃使用该方案,改用 UWB 定位。
使用 NoopLoop 的 LTP-S 的基站和 LTP-SS 的标签。参考用户手册即可对其开发。
F450,使用匿名上位机可以针对飞机飞行情况,调整单参数。
可以自己在网上找相关课程学习
可以学习 STM 32 单片机,懂得串口、时钟、中断等基础知识即可。
虽然最终没有使用 T265 ,但还是花了一定时间去了解这个摄像头,所以说一下。T265 使用是通过 SDK 获取摄像头上的图像,数据等。获取的数据包括 IMU 输出的姿态解算数据,融合图像 SLAM 算法处理后输出的坐标数据,速度数据等。SDK 有 Python,C++ 等接口很容易使用。
推荐教程:视频教程
本代码中飞控与外设通信使用相同的协议。
帧头 | 功能码 | 数据长度 | 数据 | 校验和 | 附加校验和 |
---|---|---|---|---|---|
0xbb | ID 号 | length | data | sum | add_sum |
ID号 | |
---|---|
树莓派 | 0x01 |
小车数传 | 0x02 |
OpenMV | 0x03 |
OpenMV命令编号 | |
---|---|
开始识别 | 0x02 |
开警示灯 | 0x03 |
舵机旋转 | 0x04 |
关闭识别 | 0x05 |
基本上是两个任务,一个是在 user_task.c 文件里,一个是在 ano_lx.c 文件里的定时器中断里每秒发送坐标。
|-> 辅助通道 3 拨到 2000 且 openmv 任务开始 且 openmv 任务未结束 且 openmv 识别到火源。进入靠近火源任务。
|
|-> openmv 任务未开始 且 openmv 没识别到火源。进入正常巡航任务。
|
|-> openmv 识别到火源 且 openmv 任务未结束。进入悬停,计算识别时间200ms防止误识别。
|
|-> openmv 任务开始 且 openmv 未识别到火源。进入悬停,计算未识别时间,超过 2s 自动退出 openmv 任务。