ArduPilot使用UWB定位

ArduPilot使用UWB定位

一、简介 当我们使用UWB(4基站模式)模拟GPS进行定位时,需要修改ArduPilot源码才可避免解锁检查不通过的报错和获得更好的定位效果。假如使用6基站或更多则可以无视本文章。 目前ArduPilot支持DCM,EKF2,和EKF3三种姿态估计器,DCM由于鲁棒性较差,目前几乎没有使用,主要使用

一、简介

当我们使用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进行定位了。

Comment