华测导航GPCHC协议ROS驱动包,CGI610、410接收机,NavSatStatus、GPSFix和普通格式

news2024/11/17 11:32:16

目录

  • 一、消息类型
    • 1.1 sensor_msgs/NavSatFix
    • 1.2 sensor_msgs/NavSatStatus
    • 1.3 gps_common::GPSFix
    • 1.4 sensor_msgs::Imu
  • 二、部分源码
    • 2.1 相关的依赖和库
    • 2.2 文件结构
    • 2.3 字段分割函数
    • 2.4 定义消息话题


Ubuntu 20.04 + noetic
华测CGI 610——RS232-C——GPCHC


一、消息类型

1.1 sensor_msgs/NavSatFix

官方介绍:sensor_msgs/NavSatFix Message

# Navigation Satellite fix for any Global Navigation Satellite System
#
# Specified using the WGS 84 reference ellipsoid
# 用于WGS84椭球坐标系

# header.stamp specifies the ROS time for this measurement (the
#        corresponding satellite time may be reported using the
#        sensor_msgs/TimeReference message).
# header.stamp 使用ROS时间,卫星时间用sensor_msgs/TimeReference

# header.frame_id is the frame of reference reported by the satellite
#        receiver, usually the location of the antenna.  This is a
#        Euclidean frame relative to the vehicle, not a reference
#        ellipsoid.
# header.frame_id 是卫星接收器报告的坐标系,通常是GPS天线的位置。
# 这是相对于车辆(中心)的欧几里得坐标变换,而不是参考椭球坐标系。
Header header

# satellite fix status information
# 卫星定位状态信息
NavSatStatus status

# Latitude [degrees]. Positive is north of equator; negative is south.
# 纬度,单位是 度
float64 latitude

# Longitude [degrees]. Positive is east of prime meridian; negative is west.
# 经度,单位是 度
float64 longitude

# Altitude [m]. Positive is above the WGS 84 ellipsoid
# WSG 84椭球体下的高度,单位m
# (quiet NaN if no altitude is available).
float64 altitude

# Position covariance [m^2] defined relative to a tangential plane
# through the reported position. The components are East, North, and
# Up (ENU), in row-major order.
#位置协方差[m ^ 2]: 相对于切线平面的位置协方差。 组件是East,North和Up(ENU),按行优先顺序排列。
# Beware: this coordinate system exhibits singularities at the poles.
#注意:此坐标系在极点处表现出奇异性。

float64[9] position_covariance

# If the covariance of the fix is known, fill it in completely. If the
# GPS receiver provides the variance of each measurement, put them
# along the diagonal. If only Dilution of Precision is available,
# estimate an approximate covariance from that.
# 3 - 如果已知修正的协方差,请完全填写。
# 2 - 如果GPS接收器提供了每次测量的方差,请将其沿对角线放置。
# 1 - 如果只有DOP精度衰减因子可用,请据此估计近似协方差。
# 0 - 协方差未知

uint8 COVARIANCE_TYPE_UNKNOWN = 0
uint8 COVARIANCE_TYPE_APPROXIMATED = 1
uint8 COVARIANCE_TYPE_DIAGONAL_KNOWN = 2
uint8 COVARIANCE_TYPE_KNOWN = 3

uint8 position_covariance_type

1.2 sensor_msgs/NavSatStatus

是sensor_msgs/NavSatFix的子信息。
官方介绍:sensor_msgs/NavSatStatus Message
星基增强和地基增强的介绍: link

# Navigation Satellite fix status for any Global Navigation Satellite System
# 任何GNSS的导航卫星求解固定状态

# Whether to output an augmented fix is determined by both the fix
# type and the last time differential corrections were received.  A
# fix is valid when status >= STATUS_FIX.
#是否输出增强解取决于求解固定状态和上一次收到差分校正的时间

int8 STATUS_NO_FIX =  -1        # unable to fix position 不固定
int8 STATUS_FIX =      0        # unaugmented fix		未增强
int8 STATUS_SBAS_FIX = 1        # with satellite-based augmentation  星基增强
int8 STATUS_GBAS_FIX = 2        # with ground-based augmentation   地基增强

int8 status

# Bits defining which Global Navigation Satellite System signals were
# used by the receiver.
# 定义接收机使用的GNSS卫星信号

