GPS 定位信息获取(北斗星通 GPS)

GPS 定位信息获取(1)

首先回顾北斗星通 GPS 数据获取(1)~(5)

  • gps_pub.cpp 将接收到的串口数据转化为GPS的经纬度信息
  • gps_path.cpp 将经纬度信息转化为全局坐标系下的XY值,以第一个GPS经纬度为原点

目前已确定可以接收差分数据,但是 GPGGA 指令只能获取经纬度信息,无法获取航向信息

GPRMC 指令

查阅指令手册发现 GPRMC 指令可以位置、速度、航向等期望的信息

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

Heading 模式指令

要获取航向角信息需要满足一定的条件,即需要开启 Heading 模式

在这里插入图片描述

💡 本指令用于设置支持单板卡(模块)双天线定向的接收机(UB482、UM482、UM442)

车载接收机的型号是 NC502 系列,内置板卡 UB482,支持 Heading 模式

在这里插入图片描述

接收机及蘑菇头安装

按照《NPOS220S接收机操作使用说明书》中的说明,接收机和双天线的安装需要满足如下要求

在这里插入图片描述
在这里插入图片描述
但是由于接收机型号不同,本接收机机身并未标有 X/Y/Z 轴指向,可能需要根据实际的数据判断


GPS 定位信息获取(2)

下午把车开出去跑了一下,没有开下坡,直接从台阶那边搬下去,没有开很远,所幸没坏

用 cutecom 获取数据,原始数据如下

[16:52:13:433] $command,gprmc 1,response: OK*24␍␊
[16:52:14:643] $GPRMC,085115.00,A,3150.93331124,N,11717.59467080,E,0.014,5.3,101123,5.6,W,D*21␍␊
[16:52:15:643] $GPRMC,085116.00,A,3150.93332581,N,11717.59468186,E,0.041,59.4,101123,5.6,W,D*1C␍␊
[16:52:16:641] $GPRMC,085117.00,A,3150.93333013,N,11717.59468264,E,0.066,81.7,101123,5.6,W,D*1E␍␊
[16:52:17:642] $GPRMC,085118.00,A,3150.93333688,N,11717.59468779,E,0.071,77.2,101123,5.6,W,D*16␍␊
[16:52:18:645] $GPRMC,085119.00,A,3150.93333483,N,11717.59468236,E,0.038,89.2,101123,5.6,W,D*1C␍␊
[16:52:19:646] $GPRMC,085120.00,A,3150.93334090,N,11717.59465670,E,0.061,337.7,101123,5.6,W,D*23␍␊
[16:52:20:646] $GPRMC,085121.00,A,3150.93331782,N,11717.59463967,E,0.082,331.4,101123,5.6,W,D*24␍␊
[16:52:21:646] $GPRMC,085122.00,A,3150.93330466,N,11717.59461499,E,0.089,238.0,101123,5.6,W,D*26␍␊

为了更接近串口通信获取到的数据,进行一些简单的处理

sed 's/^\[.*\] //' input.txt > output.txt
sed 's/..$//' input.txt > output.txt
  • s/^\[.*\] //:替换每一行开头的**[16:52:14:643]为空白。这里使用正则表达式 ^\[.*\] 匹配每一行开头的[16:52:14:643]**,然后用空白替换
  • 使用正则表达式 ..$ 匹配每一行末尾的最后两个字符,然后将其替换为空白

处理后如下

$command,gprmc 1,response: OK*24
$GPRMC,085115.00,A,3150.93331124,N,11717.59467080,E,0.014,5.3,101123,5.6,W,D*21
$GPRMC,085116.00,A,3150.93332581,N,11717.59468186,E,0.041,59.4,101123,5.6,W,D*1C
$GPRMC,085117.00,A,3150.93333013,N,11717.59468264,E,0.066,81.7,101123,5.6,W,D*1E
$GPRMC,085118.00,A,3150.93333688,N,11717.59468779,E,0.071,77.2,101123,5.6,W,D*16
$GPRMC,085119.00,A,3150.93333483,N,11717.59468236,E,0.038,89.2,101123,5.6,W,D*1C
$GPRMC,085120.00,A,3150.93334090,N,11717.59465670,E,0.061,337.7,101123,5.6,W,D*23
$GPRMC,085121.00,A,3150.93331782,N,11717.59463967,E,0.082,331.4,101123,5.6,W,D*24

