一、简介
当我们使用UWB(4基站模式)模拟GPS进行定位时,需要修改ArduPilot源码才可避免解锁检查不通过的报错和获得更好的定位效果。假如使用6基站或更多则可以无视本文章。
目前ArduPilot支持DCM,EKF2,和EKF3三种姿态估计器,DCM由于鲁棒性较差,目前几乎没有使用,主要使用EKF2和EKF3。(EKF3相比EKF2支持更多的传感器源)。
源码获取以及开发环境搭建可参考ArdePilot官方文档:Setting up the Build Environment (Linux/Ubuntu) — Dev documentation
二、源码修改
1、切换至最新的稳定版固件
首先我们输入git tag
查看源代码中包含的所有tag,按回车下一行,直到要的版本后,按 “q” 退出,从多旋翼4.5.7 稳定版固件创建分支,分支名为:UWBCopter4.5.7,分支名可自行更换,任意稳定版的固件也可按需更换。
git checkout -b UWBCopter4.5.7 Copter-4.5.7
2、更新子模块
只要切换分支,就要更新子模块。
git submodule update --init --recursive
3、修改源码
分别进入到以下文件夹中:
libraries->AP_NavEKF2
libraries->AP_NavEKF2
然后分别找到以下四个文件:
AP_NavEKF2_VehicleStatus.cpp
AP_NavEKF2_Measurements.cpp
AP_NavEKF3_VehicleStatus.cpp
AP_NavEKF3_Measurements.cpp
我们将其中星数判断中的6颗星全部改为四颗星,修改位置如下:
三、固件编译
我们修改完源码后,回到ArduPilot根目录,基于waf编译APM飞控固件
1、配置飞控类型
首先我们查看支持的所有飞控类型:
./waf list_boards
这里我们以雷巡的V5 Nano为例:
./waf configure --board CUAVv5Nano
2、编译固件
如果是编译多旋翼固件,运行下面的命令
./waf copter
如果想编译其他固件还可以选择以下命令
常规固定翼固件或者垂直起降固定翼固件
./waf plane
直升机固件
./waf heli
无人车固件
./waf rover
潜水艇固件
./waf sub
此时,我们的固件就已经编译出来了,我们将其刷到飞控中即可。
四、参数设置
固件成功刷入后,按照以下设置参数即可。
SERIAL3_BAUD:115
SERIAL3_PROTOCOL:5
GPS_TYPE:5
AHRS_EKF_TYPE:2(使用EKF2状态估计器)
EK2_ENABLE:1
EK3_ENABLE:0
EK2_GPS_TYPE:2
AHRS_EKF_TYPE:3(使用EKF3状态估计器)
EK2_ENABLE:0
EK3_ENABLE:1
EK2_GPS_TYPE:2
修改完成后,我们就可以使用UWB(4基站模式)模拟GPS进行定位了。