GPS 定位信息分析:航向角分析及经纬度坐标转局部XY坐标

您所在的位置:网站首页 经纬度的叫法 GPS 定位信息分析:航向角分析及经纬度坐标转局部XY坐标

GPS 定位信息分析:航向角分析及经纬度坐标转局部XY坐标

2024-02-05 08:53| 来源: 网络整理| 查看: 265

GPS 定位信息分析(1)

从下面的数据可知,raw data 的提取和经纬度的计算应该是没问题的

在相同的经纬度下, x 和 y 还会发生变化,显然是不正确的

raw data:3150.93331124 11717.59467080 5.3 latitude: 31.8489 longitude: 117.293 heading_angle: 5.3 raw data:3150.93332581 11717.59468186 59.4 latitude: 31.8489 longitude: 117.293 heading_angle: 59.4 x: 0.0270035 y: 0.017412 --------- raw data:3150.93333013 11717.59468264 81.7 latitude: 31.8489 longitude: 117.293 heading_angle: 81.7 x: 0.03501 y: 0.01864 --------- raw data:3150.93333688 11717.59468779 77.2 latitude: 31.8489 longitude: 117.293 heading_angle: 77.2 x: 0.0475202 y: 0.0267478 --------- raw data:3150.93333483 11717.59468236 89.2 latitude: 31.8489 longitude: 117.293 heading_angle: 89.2 x: 0.0437208 y: 0.0181992 --------- raw data:3150.93334090 11717.59465670 337.7 latitude: 31.8489 longitude: 117.293 heading_angle: 337.7 x: 0.0549707 y: 0.022198 ---------

调整输出后在 MATLAB 中处理显示

clockwise_pro.txtanticlockwise_pro.txtpath_pro.txt

clockwise_pro 和 anticlockwise_pro 有助于分析航向角信息,path 参考意义不大

航向角信息分析

clockwise_pro 航向角信息

在这里插入图片描述

anticlockwise_pro 航向角信息

在这里插入图片描述

GPS 获取的是真北航迹方向,deg

Heading定向是指双天线接收机的主天线(ANT1)与从天线(ANT2)之间构成一个基线向量,确定此基线向量逆时针方向与真北的夹角

首先要明确基线向量与正北方向夹角的大小以及正负关系,分析如下,红色表示正北方向,蓝色表示基线向量,绿色表示航向角(真北航迹方向)

在这里插入图片描述 在这里插入图片描述

正北方向表示 0 度或 360 度位置,非负值,沿正北方向顺时针旋转是角度增加的方向

此时分析 clockwise_pro 和 anticlockwise_pro 的航向角变化结果就比较容易,示意图如下

在这里插入图片描述

以顺时针为例,起始位姿航向角 50 度,顺时针旋转至于正北方向重合,角度一直增大至 360 度

重合后继续顺时针旋转,此时会先从 360 度突变至 0 度,再继续增加

问题分析

1、由于手动安装主从天线,基线向量本身存在夹角,导致航向角始终存在偏差

下图能够说明该问题

在这里插入图片描述

2、GPS 获得的航向角信息是在大地或者正北天坐标系下的,该信息并不可以使用,需要转换到局部坐标系下,涉及到坐标转换的问题

3、基线向量和主从天线有关,接收机 com1 口对应主天线,但仅靠线缆无法区分,本次也没有贴标签注明哪一根接前天线,哪一根接后天线,下次接线若与本次不同可能会有影响

轨迹信息分析

clockwise_pro 轨迹信息

在这里插入图片描述

anticlockwise_pro 轨迹信息

在这里插入图片描述

对于原地旋转而言经纬度信息保持不变,此时在 X 方向和 Y 方向还有如此大的位移,是有问题的

GPS 定位信息分析(2)

对于局部 XY 坐标信息的异常,从公式和编程两方面考虑

XY 坐标计算

公式部分应该没什么问题,主要由“根据经纬度计算两地之间的距离”推得

在这里插入图片描述

查找资料的过程中还发现“大地坐标系与空间直角坐标系的转换”,可以作为储备知识

在这里插入图片描述 在这里插入图片描述

以起始的 GPS 坐标为全局坐标系原点(init_pose),以当前纬度为 X轴,当前经度为 Y 轴

计算目标点 X 坐标时,假设纬度相同,根据经度差计算 X 坐标值

计算目标点 Y 坐标时,假设经度相同,根据纬度差计算 Y 坐标值

在这里插入图片描述

陆师兄 gps_path.cpp 中的代码如下,感觉存在一些问题

//初始化 if(!init) { init_pose.latitude = gps_msg_ptr->latitude; init_pose.longitude = gps_msg_ptr->longitude; init_pose.altitude = gps_msg_ptr->altitude; init = true; } else { //计算相对位置 double radLat1 ,radLat2, radLong1,radLong2,delta_lat,delta_long; radLat1 = rad(init_pose.latitude); radLong1 = rad(init_pose.longitude); radLat2 = rad(gps_msg_ptr->latitude); radLong2 = rad(gps_msg_ptr->longitude); //计算x delta_lat = radLat2 - radLat1; delta_long = 0; double x = 2*asin( sqrt( pow( sin( delta_lat/2 ),2) + cos( radLat1 )*cos( radLat2)*pow( sin( delta_long/2 ),2 ) )); x = x*EARTH_RADIUS*1000; //计算y delta_lat = 0; delta_long = radLong1 - radLong2; double y = 2*asin( sqrt( pow( sin( delta_lat/2 ),2) + cos( radLat2 )*cos( radLat2)*pow( sin( delta_long/2 ),2 ) ) ); y = y*EARTH_RADIUS*1000; //计算z double z = gps_msg_ptr->altitude - init_pose.altitude; //发布轨迹 ros_path_.header.frame_id = "path"; ros_path_.header.stamp = ros::Time::now(); geometry_msgs::PoseStamped pose; pose.header = ros_path_.header; pose.pose.position.x = x; pose.pose.position.y = y; pose.pose.position.z = z; ros_path_.poses.push_back(pose); //ROS_INFO("( x:%0.6f ,y:%0.6f ,z:%0.6f)",x ,y ,z ); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3