点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

背景

自动驾驶圈也有很多“黑话”,他们是算法蔑视、戏耍产品经理的金箍棒;是测试忽悠、蒙骗产品经理的芭蕉扇。

自动驾驶技术的深奥及飞速革新导致多数自动驾驶产品经理无法胜任定义自动驾驶核心功能的重任(这部分工作目前多数由自动驾驶团队的博士大牛担任),转而去负责自动仿真平台、车队管理平台、人机交互策略等一些弱自动驾驶、强互联网产品功能。

团队博士大牛适合领导自动驾驶团队进行算法能力建设,快速带领团队建立行业竞争壁垒,但并不适合自动驾驶未来大规划的商业化落地。自动驾驶产品经理应当知耻而后勇,不断进取 ,早日建立起承担大规模商业化落地所需担负的职责。

基于此背景,作者从产品经理的角度去分享自动驾驶行业一些晦涩难懂的“黑话”,分享中学习,学习中分享,错误在所难免,欢迎不吝指出。

本期我们不介绍上至80老太、下至8岁孩童可能都已经熟知的自动驾驶“感知”、“定位”、“规划”、“控制”几大模块,俗话说擒贼先勤王,我们从理论最难、实现最复杂的SLAM介绍起。

一位友人从算命先生那得到了一条SLAM学习路径:C++ -> Linux -> ROS -> 数学 -> SLAM -> 嫩模,并暗自许下“不破楼兰终不还”的壮志,我是充分理解他的学习动力的。但是,一个月后,友人和我抱怨说:“SLAM是我这辈子学过的最难的知识了,楼兰(Young Model)无望了”。

用户故事

产品经理的需求来源于故事,我的故事场景是:你一觉醒来,发现身边的钢筋水泥消失了,映入眼帘的是古色古香的一道大门,上书三个大字“女儿国”,你既慌张又有一丝窃喜。

慌张我在哪,我该往哪里去,窃喜往哪里去应该都不会太差。语言不通,你又无法求助路旁跳肚皮舞的小姐姐。没有办法,你只能沿着女儿国的道路前进,并努力去熟悉、记住这个陌生的环境。

走完一圈,你回到起点,擦了擦哈喇子,慌张没有了,只剩下窃喜。这简直是人间天堂,全是貌美如花的姑娘和对陌生男人的好奇眼神。

不巧,这个时候你的肚子咕咕叫了两声,你突然意识到走了这么多路,有点饿了,得找个地方饱餐一顿。你回忆起刚才路过的名叫“东北一家人”的客栈貌似装修、环境都不错。你凭着刚才的记忆,以及一些指示牌,很快找到了那家客栈。

解决方案

解决陌生环境定位和地图构建问题用的就是SLAM(Simultaneous Localization and Mapping)技术。

人通过双眼和耳朵去熟悉陌生的环境,并在逛完一圈回到起点后即在大脑里形成一幅大致的环境地图。同样机器在未知环境中,通过自身传感器在第一次运动过程中去采集陌生环境中的场景信息并生成一张地图。下次我再走到相似的位置时,传感器采集到的数据去和我记忆里的地图对比,相似度达到一定概率,机器就知道我现在在哪里了。

SLAM比较专业的解释为:机器从未知环境的未知地点出发,在运动过程中通过传感器重复观测到的环境特征定位自身位置和姿态,再根据自身位置构建周围环境的增量式地图,从而达到同时定位和地图构建的目的。SLAM按实现传感器来分,主要包括激光SLAM和视觉SLAM两大类,本文侧重介绍激光SLMA。

产品功能

SLAM在室内机器人和开放道路自动驾驶车辆两个典型应用场景所需要实现的功能并不相同,最典型的区别是室内机器人几乎可以去工作空间任意没有障碍物的地方,没有什么限制;而自动驾驶车辆要遵循复杂的道路交通规则,虚线可变道,实线不可变道,这导致两者在建图方式和最终生成的地图格式上都有所不同。

室内机器人以商超商用清洁机器人为例,开放道路自动驾驶车辆以城区主干道行驶的RoboTaxi为例。

扫描地图

对于商超场景,机器人只须在室内有限区域内实现导航,而无须知道自己在物理世界的经纬信息,因此商超清洁机器人的扫图只需要一个8/16线的低线束主激光,结合惯导即可实现扫图工作。主激光提供场景深度信息,惯导结合码盘,提供基本的移动信息。

由于惯导的工作原理,连续扫图下来会有累积误差,因此后续需要进行闭环检测。对于空间特征不明显的场景,还可以加配相机,提高扫图的质量。

对于开放道路场景,RoboTaxi需要从地图里知道自己在哪条车道,所在车道的类型(左转、右转、直线、应急、公交),旁边车道的类型,两条车道线之间是虚线还是实线,交通标识(限速标识、急转弯标识等),人行横道等信息。因此单纯依靠激光传感器没法定位物理世界经纬度,至少需加上高精度GNSS。