注意进行 3 组实验

  1. 原地顺时针转向 — clockwise.txt
  2. 原地逆时针转向 — anticlockwise.txt
  3. 任意轨迹运动 — path.txt

GPRMC 指令的纬度、经度、航向角信息分别对应 4、6、9 字段

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

参考陆辉东编写的 gps_sensor 功能包编写解析代码如下

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <boost/algorithm/string.hpp>
#include <vector>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <math.h>
using namespace std;static double EARTH_RADIUS = 6371.393;//6378.137;//地球半径struct my_pose
{double latitude;double longitude;
};// 角度制转弧度制
double rad(double d)
{return d * 3.1415926 / 180.0;
}int main(int argc, char **argv)
{const string filePath = "/home/redwall/catkin_ws/src/gps_sensor/log/2023-11-10/clockwise.txt";ifstream log_file(filePath);if (!log_file.is_open()){cerr << "Failed to open the file!" << endl;return -1;}bool is_init_pose = false;my_pose init_pose;string one_line;vector<string> raw_strs;while (getline(log_file, one_line)){// split one line data by ","boost::split(raw_strs, one_line, boost::is_any_of(","));cout << "raw data:" << raw_strs[3] << "\t" << raw_strs[5] << "\t" << raw_strs[8] << endl;double latitude, longitude, heading_angle;vector<string> data_strs;boost::split(data_strs, raw_strs[3], boost::is_any_of("."));latitude = atoi(data_strs[0].c_str()) / 100 + (atoi(data_strs[0].c_str()) % 100 + atoi(data_strs[1].c_str()) / 100000000.0) / 60.0;boost::split(data_strs, raw_strs[5], boost::is_any_of("."));longitude = atoi(data_strs[0].c_str()) / 100 + (atoi(data_strs[0].c_str()) % 100 + atoi(data_strs[1].c_str()) / 100000000.0) / 60.0;heading_angle = stod(raw_strs[8]);cout << "latitude: " << latitude << "\tlongitude: " << longitude << "\theading_angle: " << heading_angle << endl;if (!is_init_pose){init_pose.latitude = latitude;init_pose.longitude = longitude;is_init_pose = true;}else{// 计算相对位置double radLat1, radLat2, radLong1, radLong2, delta_lat, delta_long;radLat1 = rad(init_pose.latitude);radLong1 = rad(init_pose.longitude);radLat2 = rad(latitude);radLong2 = rad(longitude);// 计算xdelta_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;// 计算ydelta_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;cout << "x: " << x << "\ty: " << y << endl;cout << "---------" << endl;}}return 0;
}

输出如下,与原始数据中的对应字段相符

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
---------
raw data:3150.93331782	11717.59463967	331.4
latitude: 31.8489	longitude: 117.293	heading_angle: 331.4
x: 0.0121951	y: 0.0490088
---------
raw data:3150.93330466	11717.59461499	238.0
latitude: 31.8489	longitude: 117.293	heading_angle: 238
x: 0.0121951	y: 0.0878631
---------
raw data:3150.93333556	11717.59459573	269.0
latitude: 31.8489	longitude: 117.293	heading_angle: 269
x: 0.0450738	y: 0.118185
---------
raw data:3150.93335679	11717.59456484	265.9
latitude: 31.8489	longitude: 117.293	heading_angle: 265.9
x: 0.0844207	y: 0.166816
---------
raw data:3150.93336170	11717.59454041	282.2
latitude: 31.8489	longitude: 117.293	heading_angle: 282.2
x: 0.0935207	y: 0.205276
---------
raw data:3150.93338996	11717.59451834	294.5
latitude: 31.8489	longitude: 117.293	heading_angle: 294.5
x: 0.145897	y: 0.240022
---------
raw data:3150.93342933	11717.59450323	334.3
latitude: 31.8489	longitude: 117.293	heading_angle: 334.3
x: 0.218864	y: 0.26381
---------
raw data:3150.93345386	11717.59449815	338.9
latitude: 31.8489	longitude: 117.293	heading_angle: 338.9
x: 0.264327	y: 0.271807
---------
raw data:3150.93348823	11717.59450537	10.2
latitude: 31.8489	longitude: 117.293	heading_angle: 10.2
x: 0.328027	y: 0.260441
---------
raw data:3150.93353467	11717.59451156	6.5
latitude: 31.8489	longitude: 117.293	heading_angle: 6.5
x: 0.414097	y: 0.250696
---------
raw data:3150.93358054	11717.59453627	24.7
latitude: 31.8489	longitude: 117.293	heading_angle: 24.7
x: 0.499111	y: 0.211794
---------
raw data:3150.93360846	11717.59458635	56.9
latitude: 31.8489	longitude: 117.293	heading_angle: 56.9
x: 0.550857	y: 0.132952
---------
raw data:3150.93366693	11717.59460345	14.0
latitude: 31.8489	longitude: 117.293	heading_angle: 14
x: 0.659223	y: 0.106031
---------
raw data:3150.93370425	11717.59465149	47.7
latitude: 31.8489	longitude: 117.293	heading_angle: 47.7
x: 0.72839	y: 0.0304002
---------
raw data:3150.93372192	11717.59471207	63.2
latitude: 31.8489	longitude: 117.293	heading_angle: 63.2
x: 0.761139	y: 0.0649724
---------
raw data:3150.93370758	11717.59477295	87.8
latitude: 31.8489	longitude: 117.293	heading_angle: 87.8
x: 0.734562	y: 0.160817
---------
raw data:3150.93369450	11717.59483801	93.8
latitude: 31.8489	longitude: 117.293	heading_angle: 93.8
x: 0.71032	y: 0.263243
---------
raw data:3150.93367488	11717.59488022	116.6
latitude: 31.8489	longitude: 117.293	heading_angle: 116.6
x: 0.673957	y: 0.329695
---------
raw data:3150.93365466	11717.59492160	118.6
latitude: 31.8489	longitude: 117.293	heading_angle: 118.6
x: 0.636482	y: 0.394841
---------
raw data:3150.93361987	11717.59494557	122.0
latitude: 31.8489	longitude: 117.293	heading_angle: 122
x: 0.572003	y: 0.432577
---------
raw data:3150.93356921	11717.59496880	130.5
latitude: 31.8489	longitude: 117.293	heading_angle: 130.5
x: 0.478112	y: 0.469149
---------
raw data:3150.93353325	11717.59498063	148.4
latitude: 31.8489	longitude: 117.293	heading_angle: 148.4
x: 0.411465	y: 0.487773
---------
raw data:3150.93347774	11717.59498615	164.2
latitude: 31.8489	longitude: 117.293	heading_angle: 164.2
x: 0.308585	y: 0.496464
---------
raw data:3150.93341225	11717.59497409	183.9
latitude: 31.8489	longitude: 117.293	heading_angle: 183.9
x: 0.187208	y: 0.477477
---------
raw data:3150.93335876	11717.59495099	200.5
latitude: 31.8489	longitude: 117.293	heading_angle: 200.5
x: 0.0880718	y: 0.44111
---------
raw data:3150.93331556	11717.59490935	227.1
latitude: 31.8489	longitude: 117.293	heading_angle: 227.1
x: 0.00800653	y: 0.375555
---------
raw data:3150.93328314	11717.59486159	233.1
latitude: 31.8489	longitude: 117.293	heading_angle: 233.1
x: 0.0520795	y: 0.300366
---------
raw data:3150.93326676	11717.59479839	239.3
latitude: 31.8489	longitude: 117.293	heading_angle: 239.3
x: 0.0824376	y: 0.200868
---------
raw data:3150.93325654	11717.59472604	255.8
latitude: 31.8489	longitude: 117.293	heading_angle: 255.8
x: 0.101379	y: 0.0869658
---------
raw data:3150.93325328	11717.59474098	253.8
latitude: 31.8489	longitude: 117.293	heading_angle: 253.8
x: 0.107421	y: 0.110486
---------
raw data:3150.93324540	11717.59474752	255.1
latitude: 31.8489	longitude: 117.293	heading_angle: 255.1
x: 0.122025	y: 0.120782
---------
raw data:3150.93324398	11717.59474844	280.4
latitude: 31.8489	longitude: 117.293	heading_angle: 280.4
x: 0.124657	y: 0.122231
---------
raw data:3150.93324677	11717.59474572	270.3
latitude: 31.8489	longitude: 117.293	heading_angle: 270.3
x: 0.119486	y: 0.117948
---------

需要在 MATLAB 中进一步分析结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【初始前后端交互+原生Ajax+Fetch+axios+同源策略+解决跨域】

初始前后端交互原生AjaxFetchaxios同源策略解决跨域 1 初识前后端交互2 原生Ajax2.1 Ajax基础2.2 Ajax案例2.3 ajax请求方式 3 Fetch3.1 fetch基础3.2 fetch案例 4 axios4.1 axios基础4.2 axios使用4.2.1 axios拦截器4.2.2 axios中断器 5 同源策略6 解决跨域6.1 jsonp6.2 其他技…

搭配:基于OpenCV的边缘检测实战

引言 计算机中的目标检测与人类识别物体的方式相似。作为人类&#xff0c;我们可以分辨出狗的形象&#xff0c;因为狗的特征是独特的。尾巴、形状、鼻子、舌头等特征综合在一起&#xff0c;帮助我们把狗和牛区分开来。 同样&#xff0c;计算机能够通过检测与估计物体的结构和性…

Linux 常见命令篇

history 获取执行的指令记录 语法格式: history [参数] 常用参数&#xff1a; -a 写入命令记录 -c 清空命令记录 -d 删除指定序号的命令记录 -n 读取命令记录 -r 读取命令记录到缓冲区 -s 将指定的命令添加到缓冲区 -w 将缓冲区信息写入到历史文件 history#获取最近的三条…

C#关键字、特性基础及扩展合集(持续更新)

一、基础 Ⅰ 关键字 1、record record&#xff08;记录&#xff09;&#xff0c;编译器会在后台创建一个类。支持类似于结构的值定义&#xff0c;但被实现为一个类&#xff0c;方便创建不可变类型&#xff0c;成员在初始化后不能再被改变 &#xff08;C#9新增&#xff09; …

Hologres性能优化指南1:行存,列存,行列共存

在Hologres中支持行存、列存和行列共存三种存储格式&#xff0c;不同的存储格式适用于不同的场景。 在建表时通过设置orientation属性指定表的存储格式&#xff1a; BEGIN; CREATE TABLE <table_name> (...); call set_table_property(<table_name>, orientation,…

Centos上安装Docker和DockerCompose

安装Docker Docker可以运行在MAC&#xff0c;Windows&#xff0c;CtenOS,UBUNTU等操作系统上。目前主流的版本有Docker CE和Docker EE&#xff0c;CE是免费的开源Docker版本&#xff0c;适用于开发人员和小型团队&#xff0c;EE是适用于企业的容器化解决方案。它基于Docker CE…

2023-11-24 LeetCode每日一题(统计和小于目标的下标对数目)

2023-11-24每日一题 一、题目编号 2824. 统计和小于目标的下标对数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target &#xff0c;请你返回满足 0 < i < j < n 且 nums[i] nums[j] < targe…

开源的文本编辑器Notepad++ 8.6.0版本在Windows系统上的下载与安装配置

目录 前言一、Notepad 安装二、使用配置总结 前言 Notepad 是一款简单而强大的文本编辑工具&#xff0c;通常用于快速创建和编辑文本文件。以下是 Notepad 工具的详细介绍。注&#xff1a;文末附有下载链接&#xff01; 主要特点&#xff1a; ——简洁易用&#xff1a; Note…

蓝桥杯物联网竞赛_STM32L071_4_按键控制

原理图&#xff1a; 当按键S1按下PC14接GND&#xff0c;为低电平 CubMX配置: Keil配置&#xff1a; main函数&#xff1a; while (1){/* USER CODE END WHILE */OLED_ShowString(32, 0, "hello", 16);if(Function_KEY_S1Check() 1){ OLED_ShowString(16, 2, &quo…

FANUC机器人到达某个点位时,为什么不显示@符号?

FANUC机器人到达某个点位时,为什么不显示@符号? 该功能由变量$MNDSP_POSCF = 0(不显示)/1(显示)/2(光标移动该行显示) 控制,该变量设置为不同的值,则启用对应的功能。 如下图所示,为该变量设置不同的值时的对比, 其他常用的系统变量可参考以下内容: 在R寄存器指定速度…

什么是AWS CodeWhisperer?

AWS CodeWhisperer https://aws.amazon.com/cn/codewhisperer/ CodeWhisperer 经过数十亿行代码的训练&#xff0c;可以根据您的评论和现有代码实时生成从代码片段到全函数的代码建议。 ✔ 为您量身定制的实时 AI 代码生成器 ✔ 支持热门编程语言和 IDE ✔ 针对 AWS 服务的优…

java设计模式学习之【工厂模式】

文章目录 引言工厂方法模式简介定义与用途&#xff1a;实现方式&#xff1a; 使用场景优势与劣势工厂模式在spring中的应用电费计算示例&#xff08;简单工厂模式&#xff09;改善为方法工厂模式代码地址 引言 在软件开发的世界中&#xff0c;对象的创建可能是一个复杂且重复的…

网安融合新进展:Check Point+七云网络联合研发,加固大型企业边缘、分支侧安全

AI 爆火、万物互联&#xff0c;底层需要更灵活的网络设施提供支撑。据国际分析机构 Gartner 预测&#xff0c;到 2024 年&#xff0c;SD-WAN&#xff08;软件定义的广域网&#xff09;使用率将达到 60%。不过边缘和终端兴起&#xff0c;未经过数据中心的流量也在成为新的安全风…

Spring Boot Actuator 2.2.5 基本使用

1. pom文件 &#xff0c;添加 Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2.application.properties 文件中添加以下配置 …

LLMLingua:集成LlamaIndex,对提示进行压缩,提供大语言模型的高效推理

大型语言模型(llm)的出现刺激了多个领域的创新。但是在思维链(CoT)提示和情境学习(ICL)等策略的驱动下&#xff0c;提示的复杂性不断增加&#xff0c;这给计算带来了挑战。这些冗长的提示需要大量的资源来进行推理&#xff0c;因此需要高效的解决方案&#xff0c;本文将介绍LLM…

MATLAB实战 | MEX文件

应用接口是MATLAB与其他语言相互调用各自函数的方法&#xff0c;MEX文件使MATLAB程序中可以调用或链接其他语言编写的函数&#xff0c;而MATLAB引擎使其他语言程序中可以调用MATLAB函数。 01、MEX文件 MEX是MATLAB Executable的缩写&#xff0c;是MATLAB中用于调用其他语言编写…

Leetcode103 二叉树的锯齿形层序遍历

二叉树的锯齿形层序遍历 题解1 层序遍历双向队列 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 提示&#xff1a…

【计算机网络】(网络层)定长掩码和变长掩码

目录 1、IPV4地址的应用规划 2、例题分析 2.1、定长的子网掩码 2.2、变长的子网掩码 1、IPV4地址的应用规划 定长的子网掩码&#xff08;FLSM&#xff09;&#xff1a; 使用同一个子网掩码划分子网&#xff0c;每个子网所分配的IP地址数量相同&#xff0c;造成IP地址的浪费…

腾讯云发布新一代基于AMD处理器的星星海云服务器实例SA5

基础设施的硬实力&#xff0c;愈发成为云厂商的核心竞争力。 11月24日&#xff0c;腾讯云发布了全新一代星星海服务器。基于自研服务器的高密设计与硬件升级&#xff0c;对应云服务器SA5是全球首家搭载第四代AMD EPYC处理器&#xff08;Bergamo&#xff09;的公有云实例&#…

京东数据分析:2023年10月京东彩妆销售大数据采集

鲸参谋监测的京东平台10月份彩妆市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台上彩妆市场的销量将近430万&#xff0c;环比增长约21%&#xff0c;同比下滑约3%&#xff1b;销售额将近5.8亿&#xff0c;环比增长约7%&#xff0c;同…