本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线 , 链接如下: https://study.163.com/course/introduction/1209568864.htm?share=1&shareId=1448054983,无人机调试,飞控硬件定制、固件修改,日志分析,请QQ联系:3500985284
一、模块硬件介绍
- GNSS模块:u-blox M9N,支持北斗、GPS、格洛纳斯和伽利略四系统并发处理
- 陶瓷天线:太盟PA025AZ009,支持北斗、GPS、格洛纳斯三系统。根据太盟的回复,25*25*4尺寸的陶瓷天线无法做到完美的四系统兼容,因此砍掉了国内不常用的伽利略系统支持,如果强行支持伽利略系统,会导致其他三系统的效果变差
- 主处理器:STM32F412,Cortex- M4内核
- 磁罗盘:IST8310
- RGB LED:7个高亮度RGB LED环绕排列
- 对外接口:4pin GH连接器,CAN总线,UAVCAN协议(又名DroneCAN)
- 适配飞控固件:APM(ardupilot),已经在多旋翼、固定翼、无人车上测试过
- 开源资料下载地址:https://gitee.com/junzixing/nfcy-gnss
RGB LED运行效果:
测试环境:正北方向150米和正东方向100米处都是20层以上高楼。
测试效果:遮挡环境下轻松28颗星,空旷地带则最高观测到过32颗星
二、硬件设计注意事项
- 陶瓷天线底部大面积接地覆铜:保证覆铜的完整性
- 前端低噪声放大器的放大倍数并不是越大越好,参考文档:https://content.u-blox.com/sites/default/files/products/documents/GNSS-Antennas_AppNote_%28UBX-15030289%29.pdf
- RGB LED控制信号电平转换:实测3.3V直接控制会导致灯时好时坏
三、固件移植
1、切换到外设稳定版分支
# 切换到最新的稳定版外设代码分支
git checkout -b My_AP_Periph-1.5.1 AP_Periph-1.5.1
# 更新子模块,这一步不能省!
git submodule update --init --recursive
已经切换好分支、更新好子模块、可以直接编译的代码压缩包:
链接:https://pan.baidu.com/s/1RnhJPWQkCa9P03TqBYymog
提取码:nfcy
2、代码结构
a、顶层代码位置:ardupilot/Tools/AP_Periph文件夹
b、主程序:AP_periph.cpp(代码不多,建议大家将AP_Periph文件夹下的代码都过一遍)
3、HW文件创建与修改
a、HW文件的位置跟飞控HW文件的位置一样,都是ardupilot/libraries/AP_HAL_ChibiOS/hwdef
b、HW文件的语法规则与飞控的HW文件相同
4、修改代码,解决RGB LED在等待分配CAN ID时不亮的问题
正常情况下,从刚上电到飞控给GNSS模块分配CAN ID这段时间,GNSS模块上的RGB LED应该闪烁彩虹灯(持续1.5秒),但是由于代码有小bug,当RGB LED数量不为8时,此功能不生效,因此需要修改代码。
5、编译
# 你的编译环境大概率会缺几个python包,我们先安装一下
# 即使不缺,安装时也会提示,因此为了后面不出错,建议都安装一下。不要头铁,还是装一下吧
pip3 install empy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install serial -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install pexpect -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install intelhex -i https://pypi.tuna.tsinghua.edu.cn/simple
# 指定编译目标为怒飞垂云GNSS模块的BootLoader
./waf configure --board NFCY_GNSS --bootloader
# 编译BootLoader,这一步如果报错,请看本文最底部的“疑难解答”部分
./waf bootloader
# 将编译生成的BootLoader(ardupilot/build/NFCY_GNSS/bin/AP_Bootloader.bin这个文件)
# 放入ardupilot/Tools/bootloaders文件夹,然后重命名为NFCY_GNSS_bl.bin
# 清理之前的编译文件,为下一步编译固件做准备
./waf distclean
# 指定为编译怒飞垂云GNSS模块的固件
./waf configure --board NFCY_GNSS
# 编译怒飞垂云GNSS模块的固件
# 注意,这一步可能会提示缺少python包,处理方法见本章节底部的“疑难解答”的第一条
./waf AP_Periph
四、固件烧写
方法与“课时16”中烧写飞控固件的方法相同,教程里使用的是“正点原子Mini-Pro脱机下载器”。
五、飞控参数设置
- CAN_P1_DRIVER:1(如果GNSS模块接到飞控的CAN1接口上)
- CAN_P2_DRIVER:1(如果GNSS模块接到飞控的CAN2接口上)
- NTF_LED_TYPES:双击原有值,在弹出小窗口中勾选“DroneCAN”
- GPS_TYPE:9
注意:重新上电生效(USB拔掉,如果飞机电池也插着的话,电池也应该拔掉)
注意:重新上电生效(USB拔掉,如果飞机电池也插着的话,电池也应该拔掉)
注意:重新上电生效(USB拔掉,如果飞机电池也插着的话,电池也应该拔掉)
(容易出错的地方说100遍,此处省略97遍)
六、疑难解答
学员关于本节课提出的问题将逐步汇总到这里。
1、提示“ModuleNotFoundError: No module named ‘future’”
这个提示的意思是cygwin64这个环境内部缺少名为“future”的包,使用下面的命令安装即可。
注意:加-i https://pypi.tuna.tsinghua.edu.cn/simple是为了使用国内源,从而下载速度飞起
pip3 install future -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注意,缺包是正常的,缺啥装啥即可,不要担心
# 甚至安装这些包的过程中也会出错,那就重新安装这个包即可
2、提示“you need to install empy with ‘python -m pip install empy’”
这个提示跟上一条是类似的,指的是你的cygwin64环境内缺少名为“empy”的python包,使用如下命令安装即可。
注意:加-i https://pypi.tuna.tsinghua.edu.cn/simple是为了使用国内源,从而下载速度飞起
pip3 install empy -i https://pypi.tuna.tsinghua.edu.cn/simple
# 注意,还有可能提示缺其他包,比如serial,则使用下面的命令安装它即可,其他包也一样
pip3 install serial -i https://pypi.tuna.tsinghua.edu.cn/simple
# 缺pexpect包
pip3 install pexpect -i https://pypi.tuna.tsinghua.edu.cn/simple