https://github.com/ApolloAuto/apollo/blob/master/docs/howto/modules/apollo1.5_perception_module_study_notes_cn.md

功能:

感知障碍物,预测障碍物的运动轨迹。

数据流图:

输入:

  • 点云数据:/apollo/sensor/velodyne64/compensator/PointCloud2。
  • 坐标系转换关系:/tf(world->novatel)。
  • HD Map。
  • LiDAR外参:/tf_static(novatel->velodyne64)。
  • 注:在最小仿真系统中,/tf,/tf_static和HD map都不是以topic形式作为输入的。

输出:

  • 带航向和速度,障碍物的3D轨道消息:/apollo/perception/obstacles。

代码分析:

main.cc:

  • 主节点文件。
  • 通过apollo顶层宏APOLLO_MAIN,创建ros节点Perception。

perception.h,perception.cc:

  • 模块主体文件。
  • 定义实现Perception类,用于表述perception模块。
  • Name()函数:返回模块名字,也就是ros节点名字,即"perception"。
  • Init()函数:模块初始化函数。AdapterManager::Init()函数通过配置文件adapter.conf创建node handle,以及相应的topics;lidar_process_->Init()函数配置对激光雷达数据处理的算法;检测激光雷达是否有数据;注册点云数据的回调函数。
  • OnPointCloud()函数:数据处理回调函数。判断lidar处理算法是否就绪;lidar_process_->Process()函数使用前面注册的雷达处理算法依次处理雷达数据;lidar_process_->GeneratePbMsg()函数使用处理后的数据生成障碍物信息;AdapterManager::PublishPerceptionObstacles()函数基于adapter架构发布障碍物信息。

lidar_process.h,lidar_process.c:

  • 激光雷达数据处理文件,主要包含激光雷达的处理算法。
  • 定义实现LidarProcess类,用于处理激光雷达数据。
  • init()函数:RegistAllAlgorithm()函数注册激光雷达处理函数,分别是HdmapROIFilter,CNNSegmentation,MinBoxObjectBuilder,HmObjectTracker其对应的时激光雷达数据处理流程。InitFrameDependence()函数配置HD map。InitAlgorithmPlugin()函数将roi_filter_,segmentor_,object_builder_,tracker_实例化,可能是只作为插件,并调用其init()方法。
  • Process(const sensor_msgs::PointCloud2& message)函数:调用GetVelodyneTrans()函数获取velodyne2world坐标系转化关系,调用TransPointCloudToPCL()函数由Lidar数据生成PCL,存入point_cloud变量。然后调用Process(timestamp_, point_cloud, velodyne_trans)函数。
  • Process(timestamp_, point_cloud, velodyne_trans)函数:hdmap_input_->GetROI()函数从HD map获取ROI;roi_filter_->Filter()函数获取ROI的索引indices;segmentor_->Segment()函数对根据indices对障碍物进行分割,object_builder_->Build()函数重建障碍物,构成6变形;tracker_->Track()函数 预测障碍物运动轨迹。这是perception算法的核心部分,其四个步骤分别使用四中不同的算法,详细算法需要进一步研究。此步结束之后,对激光雷达数据处理结束,剩余部分就是合成障碍物,然后发布出去。

HD map的引入:

  • HD map的引入是通过hdmap_input.cc和hdmap_input.h文件实现,通过定义HDMapInput类表述和操作HD map。

激光雷达数据处理算法:

  • 每个算法对应obstacle\lidar\下的相应的一个目录,每个算法被包装为一个插件类。每种算法都牵涉比较深的相关数学理论知识,后续可将每一项作为专题研究,例如segment,其核心即是CNN算法。

