基于px4飞控日志进行SLAM估计位置和GPS经纬度的对比分析

我们平常基于PX4室外实飞SLAM定位时,想评估分析下SLAM估计的位置如何,我们可以借助于GPS数据作为位置真值进行简单对比分析(RTK更好,但是对于很多普通学生而言可能没有RTK,而GPS模块很便宜),这里介绍下,如何基于px4飞控日志进行SLAM估计位置和GPS经纬度的对比分析,这里的前提是无人机上装有GPS模块并接在了PX4飞控上,但是位置来源选择的是来自于视觉,不是GPS,也就是基于SLAM位姿进行定位飞行,而飞控日志会同时也记录下GPS的经纬高信息。这里所用的px4日志分析工具是flightplot。

若将地球看做规则球体。

地球半径 R:6371000 m
地球周长:2 * π * R = 40030173 m
任意地球经度周长:40030173 m
30°纬度圈周长:40030173 * cos30° = 34667146.74 m

纬线在地球上是等间隔分布的,纬线之间的间隔大致相等
纬度(南北方向)1米实际度:360°/40030173m = 8.993216192195822e-6 = 0.00000899°
40030173m/360° = 111,194.925m
1纬度约等于111千米
1*10-7纬度约等于1.11厘米即0.0111米

在30度纬度,1经度约等于 34667146.74 m/360° = 96297.63m
1*10-7经度约等于0.96厘米即0.0096米

在flightplot里查看飞控日志时,
经纬度海拔可以看以下参数
sensor_gps_0.lat (纬度)
sensor_gps_0.lon(经度)
sensor_gps_0.alt(海拔)
视觉位姿是看以下参数
vehicle_visual_odometry_0.x
vehicle_visual_odometry_0.y
vehicle_visual_odometry_0.z
local_position是看以下参数
vehicle_local_position_0.x
vehicle_local_position_0.y
vehicle_local_position_0.z

这些参数可以点击这里进行添加显示
 

输入图片说明

飞控里的经纬度是小数点后7位,是double类型存储的,而flightplot显示的时候是把小数点去掉显示的,它实际所显示的值的单位是1*10-7经度或纬度。而我们要进行对比的xy是以米未单位的,所以要和xy对比需要进行一定的平移和缩放
比如这是某个日志的经度数据在flightplot的显示,东经112.0980000度附近,实际显示的值是1120980000不带小数点的

 

输入图片说明


如果直接在flightplot里同时显示经度sensor_gps_0.lon和视觉位置vehicle_visual_odometry_0.x,就会显示成下图这样,无法将两者数据进行对比分析
 

输入图片说明


1*10-7纬度约等于1.11厘米即0.0111米,这是我们在flightplot里把纬度数据转为和视觉位姿数据对比的关键,flightplot里显示视觉位姿或者localposition位姿的单位是米。
那么我们在flightplot里把纬度数据转为单位为米的数据,需要乘以0.0111,然后再做平移,平移到0附近。
对于30度纬度的经度,1*10-7经度约等于0.96厘米即0.0096米,在flightplot里把经度数据转为单位为米的数据,需要乘以0.0096,然后再做平移,平移到0附近。

flightplot里是可以对某个参数值进行相应的缩放和平移的,如下图所示,在每个参数的属性这里,有一个Offset和Scale,分别对应着平移和缩放
由于实际测试,在flightplot里,Scale最小就只能写成0.01,所以对于flightplot里,纬度的Sacle理论值应该是0.0111,30度纬度的经度的Scale理论值应该是0.0096,实际如果这么写都会失效,会让实际的Scale变回默认值1,所以纬度和30度纬度的经度的Scale就四舍五入都写为0.01了。

输入图片说明

这里以一个实际飞行例子作分析,飞行地点经纬度在112.0980039附近,纬度在30.3176462附近。
 

输入图片说明


同时机头朝正南方向起飞,SLAM位姿的世界系是以机头方向为x轴正方向,左边是y轴正方向(人前方和机头方向一致时候的左),上是z轴正方向,初始偏航为0,也就是ENU坐标系下的位姿(这里的东北天非真实的东和北),SLAM位姿通过mavros发给px4飞控时,会自动转为飞控里的NED也就是北东地坐标系(注意这里的北东也不是真实世界中的北东),日志中存储的vehicle_visual_odometry_0.x,vehicle_visual_odometry_0.y,vehicle_visual_odometry_0.z参数和vehicle_local_position_0.x,vehicle_local_position_0.y,vehicle_local_position_0.z参数都是北东地坐标系下的坐标,这是需要注意的,也就是此时纬度和SLAM估计出的位姿中的x也即是北东地系中的y即vehicle_visual_odometry_0.y的负值相对应,经度的变化和SLAM位姿中的y也即是北东地系中的x即vehicle_visual_odometry_0.x的变化相对应,我们在flightplot里选择视觉位姿和GPS经纬度对比时,需要注意这个细节。

对于纬度sensor_gps_0.lat,我们先乘以0.01,使得其变为单位为米的量,再-3031764.0,平移到0附近(具体平移值可以自己根据实际情况微调),同时vehicle_visual_odometry_0.y乘以-1,做个翻转,然后两者的对比图就有了
 

输入图片说明

输入图片说明


我们还可以放大对比一下两个的位置变化细节
 

输入图片说明

对于经度sensor_gps_0.lon,我们先乘以0.01,使得其变为单位为米的量,再-11209800.0,平移到0附近(具体平移值可以自己根据实际情况微调),然后就可以和vehicle_visual_odometry_0.x做对比进行分析了

输入图片说明

猜你喜欢

转载自blog.csdn.net/sinat_16643223/article/details/143464406