使用OpenMV引导无人机飞行

本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线 , 链接如下: https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983

无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284

本章节源程序地址:https://github.com/nufeichuiyun/ardupilot 对应git分支(branch): TestOpenMV_p

一、添加测试程序

 由于这里添加了新的硬件外设,无法直接进行软件仿真,所以我们需要先编写一些代码,模拟出OpenMV发送数据到飞控,然后才能进行软件仿真。当我们通过软件仿真把OpenMV引导数据引导无人机飞行的顶层逻辑跑通之后,再进行实际飞行测试,这样能尽量较少在外场Debug的工作量。

二、在引导模式下飞行

 添加顶层逻辑代码,在Guided模式下,如果OpenMV有引导数据过来,就将目标航点设置为识别点,从而飞机将自动飞向目标点。

三、进行模拟飞行

 编译——模拟——Debug——编译——模拟——……测试通过。

四、删除测试程序,进行实物飞行

 如下图所示,在“ardupilot/ArduCopter/ArduCopter.cpp”文件中,删除红框里的代码(注意有两个红框),就删掉了测试程序,下一步可以进行实物飞行测试。

在实物测试中如果遇到问题,请按照本文下方“第六部分 疑难解答”里的步骤检查问题所在。

五、应用展望

 通过测试发现,OpenMV的性能基本满足大学生电子设计竞赛级别的应用需求,但是对于对于更加复杂的应用来讲,OpenMV的性能就略显不足了,后期我们的课程将会添加使用“NVIDIA Xavier NX”来实现更加复杂的AI技术来引导无人机飞行的例程,敬请期待!

 但是,“技术实现”不同于单纯的“科学研究”,它是一个不断权衡利弊、不断折中的过程。OpenMV在易用性、低功耗、体积、重量、成本方面,比“NVIDIA Xavier NX”要强很多,因此将OpenMV集成到无人机上,并不代表者“低端”,一切都需要从实际需求角度出发来进行选择。

六、疑难解答

 本节的例程虽然代码量不大,但是由于牵涉到两个硬件设备的联调,因此请大家不要指望能非常顺利地一遍走通所有步骤,遇到问题的时候,请按照如下步骤进行检测:

 1、将OpenMV通过USB接电脑,在线运行,不用解锁飞机,手拿着飞机对准被识别物体,确保它的确是识别到了目标物体;

 这一步解决图像识别数据源头的问题,存在如下可能:

  • 没摘掉镜头盖?
  • OpenMV镜头视场角太小,实际飞行中目标物体一直没有进入视野?
  • 室外环境,逆光情况下太阳严重干扰图像识别效果?
  • OpenMV程序没有写对?运行一段时间死机了?

 2、使用USB转串口模块接OpenMV的串口TX引脚,在电脑上的“串口调试助手”上查看原始的帧是否正确发送了出来,波特率是否正确;

 注意,这一步看似麻烦,实际上这一步是发现问题的最关键一步,存在如下可能:

  • OpenMV的串口TX、RX弄反了?
  • OpenMV的引脚号搞错了,接的根本就不是OpenMV的串口TX引脚?
  • OpenMV串口的波特率弄错了?虽然通过串口调试助手可以看到一堆十六进制数据在不断输出,但是仔细观察发现数据的帧头、帧结构不对;
  • OpenMV端的线虚接?或者虚焊?甚至线缆本身是虚的?这个概率不小!

 3、检查连线是否正确,注意OpenMV的串口TX接的是飞控的串口RX;

  注意这是串口连线时最常见的错误!

 4、检查飞控的全部参数列表中对应串口的参数是否设置正确(以视频教程里的讲解为准);

  我猜测有30%的人会在这里出问题。

 5、如果以上各个步骤检查无误,并且如果你是按照教程里的讲解自己手写的代码,请直接使用教程中的代码试试,如果教程中的代码可以正常运行,而你的代码不行,请使用Github Desktop这个软件一行行对比你写的代码哪里有问题。

学习本节课的内容遇到问题后,在我们的微信群里提问之前,请严格按照上述步骤进行错误排查,如果上述所有步骤检查后依然有问题,再到群里提问,看看大家有没有好的建议。

无人机调试,飞控硬件定制,固件修改,log日志分析,飞控驱动添加
请QQ联系:3500985284

微信公众号:“怒飞垂云”,扫描下图添加

京ICP备19049723号   |   京公网安备 11010502039327号