Apollo学习-apollo介绍之localization模块(三)

Localization模块简介

localization模块主要实现了以下2个功能:

1.输出车辆的位置信息(planning模块使用)

2.输出车辆的姿态,速度信息(control模块使用)

其中apollo代码中分别实现了3种定位方法:

1. GNSS + IMU定位

2. NDT定位(点云定位)

3. MSF(上面2种方式的融合定位)

MSF方法并没有开发源码,是以动态库的方式提供的。实现的思路可以参考论文"Robust and Precise Vehicle Localization Based on Multi-Sensor Fusion in Diverse City Scenes"

目录

下面是localization的目录结构,看之前最好看下该模块的readme文件

├── common // 声明配置(flags),从conf目录中读取相应的值

├── conf // 配置文件存放目录

├── dag // cyber DAG流

├── launch // cyber的配置文件,依赖DAG图(这2个和cyber有关的后面再分析)

├── msf // 融合定位(gnss,点云,IMU融合定位)

│ ├── common

│ │ ├── io

│ │ ├── test_data

│ │ └── util

│ ├── local_integ

│ ├── local_map

│ │ ├── base_map

│ │ ├── lossless_map

│ │ ├── lossy_map

│ │ ├── ndt_map

│ │ └── test_data

│ ├── local_tool

│ │ ├── data_extraction

│ │ ├── local_visualization

│ │ └── map_creation

│ └── params

│ ├── gnss_params

│ ├── vehicle_params

│ └── velodyne_params

├── ndt // ndt定位

│ ├── map_creation

│ ├── ndt_locator

│ └── test_data

│ ├── ndt_map

│ └── pcds

├── proto // 消息格式

├── rtk // rtk定位

└── testdata // imu和gps的测试数据

可以看到,主要是rtk,ndt,msf这3个目录分别代表了不同的定位方法,而proto是消息的格式定义,common和conf主要是存放一些配置和消息TOPIC。下面我们逐个分析各个模块。

RTK

可以看到rtk模块相对比较简单,目录结构如下:

├── BUILD // bazel编译文件

├── rtk_localization.cc // rtk定位功能实现模块

├── rtk_localization_component.cc // rtk消息发布模块

├── rtk_localization_component.h

├── rtk_localization.h

└── rtk_localization_test.cc // 测试

http://rtk_localization_component.cc中可以看到

RTKLocalizationComponent::RTKLocalizationComponent()

: localization_(new RTKLocalization()) {}

即class RTKLocalization()实际上是RTKLocalizationComponent()中的一个属性localization_,我们可以发现apollo模块的架构大部分都是这样,一个模块负责发布接收消息,一个模块负责实现具体的功能,后面的模块在前面的模块中注册为一个属性。

具体的类图如下:

RTK模块类图

其中RTKLocalization首先读取驱动模块发布的gnss消息,然后再调用GpsCallback输出位置。

1.通过回调读取gnss驱动发布的消息

在gnss driver中DataParser类通过PublishCorrimu发布IMU的消息,而RTKLocalizationComponent::InitIO中绑定了回调

corrected_imu_listener_ = node_->CreateReader<localization::CorrectedImu>(

imu_topic_, std::bind(&RTKLocalization::ImuCallback, localization_.get(),

std::placeholders::_1));

当读取imu_topic_的消息时候,调用ImuCallback回调,把数据放到imu_list_中。

2. 通过GpsCallback返回位置信息,下面是GpsCallback的函数调用顺序

上面就是RTK模块的工作流程。

  以下为官方的教学课程,感兴趣的小伙伴上课学习吧~

 《Apollo开放平台9.0专项技术公开课》Apollo开发者社区_Apollo活动

《Apollo自动驾驶技术详解25讲》Apollo自动驾驶技术详解25讲_Apollo精品课

《自动驾驶新人之旅》自动驾驶新人之旅_Apollo精品课

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值