Apollo 应用与源码分析:Monitor监控-硬件监控-GPS

news2024/11/28 10:40:28

硬件架构图

可以看到左下角的“GNSS定位模块”其实是有IMU和GPS Antenna 组成的。

执行分析

代码

class GpsMonitor : public RecurrentRunner {
 public:
  GpsMonitor();
  void RunOnce(const double current_time) override;
};

void GpsMonitor::RunOnce(const double current_time) {
  auto manager = MonitorManager::Instance();
  Component* component = apollo::common::util::FindOrNull(
      *manager->GetStatus()->mutable_components(), FLAGS_gps_component_name);
  if (component == nullptr) {
    // GPS is not monitored in current mode, skip.
    return;
  }
  ComponentStatus* component_status = component->mutable_other_status();
  component_status->clear_status();

  static auto gnss_best_pose_reader =
      manager->CreateReader<GnssBestPose>(FLAGS_gnss_best_pose_topic);
  gnss_best_pose_reader->Observe();
  const auto gnss_best_pose_status = gnss_best_pose_reader->GetLatestObserved();
  if (gnss_best_pose_status == nullptr) {
    SummaryMonitor::EscalateStatus(ComponentStatus::ERROR,
                                   "No GnssBestPose message", component_status);
    return;
  }
  switch (gnss_best_pose_status->sol_type()) {
    case SolutionType::NARROW_INT:
      SummaryMonitor::EscalateStatus(ComponentStatus::OK, "", component_status);
      break;
    case SolutionType::SINGLE:
      SummaryMonitor::EscalateStatus(
          ComponentStatus::WARN, "SolutionType is SINGLE", component_status);
      break;
    default:
      SummaryMonitor::EscalateStatus(ComponentStatus::ERROR,
                                     "SolutionType is wrong", component_status);
      break;
  }
}

分析

gps monitor 核心内容就70 line code

基本思路如下:

  1. 从配置文件中查找GPS是否是被配置的监控组件
  2. 如果是的话,订阅GnssBestPose topic,并收取数据
  3. 获取最新的数据,如果最新的数据为null,发出ERROR级别的故障
  4. 如果获取的数据类型为NARROW_INT,表示正常
  5. 如果获取的数据类型为SINGLE,表示WARN
    1. 这里根据apollo 的定位算法设计与硬件架构,不难猜SINGLE 代表IMU 惯性单元或GPS有一个没有正常输出数据
    2. 如果获取的数据类型为其他情况,表示ERROR

GnssBestPose 和 SolutionType 的定义都来自 GNSS 驱动。

modules/drivers/gnss/proto/gnss_best_pose.proto
enum SolutionType {
  NONE = 0;
  FIXEDPOS = 1;
  FIXEDHEIGHT = 2;
  FLOATCONV = 4;
  WIDELANE = 5;
  NARROWLANE = 6;
  DOPPLER_VELOCITY = 8;
  SINGLE = 16;
  PSRDIFF = 17;
  WAAS = 18;
  PROPOGATED = 19;
  OMNISTAR = 20;
  L1_FLOAT = 32;
  IONOFREE_FLOAT = 33;
  NARROW_FLOAT = 34;
  L1_INT = 48;
  WIDE_INT = 49;
  NARROW_INT = 50;
  RTK_DIRECT_INS =
      51;  // RTK filter is directly initialized from the INS filter.
  INS_SBAS = 52;
  INS_PSRSP = 53;
  INS_PSRDIFF = 54;
  INS_RTKFLOAT = 55;
  INS_RTKFIXED = 56;
  INS_OMNISTAR = 57;
  INS_OMNISTAR_HP = 58;
  INS_OMNISTAR_XP = 59;
  OMNISTAR_HP = 64;
  OMNISTAR_XP = 65;
  PPP_CONVERGING = 68;
  PPP = 69;
  INS_PPP_CONVERGING = 73;
  INS_PPP = 74;
}

 

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

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

相关文章

为什么要把Linux机器加入到Windows AD/域控制器(Linux机器为什么要入域)?

文章目录1. 如何入域&#xff1f;2. 如何判断入域成功&#xff1f;3. 入域的效果(目的)是什么&#xff1f;4. 入域和SSSD之间是什么关系&#xff1f;1. 如何入域&#xff1f; sudo yum -y install oddjob oddjob-mkhomedir sssd samba-common-tools adcli \krb5-workstation o…

Java项目:jsp+servlet实现的新闻发布系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff1b; 前台主要功能为&#xff1a; 首页、娱乐新闻、经济新闻、文化新闻、小道新闻、用户评价等&#xff1b; 后台主要…

HTML5学习笔记(五)

CSS3 多列布局 CSS3新增了一种布局方式——多列布局。使用多列布局&#xff0c;可以轻松实现类似报纸那样的布局。 多列布局的应用非常广泛&#xff0c;像各大电商网站、素材网站中常见的“瀑布流效果”。 column-count属性来定义多列布局的列数。 column-width属性来定义多列…

【云原生系列】第四讲:Knative 之 Eventing

目录 序言 1.基础介绍 2.组成要素 2.1 事件源&#xff08;Event Source&#xff09; 2.2 事件处理&#xff08;Flow&#xff09; 2.3 事件消费者&#xff08;Event Consumer&#xff09; 3.架构模式 3.1 Source to Service ​编辑 3.2Channels & Subscriptions …

思科配置SVI实现VLAN间路由

思科SVI配置 说明 SVI技术与单臂路由和传统VLAN间路由一样&#xff0c;都是解决多个VLAN间通信问题。 SVI技术利用了多层交换机&#xff08;本文以三层交换机为例&#xff09;。 示例拓扑 其中S1为三层交换机 S2的Fa0/2接口于VLAN 10下 S3的Fa0/2接口于VLAN 20下 PC 1地…