高精度GNSS在立交桥下,涵洞内,密集高楼旁等遮挡比较严重的地方又会出现定位漂移,因此融合IMU的高精度组合导航,高线束扫图激光成为开放道路激光SLAM建图的硬件标配。


地图类型

机器人所用的地图绝大多数为栅格地图,所谓栅格地图,即是将地图离散化为一个个小的栅格,每个小栅格可代表三种状态:占用、空闲、未知。这样所有的栅格组成的一张图就可以代表可通行区域(白)、障碍物区域(黑)和未知区域(灰)。

RoboTaxi的行驶场景注定它无法简单的使用只有三种状态的栅格地图,必须在栅格地图上体现更多的交通规则信息,就是现在异常火爆的高精度地图。高精地图是一类定位精度达到厘米级,其中包含了驾驶辅助信息(车道类型、交叉路口布局及路标位置等)及语义信息(限速信息、斑马线位置及车辆转弯开始位置等)。


地图处理

机器人栅格地图

机器人扫描地图完成后,由于传感器本身及环境的噪声,地图通常需要经过处理后才能正式生成机器人可用的栅格地图。

(a)噪点处理

扫图过程中不可避免的会存在移动障碍物(行人、手推车等),扫图完成会在栅格地图上呈现不可通行的黑色噪点区域,这部分区域需要人工恢复至可通行区域,以便导航功能正常;多数激光无法识别玻璃,导致多玻璃墙的场景,玻璃后面会被识别为可通行区域,这部分也需要人工处理为未知区域,以免发生撞玻璃问题。

(b)重影处理

典型的重影表现为实际环境中的一面墙在地图里变成了两面平行相近的墙,可能的原因有激光运动畸变、闭环不成功问题、激光精度问题等。重影会影响导航与定位。理想的情况是可以通过后期的算法处理掉重影,不理想的情况下只能从头开始扫图了。

(c)闭环检测

闭环检测,是指机器人在扫图过程中,判断当前区域已经来过,从而将当前区域扫描地图与之前扫描地图进行匹配,达到闭环的目的。但是,由于传感器本身及周围环境噪声的存在,下一次机器人再路过相同的局域时,极有可能发生“梦里寻她千百度,蓦然回首,却不相识”的尴尬。

没有闭环检测或闭环错误,会导致地图信息错误,实际使用时会在闭环不正常的附近发生较大的定位偏移,甚至定位丢失无法找回。提高闭环检测成功率一方面可以选择特征明显的起点和终点进行闭环匹配,另一方面可以通过优化算法去提高噪点过滤能力,特征匹配能力,提高闭环成功率。

RoboTaxi高精地图

高精地图从定义上就可以看出后期需要处理的东西太多,主要包括数据标注、动态障碍物去除,地图拼接等处理。

(a)数据标注

激光SLAM方式生成的栅格地图,不具有驾驶辅助信息及语义信息,因此需要对激光点云数据进行标注,增加车道类型、交叉路口布局及路标位置等驾驶辅助信息以及限速信息、斑马线位置及车辆转弯开始位置等语义信息。目前标注仍以人工为主,因为场景数据无法完全体现人为规则,比如上海的高架,你外地牌照和沪C牌照在一天中可通行的时间段是不一样的,这些信息场景数据里无法体现,只能通过人工标注添加。

(b)动态障碍物去除

高精地图里我们只需保留静态的物体,对于扫图过程中生成的动态障碍物,我们需要从地图中去除。去除静态障碍物可以先用概率模型,然后利用点云数据进行离线处理。当然高级的方案是利用机器学习,将识别到的点云进行分类,删除掉属于动态障碍物的类别。

(c)地图拼接

对于开放道路场景,地图的采集不可能一次完成,因此,存在需要将不同时间段栅格地图数据校准到一起的问题。简单来讲,通过对不同时间段栅格地图建立点和边的约束,从而拼接得到所有时间段的栅格地图相对正确位置,这个时候我只要知道一个点的准确位置,就能得到整幅栅格地图的准确位置。


定位功能

建立了场景地图,剩下的就是根据地图实现自身的定位,这也是SLAM第二大功能了,作者写到这时已经有点消化不良,详细的定位原理,我们只能下回详解,这里只先做简单介绍。

机器人在商超场景中的定位功能包括:定位初始化,定位更新。定位初始化是指在机器人初始位姿不确定的条件下,利用局部的、不完全的观测信息估计机器人的当前位姿。初始化时尽量选择特征明显,稳定可靠的起始点。定位更新是指在已知机器人初始位姿的条件下,结合本体运动模型,通过将观测到的特征与地图中的特征进行匹配,求取它们之间的差别,进而更新机器人位姿的定位方法。

RoboTaxi在城市开放道路的定位分为空旷区域和有遮挡区域,空旷区域就是高精度GNSS,短暂遮挡区域,可以利用IMU结合里程计信息进行定位补偿,长期遮挡区域,可以利用激光或相机进行辅助定位。总而言之,多传感器融合定位。

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