uint16 SERVICE_GPS =     1
uint16 SERVICE_GLONASS = 2
uint16 SERVICE_COMPASS = 4      # includes BeiDou.
uint16 SERVICE_GALILEO = 8

uint16 service

1.3 gps_common::GPSFix

官方介绍: gps_common::GPSFix

# A more complete GPS fix to supplement sensor_msgs/NavSatFix.
# 更加完整的GPS状态,以补充 sensor_msgs/NavSatFix.
Header header

GPSStatus status

# Latitude (degrees). Positive is north of equator; negative is south.
float64 latitude

# Longitude (degrees). Positive is east of prime meridian, negative west.
float64 longitude

# Altitude (meters). Positive is above reference (e.g., sea level).
float64 altitude

# Direction (degrees from north)
# 单位是 度,从北旋转的方向
float64 track

# Ground speed (meters/second)
# 地面速度 m/s
float64 speed

# Vertical speed (meters/second)
# 垂直速度 m/s
float64 climb

# Device orientation (units in degrees)
float64 pitch
float64 roll
float64 dip

# GPS time
float64 time

## Dilution of precision; Xdop<=0 means the value is unknown

# Total (positional-temporal) dilution of precision
float64 gdop

# Positional (3D) dilution of precision
float64 pdop

# Horizontal dilution of precision
float64 hdop

# Vertical dilution of precision
float64 vdop

# Temporal dilution of precision
float64 tdop

## Uncertainty of measurement, 95% confidence

# Spherical position uncertainty (meters) [epe]
float64 err

# Horizontal position uncertainty (meters) [eph]
float64 err_horz

# Vertical position uncertainty (meters) [epv]
float64 err_vert

# Track uncertainty (degrees) [epd]
float64 err_track

# Ground speed uncertainty (meters/second) [eps]
float64 err_speed

# Vertical speed uncertainty (meters/second) [epc]
float64 err_climb

# Temporal uncertainty [ept]
float64 err_time

# Orientation uncertainty (degrees)
float64 err_pitch
float64 err_roll
float64 err_dip

# Position covariance [m^2] defined relative to a tangential plane
# through the reported position. The components are East, North, and
# Up (ENU), in row-major order.

float64[9] position_covariance

uint8 COVARIANCE_TYPE_UNKNOWN = 0
uint8 COVARIANCE_TYPE_APPROXIMATED = 1
uint8 COVARIANCE_TYPE_DIAGONAL_KNOWN = 2
uint8 COVARIANCE_TYPE_KNOWN = 3

uint8 position_covariance_type

1.4 sensor_msgs::Imu

官方介绍: sensor_msgs::Imu

std_msgs/Header header
geometry_msgs/Quaternion orientation
float64[9] orientation_covariance
geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance
geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance

二、部分源码

2.1 相关的依赖和库

Eigen——计算四元数
Protobuf——结构数据序列化
autoware——信息格式

2.2 文件结构

ROS工作空间的include包括两个头文件,src下有两个cpp文件,由launch文件启动。
在这里插入图片描述

2.3 字段分割函数

把GPCHC数据流分割成一个一个的字段,然后进行相应的定义

void supersplit(const std::string& s, std::vector<std::string>& v, const std::string& c)
{
    std::string::size_type pos1, pos2;
    size_t len = s.length();
    pos2 = s.find(c);
    pos1 = 0;
    while(std::string::npos != pos2)
    {
        if("" == s.substr(pos1, pos2-pos1)){
            v.emplace_back("0");
        }
        else{
            v.emplace_back(s.substr(pos1, pos2-pos1));
        }
        pos1 = pos2 + c.size();
        pos2 = s.find(c, pos1);
    }
    if(pos1 != len)
        v.emplace_back(s.substr(pos1));
}
typedef enum GNSS_GPCHC_INDEX{

    GNSS_GPCHC_INDEX_HEADER = 0,
    GNSS_GPCHC_INDEX_GPSWEEK,
    GNSS_GPCHC_INDEX_GPSTime,
    GNSS_GPCHC_INDEX_HEADING,
    GNSS_GPCHC_INDEX_PICH,
    GNSS_GPCHC_INDEX_ROLL,
    GNSS_GPCHC_INDEX_GRRO_X,
    GNSS_GPCHC_INDEX_GRRO_Y,
    GNSS_GPCHC_INDEX_GRRO_Z,
    GNSS_GPCHC_INDEX_ACC_X,
    GNSS_GPCHC_INDEX_ACC_Y,
    GNSS_GPCHC_INDEX_ACC_Z,
    GNSS_GPCHC_INDEX_LAT,
    GNSS_GPCHC_INDEX_LON,
    GNSS_GPCHC_INDEX_ALT,
    GNSS_GPCHC_INDEX_VE,
    GNSS_GPCHC_INDEX_VN,
    GNSS_GPCHC_INDEX_VU,
    GNSS_GPCHC_INDEX_SPEED,
    GNSS_GPCHC_INDEX_NSV1,
    GNSS_GPCHC_INDEX_NSV2,
    GNSS_GPCHC_INDEX_STATUS,
    GNSS_GPCHC_INDEX_AGE,
    GNSS_GPCHC_INDEX_WARMING,
    GNSS_GPCHC_INDEX_MAX
}GNSS_GPCHC_INDEX;

