自制基于UAVCAN(DroneCAN)的GNSS模块

本文为《无人机飞控固件开发教程》系列视频的辅助资料,已经在“网易云课堂”上线 , 链接如下: 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颗星

二、硬件设计注意事项

  1. 陶瓷天线底部大面积接地覆铜:保证覆铜的完整性
  2. 前端低噪声放大器的放大倍数并不是越大越好,参考文档:https://content.u-blox.com/sites/default/files/products/documents/GNSS-Antennas_AppNote_%28UBX-15030289%29.pdf
  3. 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
京ICP备19049723号   |   京公网安备 11010502039327号