NH2-picolyl-azide|2168629-06-7|Amine azide Picolyl叠氮生物标记基团

【产品描述】 西安凯新生物科技有限公司​picolyl-azide-NH2含有叠氮基&#xff0c;叠氮基可以通过点击化学与炔烃、BCN、DBCO反应&#xff0c;生成稳定的三唑键。末端羧酸在活化剂&#xff08;如EDC或HATU&#xff09;存在下可与伯胺基反应&#xff0c;形成稳定的酰胺键。叠氮…

python基础之面向对象基础语法

文章目录一、面向对象基础语法1.dir内置函数&#xff1a;2.定义一个简单的类&#xff08;只包含方法&#xff09;&#xff1a;二、实例演练3.面对对象练习&#xff1a;小明爱跑步需求&#xff1a;4.摆放家具练习&#xff1a;5.士兵突击&#xff0c;需求&#xff1a;6.私有属性和…

CDN技术介绍

引言 随着Internet技术和多媒体技术的不断发展&#xff0c;图像、音频、视频服务所占的比重越来越大&#xff0c;加之网民数量激增&#xff0c;网络访问距离过长&#xff0c;导致网络负载迅速增加&#xff0c;从而使用户的访问质量受到严重影响。传统的缓存技术对交互性强和比…

【ML特征工程】第 9 章 :回到特征:构建学术论文推荐器

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

算法leetcode|17. 电话号码的字母组合(rust重拳出击)

文章目录17. 电话号码的字母组合&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;原题传送门&#xff1a;分析题解rustgocjavatypescriptpython17. 电话号码的字母组合&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有…

向NS-3添加新模块_ns3.35添加新模块_ns3.35以及更早版本添加新模块

2022年11月&#xff0c;ns3官网发布了3.37版本&#xff0c;与3.36一样&#xff0c;运行、编译、配置的时候使用的都是ns3.37/ns3 这个脚本&#xff0c;但3.35以及3.35以前的版本使用的都是ns3.35/waf脚本&#xff0c;相应的3.35以及以前的版本与3.36以后的版本&#xff0c;新生…

Java迭代器 for循环的区别

1、Iterator接口&#xff1a; Iterator接口包含三个方法&#xff1a;hasNext&#xff0c;next&#xff0c;remove Iterator常用于对集合进行 一边遍历一边修改 的操作 注意&#xff1a;当Iterator迭代访问Collection集合中元素时&#xff0c;Collection的元素不能改变&#x…

数据库实践 Hw02

Assignment 02: get familiar with operations in MySQL 创建数据库 创建名字为bank的银行数据库 create database if not exists bank; show create database bank; use bank; show tables;可以获得如下内容 后续展示bank数据库中的tables tables为空 bank数据中创建表…

【Compose】Desktop Application 初尝试

前言 作为一个多年的android开发者&#xff0c;自从Jetpack发布以来&#xff0c;其中的Compose组件就深深的吸引了我&#xff0c;在去年就用新版android studio创建模板尝鲜了一把&#xff0c;不过并没有投入太多时间和精力&#xff0c;其实还有一个消息我没太关注&#xff0c…

算法提升:图的最小生成树算法-克鲁斯卡尔(Kruskal)

目录 概念 思路 代码 概念 克鲁斯卡尔算法查找最小生成树的方法是&#xff1a;将连通网中所有的边按照权值大小做升序排序&#xff0c;从权值最小的边开始选择&#xff0c;只要此边不和已选择的边一起构成环路&#xff0c;就可以选择它组成最小生成树。对于 N 个顶点的连通网…

axios数据交互

目录 一、axios 概念 二、官方文档 三、下载命令 四、特点 五、基本语法 六、基本案例 一、axios 概念 axios 是基于promise创建的http库&#xff0c;可以用于客户端&#xff08;浏览器&#xff09;和 node.js ​ 官方概念&#xff1a; Axios 是一个基于 promise 的 HTT…

面向OLAP的列式存储DBMS-13-[ClickHouse]的MergeTree表引擎原理解析

ClickHouse 中最重要的表引擎&#xff1a;MergeTree 的深度原理解析 首先我们了解了 MergeTree 的基础属性和物理存储结构&#xff1b;接着&#xff0c;依次介绍了数据分区、一级索引、二级索引、数据存储和数据标记的重要特性&#xff1b;最后总结了 MergeTree 上述特性一起协…

C++ Reference: Standard C++ Library reference: C Library: cwctype: iswdigit

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwctype/iswdigit/ 函数 <cwctype> iswdigit int iswdigit (wint_t c); 检查宽字符是否为十进制数字 检查c是否为十进制数字字符。 十进制数字是0 1 2 3 4 5 6 7 8 9中的任意一个。 此函数是isdigit&#xff…

【Web前端基础进阶学习】HTML详解(下篇)

上篇学习到了HTML列表&#xff0c;现在从区块开始学习&#xff01; 一起学习下篇吧! 一.HTML区块 1.HTML区块元素2.HTML内联元素3.HTML的 div 元素4.HTML的 span 元素 二.HTML布局 1.使用div元素添加网页布局2.使用table元素添加网页布局 三.HTML表单和输入 1.文本域2.密码字…

压缩包密码可以删除吗?

压缩包文件设置了密码&#xff0c;但是长时间没有使用&#xff0c;忘记了密码、不能解压压缩包了&#xff0c;还能够删除压缩包密码嘛&#xff1f; 压缩包设置的加密&#xff0c;不需要再加密了&#xff0c;可以删除压缩包密码&#xff0c;以后不需要输入密码再解压密码了&…