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

2023-05-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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • C++知识点小结(趁热搬砖三年半的小码农) 2020年07月2日整理

    c 43 43 最好用易用的新特性 xff1a auto decltype https blog csdn net zyc2018 article details 93591189nullptr range forusing c 43 43
  • 如何定位内存泄漏问题

    如何定位内存泄漏问题 Things You 39 ll Need Proficiency in C 43 43 C 43 43 compilerDebugger and other investigative software tools
  • C++之future和promise

    C 43 43 之future和promise future和promise的作用是在不同线程之间传递数据 使用指针也可以完成数据的传递 xff0c 但是指针非常危险 xff0c 因为互斥量不能阻止指针的访问 xff1b 而且指针的方式传递
  • linux常用小知识点

    答案linux考试题 1 在登录Linux时 xff0c 一个具有唯一进程ID号的shell将被调用 xff0c 这个ID是什么 b A NID B PID C UID C CID 答 xff1a w命令查看用户tty终端信息 ps ef
  • 无锁编程基础

    背景 我们处在技术快速发展的时代 xff0c 竞争变得前所未有的激烈 xff0c 不仅要十八般武艺俱全 xff0c 还得选对正确的技术 xff0c 跟上发展的脚步 xff0c 并贴上精研某个专业方向的标签 我们不仅要面对多线程和并发 xff
  • Linux网络相关概念和修改IP地址的方法

    网卡的命名规则 ifconfig xff1a 用于显示或设置网络设备 ens32 span class token punctuation span flags span class token operator 61 span span
  • 二维坦克大战游戏代码开发

    这是我实际面试中 xff0c 遇到的一个题目 xff0c 编写一个坦克大战游戏 一开始感觉懵 xff0c 后来代码写写就好了 include lt iostream gt include lt stdlib h gt include lt
  • 软件系统性能常识

    不管是系统设计人员 开发人员还是测试人员 xff0c 要构建高性能的系统 xff0c 对于系统性能的一些常用术语都不了解 xff0c 那是无从做起的 xff0c 这里主要介绍几个软件性能指标的术语及计算方法 xff0c 便以在性能优化及性能
  • Socket的三种轮询方式select、poll、epoll之间的区别

    select poll epoll之间的区别 搜狗面试 1 select 61 61 gt 时间复杂度O n 它仅仅知道了 xff0c 有I O事件发生了 xff0c 却并不知道是哪那几个流 xff08 可能有一个 xff0c 多个 xff
  • linux后端c++开发人员需要学习的技术栈

    数据结构和算法 学完之后要刷leetcode xff08 剑指offer xff09 计算机网络 tcp ip 协议栈 xff08 tcp ip详解 xff09 操作系统 进程和线程 并发 和锁 内存分布调度等等 xff08 深入理解操作系
  • 内核态和用户态的区别

    内核态和用户态的区别 当一个任务 进程 执行系统调用而陷入内核代码中执行时 xff0c 我们就称进程处于内核状态 此时处理器处于特权级 最高的 0级 内核代码 当进程处于内核态时 xff0c 执行的内核代码会使用当前的内核栈 每个进程都有自
  • Linux查找命令四剑客awk、sed、find(locate)、grep讲解

    目录 find命令 xff1a 一旦执行了chmod 000 那么如何恢复权限呢 xff1f 2 grep xff08 找文件内容 行操作 xff09 3 awk 4 sed 找文件内容 行操作 find命令 xff1a 1 find xf
  • go语言学习笔记,特点

    1 并发编程 Go语言在并发编程方面比绝大多数语言要简洁不少 xff0c 这一点是其最大亮点之一 xff0c 也是其未来进入高并发高性能场景的重要筹码 golang的并发执行单元是一种称为goroutine的协程 协程又称为微线程 xff0
  • 进程调度,一个调度器的自白

    进程调度 xff0c 一个调度器的自白 我是一个进程调度器 我的职责是调度计算机内所有的进程 xff0c 为他们分配 CPU 资源 1 批处理时代 想当初 xff0c 操作系统创造我时 xff0c 只是打算让我用 FCFS 调度算法 xff
  • 厉害了!除了find命令,还有这么多文件查找命令,高手必备!

    目录 1 locate 2 whereis 3 which 4 type 1 locate locate命令其实是 find name 的另一种写法 xff0c 但是要比后者快得多 xff0c 原因在于它不搜索具体目录 xff0c 而是搜索
  • 浅析Linux中的零拷贝技术

    浅析Linux中的零拷贝技术 目录 浅析Linux中的零拷贝技术 引文 什么是零拷贝技术 xff08 zero copy xff09 xff1f 使用 mmap 使用sendfile 使用splice 本文探讨Linux中 主要的几种零拷贝
  • Linux用户管理(Centos7)

    用户管理 用户命令 添加登录用户 xff1a 例 xff1a 添加一个名为harry的用户 xff0c 并使用bash作为登录的shell span class token punctuation span root 64 aws span
  • CPU明明8个核,网卡为啥拼命折腾一号核?

    中断机制 我是CPU一号车间的阿Q xff0c 我又来了 xff01 我们日常的工作就是不断执行代码指令 xff0c 不过这看似简单的工作背后其实也并不轻松 咱不能闷着头啥也不管一个劲的只管执行代码 xff0c 还得和连接在主板上的其他单位
  • 好久没出去面试了,没想到问这么难...

    好久没出去面试了 xff0c 没想到问这么难 1周前 不知道你们多长时间没有参加过面试了 xff0c 最近这段时间的面试 xff0c 真的是一个比一个严格 xff01 我昨天参加了一线大厂的技术面 xff0c 被问到了一些并发相关的问题 x
  • 救命,Linux正在吃掉我的内存!

    内存发现自己的空闲空间越来越少 xff0c 经过一番调查 xff0c 发现罪魁祸首居然是Linux老大 xff01 内存 xff1a Linux老大 xff0c 这也没几个程序在运行 xff0c 可是你为什么老是占用我的内存啊 xff0c

