我是靠谱客的博主 矮小世界,最近开发中收集的这篇文章主要介绍使用Matlab提取接收到的log文件中的GNSS坐标信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近有使用千寻位置的产品来通过GNSS获取实际环境中的坐标位置信息,记录在使用过程中遇到的问题和解决方案。

使用千寻魔方MC120M获取定位数据后,文件里保存的是MNEA 协议格式的定位数据

NMEA(National Marine Electronics Association)是美国国家海洋电子协会为海用电子设备制定的标准格式。NMEA-0183协议定义的语句非常多,常用的或者说兼容性广的语句有$GPGGA、$GPGSA、$GPGSA、$GPGSV、$GPRMC、$GPRMC、GPVTG、$GPGLL等。

下图就是获取得到的MNEA 协议格式的定位数据文件。

其中GPGGA是GPS数据输出格式语句,意思是一帧GPS定位的主要数据,是NMEA格式中使用最广的数据之一,具体格式有很多博文都进行了详细叙述。

我最终是在GPGGA语句中得到经纬高信息,因此就先将包含$GPGGA语句中数据筛选提取出来,这里使用matlab软件。

1、导入matlab中

Ga = importdata('nmea_output_20210618-160410.log');      % 导入log文件,导入后为cell类型文件

2、处理文中数据

将导入文件中的每行数据以string的类型提取出来,利用matlab中string相关函数判断是否是GPGGA语句,由于GPGGA数据有固定的格式,所以就可以很方便地从提取出来的GPGGA语句的数据中再提取出所需要的经纬度和高程信息

Gp_count=1;         %记录有多少条 GPGGA数据                                               
for i=1:size(Ga,1)   
    str=string(Ga{i,1});     %将导入的cell类型数据一行一行地提取出来 提取为string类型
    IsGPGGA=contains(str,"GPGGA");      %判断提取的string数据中是否包含有GPGGA 包含返回1 不包含返回0
    if IsGPGGA
        GP(:,Gp_count)=split(str,",");      %将筛选得到的GPGGA数据以,为分割,打断拆分字符串
        Gp_count=Gp_count+1;                %GPGGA数据条数+1
    end
end

pos(1,:)=(str2double(GP(5,:)))/100;         %经度     提取筛选的GP中的第5行
pos(2,:)=(str2double(GP(3,:)))/100;         %纬度     提取筛选的GP中的第三行
pos(3,:)=str2double(GP(10,:));              %高度  m

for i=1:size(pos,2)
    pos(1,i)=floor(pos(1,i))+(pos(1,i)-floor(pos(1,i)))/60*100;     %将其格式转为度
    pos(2,i)=floor(pos(2,i))+(pos(2,i)-floor(pos(2,i)))/60*100;     %将其格式转为度
end

提取出GPGGA语句后,按“,”将数据分割打断,最后第三行就是纬度,第五行为经度,如左下图所示。其中经纬度的格式和期望的不一致,如应为106°25010286'而实际上是10625.010286,因此多了一步将该数据转为正常的以°为单位的数据,所以上图中程序的后半段正是完成此工作。最后提取出来的经纬度如右下图所示。

          

3、绘制结果图

figure(1);      %2d x-y平面路径图
plot(pos(1,:),pos(2,:),'k','LineWidth',2);

figure(2);      %3d x-y-z三维路径图
plot3(pos(1,:),pos(2,:),pos(3,:),'k','LineWidth',2);

经过上述处理后得到的是 WGS-84 坐标系下的经度、纬度和高程信息,我期望能得到当地水平坐标系下的坐标信息,因此将其转化为东北天坐标系。

转换的公式可以参考此博客:https://www.cnblogs.com/long5683/p/13831605.html

实现的代码就是将这几个公式翻译一下就行,带入具体数据进行计算,我就不放上来了!

最后

以上就是矮小世界为你收集整理的使用Matlab提取接收到的log文件中的GNSS坐标信息的全部内容,希望文章能够帮你解决使用Matlab提取接收到的log文件中的GNSS坐标信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部