我们实验室也是用过很多款组合导航系统,包括Novatel、SPAN(光纤惯导,死贵了)、华测的(板卡PIM222或者成品)、导远的,因为我研究方向是车辆定位方面的,所以对这些设备使用还是有一些感受的。
上手方面(配置来说),华测的直接在接收机固件里集成了配置网页,简直不要太好用。耦合了惯性单元的导航设备,共同点就是使用前要进行标定。我使用过的导远ins570,这个标定判断收敛,确实就是略显麻烦了,不过标定完成后定位效果还是不错的。上面其他几款基本上都是通过串口线进行配置,就是稍微麻烦一点,标定过程还行吧,有些不是自带wifi的,就需要依赖外部设备来给他提供网络(因为一般情况下,组合导航系统都需要RTK去提供更精准的定位)。
一、导航设备定位原理
全球定位系统(GNSS),其采用的主要导航卫星系统有GPS(美)、伽利略(欧洲)、北斗(No.1)、GLONASS(俄),某些导航系统是附带有星基增强系统(SBAS),现在的大多数组合导航系统都不是采用的某一种导航卫星系统,而是综合考虑的。
观测站的坐标求解,一般需要求解4个参数(点位坐标3个分量+1个钟差参数),因此就需要接收机能够同时观测到4颗卫星。
差分GNSS原理:将一台已知精确坐标的基准站(带有接收机),基准站接收GNSS信号,将由GNSS求出的坐标与已知的精确坐标进行对比,计算一个差分校正量,随后基准站发送校正量到其范围内的流动站进行数据修正。( 最常见的,载波相位差分-RTK)。通常,要求流动站与基准站的相对距离不超过100km。
导航设备的授时服务:不要认为导航设备只是提供了一个定位功能,它的授时功能也相当重要,由高精度的原子钟提供,可以为多传感器数据源提供统一的时间(多传感器配准,一般要经过时间配准,这个就为它提供了一种手段)。
二、坐标系说明
1)ECEF:地心地固直角系,地球坐标系。X轴穿过0经度与赤道(0纬度线)交点,Y轴穿过0纬度线和90°经度线的交点,Z轴指向北极。坐标表现形式:(x,y,z);
其中,用于导航定位的常用ECEF坐标系包括,WGS-84、CGCS2000. 这两个坐标系参数基本上是一致的,好像是椭球率有 一点点偏差。
个人认为:ECEF与LLA只是存在坐标表示方法的不同。(要不是这么回事,望大哥们指出来)
2)LLA:经纬高坐标系,全球地理坐标系,大地坐标系。坐标表现形式:(lon,lat,alt),假想地球有一个基准椭球面(光滑的)和非标准椭球面,alt是非标准椭球面的用户点到基准椭球面的高度差;纬度范围-90~+90,经度范围-180~+180;
3)ENU:东北天坐标系,导航坐标系,站心坐标系。以当前位置为坐标原点,X轴东向、Y轴北向、Z轴垂直X-Y平面,X-Y平面相当于地球上某个点的一个切面;对应的还有北东地坐标系。
4)UTM:统一横轴墨卡托坐标系,ENU的二维投影;
参考:地心地固坐标系-WGS84坐标系-东北天坐标系 – 知乎
三、SLAM中常用的坐标转换
GNSS定位拿到的数据一般是经纬度信息,转换到导航坐标系下的转换顺序是:LLA —> ECEF —> ENU;可以自己写代码去转换(网上去查找转换公式),当然也可以使用GeographicLib库去转换,示例代码如下:
GeographicLib::LocalCartesian geoConverter;
static bool init = false;
if(!init)
{// set origingeoConverter.Reset(gps_msg_ptr->latitude, gps_msg_ptr->longitude, gps_msg_ptr->altitude);init = true;
}
// convert position by origin
geoConverter.Forward(gps_msg_ptr->latitude, gps_msg_ptr->longitude, gps_msg_ptr->altitude);
四、组合导航定位不准的说明
在实际使用中,“组合导航定位不准”,这一说法,不准其实指的是导航设备的空间位置定位不准,查阅资料后我发现,位置的解算主要是与收星数有很大关联(所以遮蔽场景定位会出现偏差),即使在定位不准的条件下,导航设备提供的偏航角在一段时间内仍然能够维持较长时间,并且精度在可接受范围内,由于涉及到一些隐秘的东西,就暂时不提供测试数据及结果。
注意:前提是设备在定位出现偏差前(不准),设备已经校准完毕,达到了收敛状态。