[转]百度Appollo无人车Perception Module 分析的更多相关文章

  1. 百度 Apollo无人车平台增加传感器

    https://github.com/ApolloAuto/apollo/issues/1649 如果想加入一个新的传感器不是百度官方推荐的传感器到Apollo平台做法: First you can ...

  2. 谷歌迂回入华:Waymo无人车抢先进驻上海!

    谷歌迂回入华:Waymo无人车抢先进驻上海! https://mp.weixin.qq.com/s/d5Cw2uhykMJ9urb6Cs8aNw 谷歌又双叒叕要回归中国了?这已经是第不知道多少次的传言 ...

  3. “洞察千里”,华为云HiLens如何让无人车智行天下

    作者:华为云 Rosie 随着人工智能的普及和渗透,"无人"的场景越来越丰富,无人超市.无人车.无人机等已经融入我们的生活. 乘着这股热浪,华为云携手上海交通大学学生创新中心举办了 ...

  4. 2018 计蒜之道-初赛 第一场 A-百度无人车

    百度一共制造了 nn 辆无人车,其中第 ii 辆车的重量为 a_i\ \mathrm{kg}ai​ kg. 由于车辆过重会增大轮胎的磨损程度,现在要给这 nn 辆车减轻重量.每将一辆车减轻 1\ \m ...

  5. 无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biological replicates

    无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biologic ...

  6. CAS原子操作实现无锁及性能分析

    CAS原子操作实现无锁及性能分析 Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn.net/chen19870707 ...

  7. 无人车系统仿真相关软件介绍-dSPACE

    今天本来是想简单的介绍一下dSPACE的Automotive simulation models(简称ASM),但是想想还是把dSPACE这个公司的整个开发流程写一下.这样也可以了解一下汽车的整个软件 ...

  8. jQuery RemoveAttr(checked)之后再Attr(checked)属性无效果的原因分析

    jQuery中attr()和prop()在修改checked属性时的区别 投稿:whsnow 字体:[增加 减小] 类型:转载   使用语句$.attr('checked',true),将复选框的属性 ...

  9. javascript 百度地图无秘钥(appkey)创建marker标记地图

    创建简单的marker地图不一定需要去百度地图申请key,简单代码实现marker地图,效果如图: html代码如下,代码中的baidu.api.js参考后面的隐藏代码: <!DOCTYPE h ...

随机推荐

  1. js部分知识整理,google浏览器的代码调试

    整理一些学过的js知识点,包括js中3个括号的含义,this的使用,递归,google浏览器的代码调试.Location的属性及常用方法,window对象常用方法,open方法等. js括号 在js中 ...

  2. JDBC连接Oracle实现增、删、改操作

    jsp页面的form表单 AddMentaction实现向数据新增数据操作 DeleteMent删除操作 UpdateMent修改操作 最近在做一个练习项目"在线考试系统",在将整 ...

  3. Java泛型中的通配符T,E,K,V

    Java泛型中的通配符T,E,K,V 1.泛型的好处 2.泛型中的通配符 2.1 T,E,K,V,? 2.2 ?无界通配符 2.3 上界通配符 < ? extends E> 2.4 下界通 ...

  4. Vue-Cli程序环境搭建

    环境搭建 ##1.下载node.js cmd输入 node -v 查看是否能够正确打印出版本号 cmd输入 npm -v 查看是否能够正确打印出版本号 ##2.安装node.js淘宝镜像加速器 ### ...

  5. python爬取酷我音乐

    我去!!!我之后一定按照搜索方式下载歌曲~~~~~~~~~ 1.首先打开我们本次主讲链接:http://www.kuwo.cn/  2.刚开始我就随便点了一个地方,然后开始在后台找歌曲的链接地址.但是 ...

  6. HDU -1506 Largest Rectangle in a Histogram&&51nod 1158 全是1的最大子矩阵 (单调栈)

    单调栈和队列讲解:传送门 HDU -1506题意: 就是给你一些矩形的高度,让你统计由这些矩形构成的那个矩形面积最大 如上图所示,如果题目给出的全部是递增的,那么就可以用贪心来解决 从左向右依次让每一 ...

  7. JavaScript——七(继承)

    一. 这个样子这个student的类型是person,这个样子写虽然继承了,但是是把父类的属性继承在了student的原型上 为了使student的类型改成他自己就需要加一句"student ...

  8. 牛客编程巅峰赛S1第6场 - 黄金&钻石&王者 B.牛牛摆放花 (贪心)

    题意;将一组数重新排序,使得相邻两个数之间的最大差值最小. 题解:贪心,现将所有数sort一下,然后正向遍历,将数分配到新数组的两端,然后再遍历一次维护一个最大值即可. 代码: class Solut ...

  9. SQL Server 远程连接配置

    打开sql server配置工具 SQL Server网络配置→SQLEXPRESS的协议→启用TCP/IP→右键属性→IP地址→IPALL端口修改为1433→重启SQL Server服务 https ...

  10. 001、Python数据结构

    #! usr/bin/env python # _*_ coding:utf-8 _*_ from random import randint ''' 一.list的增删改查 1.list.appen ...