2.4 定义消息话题

定义五种格式:

  1. sensor_msgs::NavSatFix message_NavSatFix;
  2. gps_common::GPSFix message_gpsfix;
  3. sensor_msgs::Imu message_imu;
  4. geometry_msgs::PoseStamped angle_qua; //欧拉角和四元数
  5. geometry_msgs::PoseStamped lla_qua; //经纬高和四元数

发布ROS话题

	imu_raw_pub = nh_.advertise<sensor_msgs::Imu>("/imu_raw", 500);
    nav_sat_fix_pub = nh_.advertise<sensor_msgs::NavSatFix>("/nav_sat_fix", 500);
    gps_fix_pub = nh_.advertise<gps_common::GPSFix>("/gps_fix", 500);
    angle_qua_pub = nh_.advertise<geometry_msgs::PoseStamped>("/angle_qua", 500);
    lla_qua_pub = nh_.advertise<geometry_msgs::PoseStamped>("/lla_qua", 500);

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

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

相关文章

从零编写linux0.11 - 第十一章 可执行文件

从零编写linux0.11 - 第十一章 可执行文件 编程环境&#xff1a;Ubuntu 20.04、gcc-9.4.0 代码仓库&#xff1a;https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载&#xff08;不能直接编译&#xff0c;需进行修改&#xff09; 本章目标 本章会加载并运行…

SpringCloud(PS)远程调用--Feign

远程调用RestTemplate远程调用RestTemplate方式调用存在的问题Http客户端Feign实现步骤自定义配置Feign优化Feign性能优化——连接池配置最佳实践RestTemplate远程调用 Bean // LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}Autowiredprivat…

linux基本功系列之fdisk命令实战

文章目录前言一. fdisk命令介绍二. 语法格式及常用选项三. 参考案例3.1 列出每个分区的大小3.2 分区操作3.2.1 添加硬盘3.2.2 开启虚拟机并分区3.3.3 分区完成后进行格式化挂载四 . 设置分区自动挂载前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文…

Elasticsearch7学习笔记(尚硅谷)

文章目录一、ElasticSearch概述1、ElasticSearch是什么2、全文搜索引擎3、ElasticSearch 和 Solr3.1 概述3.2 比较总结二、Elasticsearch入门1、Elasticsearch安装1.1 下载使用1.2 数据格式2、索引操作3、文档操作&#xff08;了解&#xff09;3.1 创建文档3.2 文档查询3.3 文档…

外贸谷歌优化,外贸google SEO优化费用是多少?

本文主要分享关于做外贸网站的谷歌seo成本到底需要投入多少这一件事。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 那么外贸google SEO优化费用是多少&#xff1f; 答案是&#xff1a;2w~25w。 好&#xff0c;看到这个答案先别激…

0.1opencv库VS环境配置

opencv环境配置 感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。 这个这门课程的第一篇文章&#xff0c;主要是opencv环境配置。 本教程的环境为 Visual Studio 2019CMake 3.22.3opencv 4.6.0windows 10 1、opencv的源码下载与安装 直接访问opencv官网&…

Docker入门教程

文章目录一、Docker概述1. 什么是容器技术&#xff1f;2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…

mysql 8.0 忘记root密码-linux

vim /etc/my.cnf 在[mysqld]最后加上如下语句&#xff1a;skip-grant-tables 并保存退出有的配置是分开的&#xff0c;/etc/my.cnf.d/mysql-server.cnf重启mysql服务 : service mysqld restart免密码登陆: mysql -u root -ppassword校验直接回车select host, user, authenticat…