产品经理眼中的SLAM技术学习路径相关推荐

  1. 软件工程中需要学习和掌握的软件都有哪些_9个B端产品经理需要懂的技术

    B端产品经理需要懂技术,在互联网行业已经是一个共识.那产品经理究竟需要懂哪些技术呢?本文介绍了九个产品经理需要了解的技术,与大家分享! B端产品经理需要懂技术,在互联网行业已经是一个共识. 毕竟互联网 ...

  2. AI产品经理需了解的技术知识:语音识别技术(2)

    AI产品经理需了解的技术知识:语音识别技术(2) https://blog.csdn.net/zhangbijun1230/article/details/81232256 本文章主要介绍了语音识别技 ...

  3. 产品经理必懂的技术那点事儿 pdf_培养一个合格的产品经理需要多少钱?

    过去这几年,有大量产品经理进入到互联网行业.初阶产品岗位竞争激烈,但高阶产品岗位却很难招人. 说直白点,能独立扛事的产品经理是很少的. 什么叫独立扛事? 就是能基于公司战略和业务目标,制定对应的产品方 ...

  4. extjs曲线数据如何从后端获取_B端产品经理应了解的技术知识(上)

    点击上方"蓝字"关注我!转载请注明出处! 互联网行业发展这么多年,产品经理这个行业也发展了多年,现在很多人都已形成了共识:产品经理需要懂技术!那么,作为B端产品经理,究竟需要掌握哪 ...

  5. 产品经理必懂的技术那点事儿 pdf_产品经理10大基础技能(5):读透神经网络和机器学习...

    本篇先介绍许多热门的行业均在产生AI产品经理岗位的需求,再详细介绍AI产品经理必懂的AI技能,接着撰写什么是神经网络?什么是机器学习?最后用一个案例详细拆解AI产品经理如何用机器视觉识别手写字体的整体 ...

  6. 笔记 | 产品经理必懂的技术(三)

    1.产品思维与技术思维 1.1 产品经理为什么要懂技术 思维模式差异: 在实际工作做不难发现,当产品经理与工程师就某一个具体问题进行讨论时,双方站在各自角度就问题进行分析和讨论,固有知识结构的差异导致 ...

  7. 产品经理是否需要懂技术

    一 产品经理需要懂技术吗? 我的理解:产品经理只需了解"技术边界"和懂得开发的"最少必要知识"即可. 二 所谓"技术边界",其实就是问个问题 ...

  8. AI产品经理需了解的技术知识:语音识别技术(1)

    AI产品经理需了解的技术知识:语音识别技术(1) https://blog.csdn.net/zhangbijun1230/article/details/81231921 一.语音识别的发展 20世 ...

  9. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

  10. 产品经理在早期如何快速学习?

    产品经理在早期如何快速学习? 1.多阅读 (1)阅读专业书籍 比如说小米的黎万强写了一本<参与感>,讲述了小米成长过程中的一系列案例分析,概念总结.黎老师是小米创始元老,案例有小米的成功背 ...

最新文章

  1. sharepoint 2010 创建内容类型2
  2. 关于css的基础知识点
  3. 大数据实践的6个阶段
  4. UIImagePickerController按钮的中文问题
  5. 微信小程序自定义波浪组件
  6. 嵌入式工作笔记0001---认识SoC
  7. ES6——rest参数
  8. 《跟我一起做J2EE版Blog–jPress》4(搭建marven下的Spring和Hibernate)
  9. 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子
  10. 西电计科院微机原理与系统设计课程笔记(车向泉版)
  11. 从SVN服务器下载project到本地
  12. 皮尔森残差_残差与标准化残差
  13. excel 永久保存宏命令
  14. 正则表达式 中文 英文 空格
  15. 工作 10 年后,我突然决定读硕士了!
  16. 用Java给您的图片瘦身之Thumbnailator技术
  17. Workbook类提供的方法
  18. 网页中Html布局分解,因式分解怎么求
  19. 如何进行服务器备份操作系统,如何进行服务器备份操作系统
  20. 时序预测 | MATLAB实现PSO-SVM粒子群优化支持向量机时间序列预测

热门文章

  1. es6 箭头函数 模板字符串 点点点运算符
  2. Java之IO流(二)
  3. 如何配置QQ邮箱或腾讯企业邮箱发送邮件
  4. 【Win10如何给桌面文件夹自定义图标】怎么改应用图标1.回收站,垃圾桶图标改为pop猫+2.如何把icon图标打包成dll然后在修改文件夹图标时在该dll中选择,用Resource Hacker
  5. 多进程动态规划破解微信小程序水排序谜题
  6. 圆角半角数据库_MySQL存储全角字符和半角字符的区别
  7. h2o java,H2O AutoML入门开发简介
  8. MySQL中int(M)和tinyint(M)数值类型中M值的意义
  9. error code
  10. 操作系统 存储管理实验报告