随机推荐

  • 太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键!

    作为 Linux 用户 xff0c 大家肯定在 Linux 终端下敲过无数的命令 有的命令很短 xff0c 比如 xff1a ls cd pwd 之类 xff0c 这种命令大家毫无压力 但是 xff0c 有些命令就比较长了 xff0c 比如
  • 这样处理Shell脚本参数,爽多了!

    这样处理Shell脚本参数 xff0c 爽多了 xff01 在 shell必备基础知识 中说到了一些入口参数的基本使用 xff1a home shouwang test sh para1 para2 para3 0 1 2 3 脚本名 第一
  • 面试官:kill -9 进程杀不掉,怎么办?

    用ps和grep命令寻找僵尸进 ps A ostat ppid pid cmd grep e 39 Zz 39 命令注解 xff1a A 参数列出所有进程 o 自定义输出字段 我们设定显示字段为 stat xff08 状态 xff09 pp
  • GCC为何如此强大? 动态库与静态库

    做软件开发的读者 xff0c 应该对GCC都不会陌生 xff0c 之所以大家都能知道它 xff0c 了解它 xff0c 是因为它有许多特殊 强大的 功能 一 GCC发展史 GNU 项目计划的主要目的是创建一个名叫 GNU s Not Uni
  • 看完这篇操作系统,和面试官扯皮就没问题了。

    解释一下什么是操作系统 操作系统是运行在计算机上最重要的一种软件 xff0c 它管理计算机的资源和进程以及所有的硬件和软件 它为计算机硬件和软件提供了一种中间层 通常情况下 xff0c 计算机上会运行着许多应用程序 xff0c 它们都需要对
  • extern “C”的作用详解

    extern 34 C 34 的主要作用就是为了能够正确实现C 43 43 代码调用其他C语言代码 加上extern 34 C 34 后 xff0c 会指示编译器这部分代码按C语言 xff08 而不是C 43 43 xff09 的方式进行编
  • Linux 进程与程序区别与联系

    一 xff0c 什么是程序 xff1f 程序是完成特定任务的一系列指令集合 二 xff0c 什么是进程 xff1f 从用户的角度来看进程是程序的一次动态执行过程从操作系统的核心来看 xff0c 进程是操作系统分配的内存 CPU时间片等资源的
  • 软件包的管理(Centos7)

    软件包类型 xff1a rpm软件包的管理 xff1a rpm包格式说明 xff1a span class token punctuation span root 64 aws span class token operator span
  • unix环境编程1 环境变量

    预处理 编译 汇编 连接 cpu中有个MMU xff0c 内存处理单元 xff1a 它的作用是 1 处理物理内存与虚拟内存映射的关系 2 设置修改内存访问级别 xff08 0 3级 xff09 内核空间的访问级别为0 用户空间的访问级别为3
  • RSU NTP时间同步配置方式

    RSU NTP同步配时方式 RSU ntp同步配时是基于一个开源工具chrony实现的 xff0c 这个工具集成在RSU里面了 xff0c 网上也能搜索到教程 xff0c 以下是一个参考链接 xff1a Centos使用chrony做时间同
  • Linux回收子进程

    孤儿进程 孤儿进程 父进程先于子进程结束 xff0c 则子进程成为孤儿进程 xff0c 子进程的父进程成为init进程 xff0c 称为init进程领养孤儿进程 include lt stdio h gt include lt unistd
  • C++内存管理(超长,例子很详细,排版很好)

    导语 内存管理是C 43 43 最令人切齿痛恨的问题 xff0c 也是C 43 43 最有争议的问题 xff0c C 43 43 高手从中获得了更好的性能 xff0c 更大的自由 xff0c C 43 43 菜鸟的收获则是一遍一遍的检查代码
  • c++ string 的常用库函数的用法

    目录 一 初始化 二 获取长度 xff08 length size xff09 三 插入 xff08 insert xff09 四 替换 xff08 replace xff09 五 添加 xff08 append xff09 六 赋值 xf
  • linux学习笔记1

    shutdown 一分钟后关机 shutdown c 取消关机命令 shutdown r 重新启动系统 shutdown 43 10 十分钟后关机 ifconfig 查看 配置计算机当前的网卡配置信息 ping 地址 检测目标ip地址的连接
  • 一道爬楼梯的算法题

    一个小孩爬楼梯 xff0c 每次可以爬1个 2个或3个台阶 xff0c 编程求出这个小孩爬完10个台阶的楼梯一共有多少种走法 def main k 61 0 构建函数1 x 43 2 y 43 3 z 61 10 确定x取值范围 for x
  • 面试技术杂ji——需要解决的问题

    需要搞明白的几个问题 xff1a 1 3次握手和4次挥手 2 TCP与UDP的区别 3 如果TCP连接出现问题该如何排查 xff0c 说明排查的思路 连接断开或者出错 xff0c 会返回一个错误码 xff0c errorNo 最后一次系统调
  •  SHELL 脚本学习笔记

    第十四章 SHELL 脚本 终于到 shell 脚本这章了 xff0c 在以前笔者卖了好多关子说 shell 脚本怎么怎么重要 xff0c 确实 shell 脚本在 linux 系统管理员的运维工作中非常非常重要 下面笔者就带你正式进入 s
  • 软件定义汽车 新一代技术发展

    引言 作为一个技术的爱好者 xff0c 搞算法 xff0c 玩芯片 xff0c 攒系统 xff0c 并不只是工作 xff0c 也是自己所追求的很重要的部分 写这个系列 xff0c 是为了梳理这几年的所学 所思 所想 xff0c 从而形成一个
  • 解压缩 tar命令详解

    1 tar命令进行文档的归档和压缩 归档和压缩文件 归档和压缩文件的好处 xff1a 节约硬盘的资源 xff0c 加快文件传输速率 tar命令 作用 xff1a 打包 压缩文件 xff1b tar文件是把几个文件和 xff08 或 xff0
  • 华测导航GPCHC协议ROS驱动包,CGI610、410接收机,NavSatStatus、GPSFix和普通格式

    目录 一 消息类型1 1 sensor msgs NavSatFix1 2 sensor msgs NavSatStatus1 3 gps common GPSFix1 4 sensor msgs Imu 二 部分源码2 1 相关的依赖和库