C#:Krypton控件使用方法详解(第七讲) ——kryptonHeader

今天介绍的Krypton控件中的kryptonHeader&#xff0c;下面开始介绍这个控件的属性&#xff1a;控件的样子如上图所示&#xff0c;从上面控件外观来看&#xff0c;这个控件有三部分组成。第一部分是前面的图片&#xff0c;第二部分是kryptonHeader1文本&#xff0c;第三部分是控…

前端学习第一阶段-第7章 品优购电商项目

7-1 品优购项目介绍及准备工作 01-品优购项目导读 02-网站制作流程 03-品优购项目规划 04-品优购项目搭建 05-品优购项目-样式的模块化开发 06-品优购项目-favicon图标制作 07-品优购项目-TDK三大标签SEO优化 7-2 首页Header区域实现 08-品优购首页-快捷导航shortcut结构搭建 0…

MySQL(三):切分,主从复制,读写分离

文章目录一、切分水平切分垂直切分水平切分策略二、主从复制三、读写分离一、切分 水平切分 水平切分又称为sharding,它是将同一个表中的记录拆分到多个结构相同的表中。当一个表的数据不断增多的时候&#xff0c;sharding是必然的选择&#xff0c;它可以将数据分布到集群的不…

jmap监控工具

在一个JVM进程中会存在有多个对象实例,如果要想获取所有对象的信息,就可以通过JDK提供的jmap工具完成,另外使用该工具还可以直接获取到指定进程的堆内存使用信息,开发者可以通过jmap --help 命令查看该命令相关的参数。 1、查看JVM进程中的对象信息 导致JVM性能问题的核心…

力扣sql简单篇练习(十九)

力扣sql简单篇练习(十九) 1 查询结果的质量和占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 用count是不会统计为null的数据的 SELECT query_name,ROUND(AVG(rating/position),2) quality,ROUND(count(IF(rating<3,rating,null))/count(r…

九龙证券|欧美充电桩市场快速增长 国内“桩企”出海需求旺盛

海外充电桩毛利率水平高、需求增加速&#xff0c;“桩企”出海继续。 在阿里世界站上接连三年火爆的新能源出口行业&#xff0c;本年坚持高增加下&#xff0c;涌现出新商机——新能源车充电桩。阿里世界站最新跨境指数显现&#xff0c;曩昔一年新能源车充电桩的海外商机快速增加…

SpringBoot11:分布式Dubbo、Zookeeper

什么是分布式系统&#xff1f; 建立在网络之上的软件系统&#xff0c;是若干个独立的计算机的集合&#xff0c;但是对用户来说&#xff0c;就像单个系统一样。可以利用更多的机器&#xff0c;处理更多的数据 注意&#xff1a;只有当单个节点不够用的时候&#xff0c;才需要考…

杭州电子科技大学2023年MBA招生考试成绩查询和复查申请的通知

根据往年的情况&#xff0c;2023杭州电子大学MBA考试初试成绩可能将于2月21日公布&#xff0c;最早于20号出来&#xff0c;为了广大考生可以及时查询到自己的分数&#xff0c;杭州达立易考教育为大家汇总了信息。根据教育部和浙江省教育考试院关于硕士研究生招生考试工作的统一…

volatile 关键字的使用

写博客的目的第一是做笔记&#xff0c;第二是在错误的基础上不断刷新认知&#xff0c;这两天会写三篇关于嵌入式容易混淆的知识点&#xff0c;有错误欢迎拍砖&#xff01; 1、volatile关键字的使用 关于volatile 关键字&#xff0c;如果你的理解仅仅是讲“是从内存直接取数据…

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…

K8s集群部署(二进制安装部署详细手册)

一、简介 K8s部署主要有两种方式&#xff1a;1、Kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、二进制 从github下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成Kubernetes集群…

SSM项目搭建保姆级教程

文章目录1、什么是SSM框架1.1、持久层1.2、业务层1.3、表现层1.4、View层1.5、SpringMVC执行流程1.6、MyBatis2、SSM实战搭建2.1、创建工程2.2、添加依赖2.3、配置spring.xml文件2.4、配置web.xml文件2.5、log4j.properties2.6、准备表2.7、实体类2.8、mapper2.9、service2.10、…