Apollo 2.5版导航模式的使用方法

本博客参考百度apollo官方开发手册,部分进行理解修改。

导航模式--官网开发手册

在`Apollo`之前的版本中,感知、预测、导航、规划模块均依赖于高精地图,而高精地图的制作方法繁琐且不透明,对于很多开发者而言,这是一个难以逾越的障碍。

基于相对地图(`relative map`)导航模式(`navigation mode`),利用该模式可顺利实施测试道路上的实车调试。

相对地图是Apollo2.5引入的新特性。从架构层面,相对地图模块是连接高精地图(`HD Map`)、感知(`Perception`)模块和规划(`Planning`)模块的中间层。相对地图模块会实时生成基于车身坐标系的地图(格式与高精地图一致),并且输出供规划模块使用的参考线

解释:1)导航模式使用相对地图; 2)如果在导航模式下,相对地图的参考线等数据会代替高精地图;

导航模式的基本思路是:

1. 通过人工驾驶方式录制测试道路上的行驶轨迹

2. 利用`Apollo`工具对原始轨迹进行处理得到平滑轨迹,该轨迹既用于替代路由(`routing`)模块输出的导航路径,也是规划(`planning`)模块用到的参考线(或称指引线、中心线,`reference line`),还是生成相对地图(`relative map`)的基准线。

此外,平滑轨迹还可用于替换高精地图内某些车道的参考线(默认情况下,高精地图将车道中心线作为参考线,在道路临时施工等特殊情形下该方式很不合适,需使用人工录制并平滑处理的轨迹替换特殊路段的车道参考线);

3. 驾驶员将车辆行驶到测试道路起点,在`Dreamview`中打开导航(`Navigation`)选项及相关功能模块,切换到自动驾驶模式并启动车辆;

4. 自动驾驶过程中,感知(`perception`)模块的相机(`camera`)动态检测道路边界及障碍物,地图(`map`)模块下的相对地图(`relative map`)子模块基于参考线及道路边界实时地生成相对地图(使用以车辆当前位置为原点的相对坐标系),规划(`planning`)模块依据地图模块输出的相对地图和感知模块输出的障碍物信息,动态输出局部行驶路径给控制(`control`)模块执行。

5. 目前,导航模式仅支持单车道行驶,可完成加减速、跟车、遇障碍物减速停车或在车道宽度允许的情形下对障碍物绕行等功能,后续版本的导航模式将会进一步完善以支持多车道行驶、交通标志和红绿灯检测等。

解释:1)录制分为两种方式:

  1. 实际上车录制
  2. 使用之前录制好的bag数据包

2)导航模式,不单需要参考线为基础的相对地图,还需要获取感知障碍物信息。

本文对`Apollo2.5`版的构建、参考线数据采集与制作、`Dreamview`前端编译配置、导航模式使用等内容进行全面阐述,希望能给各位开发者正常使用`Apollo 2.5`版带来一定的便利。

## 一、Apollo 2.5版的构建

### 1.1 在Visual Studio Code中构建

打开`Visual Studio Code`,执行菜单命令`文件->打开文件夹`,在弹出的对话框中,选择`Apollo项目`源文件夹,点击“确定”,如下图所示:

之后,执行菜单命令`任务->运行生成任务`或直接按快捷键`Ctrl+Shift+B`(与`Visual Studio`和`QT`的快捷键一致)构建工程,若之前没有启动过`Docker`,则编译时会启动`Docker`,需在底部终端窗口输入超级用户密码。命令执行完毕,若在底部终端窗口出现`终端将被任务重用,按任意键关闭。`信息(如下图所示),则表示构建成功。整个过程**一定要保持网络畅通**,否则无法下载依赖包。构建过程可能会遇到一些问题,

### 1.2 在命令行中构建

按快捷键`Ctrl + Alt + T`打开命令行终端,输入如下命令启动`Docker`:

cd your_apollo_project_root_dir

#从中国大陆访问,最好加上“ -C”选项,直接访问中国大陆主机服务器以获取恢复的下载速度

bash docker/scripts/dev_start.sh -C

(网络不好,难以拉docker;实在不行可以尝试改docker软件源(改为国内)

如果不行,就不用-C

bash docker/scripts/dev_start.sh

输入如下命令进入Docker:

bash docker/scripts/dev_into.sh

在Docker内部,如下执行命令构建Apollo项目:

bash apollo.sh build

整个操作如下图所示:

### 1.3 修改定位模块UTM区域ID

`Apollo`项目定位(`localization`)模块默认使用美国西部UTM坐标,在国内需要修改该值。在`Docker`外部,使用`vi`或其他文本编辑器,打开文件`[apollo项目根目录]/modules/localization/conf/localization.conf`,将下述内容:

--local_utm_zone_id = 10

修改为下述内容(这是 广东广州地区的UTM区域ID,中国UTM柯林斯分区参考该|网页):

--local_utm_zone_id = 49

具体的位置可以点击查看,例如广东广州

**注意:**如果录制数据时未修改上述内容,则线下模拟测试回放数据包时只能将错就错,千万不能再修改该值,否则地图上的参考线定位会出错!有一次我采集数据时,忘了修改该值,回放数据时又进行修改,结果导致参考线定位到了美国西海岸!我取消修改,按`F5`键刷新浏览器后显示就恢复正常了。

### 1.4 配置Dreamview使用的UTM区域ID

打开文件[apollo项目根目录]/modules/common/data/global_flagfile.txt,在最后一行添加如下语句(这是长沙地区的UTM区域ID,中国UTM柯林斯分区参考该|网页):

--local_utm_zone_id=49

## 二、参考线原始数据的采集

将构建好的`Apollo`项目文件导入车内工控机,并按照**步骤1.2**的方法进入`Docker`,再执行如下命令,启动`Dreamview`服务端程序:

bash scripts/bootstrap.sh

在浏览器中打开网页http://localhost:8888(注意不要使用代理),进入Dreamview界面,如下图所示:

**1**  驾驶员将车辆驶入待测试路段起点;

**2**  操作员点击`Dreamview`界面左侧工具栏中的`Module Controller`按钮,进入模块控制页面,选中`GPS`、`Localization`、`Record Bag`选项,**注意:如果采集的数据包需用于线下模拟测试,还需加上`CAN Bus`选项。**

**3**  驾驶员从起点启动车辆并按预定路线行驶至终点;

**4**  操作员关闭`Dreamview`界面中的`Record Bag`选项,此时会在`/apollo/data/bag`目录(这是`Docker`中的目录,宿主机上对应的目录为`[你的apollo根目录]/data/bag`)中生成一个类似于`2018-04-01-09-58-00`的目录,该目录中保存着类似于`2018-04-01-09-58-00.bag`的数据包。这就是我们所需的数据包,请记住它的路径及名称。**注意:**单个数据包文件的默认录制时长为1分钟,默认文件大小为2048MB,可通过修改文件`/apollo/scripts/record_bag.sh`来改变默认值。

为后文阐述方便起见,假设我包数据2018-04-01-09-58-00.bag直接存放于/apollo/data/bag目录。

## 三、参考线的制作

参考线的制作既可在车内工控机内完成,也可在其他计算机上实施。无论在哪台计算机上制作,我们首先假定已按**步骤1.2**的方法进入`Docker`,并按照**步骤二**中录制的数据包放置在`/apollo/data/bag`目录中,且假定该文件名为`2018-04-01-09-58-00.bag`(在你的机器上并非如此,这样做只是为了后文阐述方便而已)。

### 3.1 从原始数据包提取裸数据

在`Docker`内部,使用如下命令从原始数据包提取裸数据:

cd /apollo/modules/tools/navigator

python extractor.py /apollo/data/bag/2018-04-01-09-58-00.bag

上述命令会在当前目录(易知我们在`/apollo/modules/tools/navigator`目录中)生成一个提取后的裸数据文件:`path_2018-04-01-09-58-00.bag.txt`。

为了验证裸数据的正确性,可以使用如下命令查看:

python viewer_raw.py ./path_2018-04-01-09-58-00.bag.txt

docker中没有相关的python库,建议放到其他电脑中(pyCharm开发环境)进行运行

会显示类似下图的路径图:

### 3.2 对裸数据进行平滑处理

如果录制数据时,车辆行驶不够平顺,提取的裸轨迹数据可能会不光滑,有必要对其进行平滑处理。继续在`Docker`内部使用如下命令完成平滑处理:

bash smooth.sh ./path_2018-04-01-09-58-00.bag.txt 180

注意:上述命令中`200`是平滑处理的长度,该值一般为`150-200`,如果执行失败,可尝试调整该参数,再次进行平滑。

为了验证平滑结果的正确性,可以使用如下命令查看:

python viewer_smooth.py ./path_2018-04-01-09-58-00.bag.txt ./path_2018-04-01-09-58-00.bag.txt.smoothed

其中,第一个参数`./path_2018-04-01-09-58-00.bag.txt`是裸数据,第二个参数`./path_2018-04-01-09-58-00.bag.txt.smoothed`是平滑结果,显示效果类似下图:

## 四、Dreamview前端的编译

`Dreamview`前端默认使用`Baidu`地图,也可修改为`Google`地图,但需重新编译`Dreamview`前端,具体方法如下(**注意**:如不需修改地图设置,可忽略该节内容):

### 4.1 更改导航地图 (可以不更改,默认使用百度地图)

打开文件`[apollo项目根目录]/modules/dreamview/frontend/src/store/config/ parameters.yml`,根据需要将下述内容替换为`Google`地图或`Baidu`地图:

navigation:

# possible options: BaiduMap or GoogleMap

map: "BaiduMap"

# Google Map API: "https://maps.google.com/maps/api/js"

# Baidu Map API: "https://api.map.baidu.com/api?v=3.0&ak=0kKZnWWhXEPfzIkklmzAa3dZ&callback=initMap"

mapAPiUrl: "https://api.map.baidu.com/api?v=3.0&ak=0kKZnWWhXEPfzIkklmzAa3dZ&callback=initMap"

### 4.2 重新编译Dreamview前端

按照**步骤1.2**的方法进入`Docker`,运行如下命令编译`Dreamview`前端:

# 安装Dreamview前端依赖包,注意:该步骤只需执行一次,不必每次执行

Install Dreamview front end dependent package. Note: you only need to execute it once, not every time.

cd /apollo/modules/dreamview/frontend/

yarn install

# Compile Dreamview front end

cd /apollo

bash apollo.sh build_fe

编译过程可能会出现如下错误:

ERROR in ../~/css-loader!../~/sass-loader/lib/loader.js?{"includePaths":["./node_modules"]}!./styles/main.scss*

*Module build failed: Error: ENOENT: no such file or directory, scandir '/apollo/modules/dreamview/frontend/node_modules/node-sass/vendor'*

...

(The error continues, but we have the information we need to debug it)

这是内部依赖包不一致造成的,**解决方法如下:**

在`Docker`内部,运行如下命令(注意:**一定要保持网络畅通**,否则无法重新下载依赖包):

cd /apollo/modules/dreamview/frontend/

rm -rf node_modules

yarn install

cd /apollo

bash apollo.sh build_fe

## 五、导航模式的使用

### 5.1. 打开Dreamview并开启导航模式

进入`Docker`,启动`Dreamview`,命令如下:

cd your_apollo_project_root_dir

# If you haven’t opened Docker, do it first or ignore that step

bash docker/scripts/dev_start.sh -C

# Enter Docker

bash docker/scripts/dev_into.sh

# Start Dreamview and monitoring process

bash scripts/bootstrap.sh

若是线下模拟测试,则将**步骤二**中录制好的数据包`/apollo/data/bag/2018-04-01-09-58-00.bag`(这是我机器上的录制数据)循环播放;**若是实车调试,则忽略该步骤**。

rosbag play -l /apollo/data/bag/2018-04-01-09-58-00.bag

在浏览器中打开网页[http://localhost:8888](http://localhost:8888)(注意不要使用代理),进入`Dreamview`界面,点击右上方下拉框,将模式设置为`Navigation`(导航模式),如下图所示:

### 5.2 启用导航模式下的相关功能模块

点击`Dreamview`界面左侧工具栏中的`Module Controller`按钮,进入模块控制页面。**若是线下模拟测试**,选中`Relative Map`、`Navi Planning`选项,其他模块根据需要开启,如下图所示(图中显示空白文本的模块是`Mobileye`模块,需安装配置好相关硬件后才可见)):

**若是实车调试**,建议除`Record Bag`、`Mobileye`(若`Mobileye`硬件未安装,则会显示为空白文本)和`Third Party Perception`模块外,其余模块全部开启,如下图所示:

### 5.3 发送参考线数据

在`Docker`内部,使用如下命令发送**步骤三**中制作的参考线数据:

cd /apollo/modules/tools/navigator

python navigator.py ./path_2018-04-01-09-58-00.bag.txt.smoothed

下图是**线下模拟测试情形下**`Dreamview`接收到参考线后的界面,注意界面左上角已出现了百度地图界面,我们发送的参考线在百度地图中以红线方式、在主界面中以白色车道线的方式展现。

下图是**实车调试情形下的**`Dreamview`接收到参考线后的界面,注意界面左上角已出现了百度地图界面,我们发送的参考线在百度地图中以红线方式、在主界面中以黄色车道线的方式展现。

需注意以下几点:

(1) 如果发送参考线数据后,`Dreamview`界面不能正确显示参考线,可能有以下方面的原因:一是参考线数据未正确发送,解决办法是再次执行发送命令;二是浏览器缓存不一致,解决办法是按`Ctrl + R`或`F5`键刷新显示,或者清理浏览器缓存;三是`Dreamview`后台服务程序运行异常,解决办法是在`Docker`内部重启`Dreamview`后台服务,命令如下:

# Stop Dreamview and monitoring process

bash scripts/bootstrap.sh stop

# Restart Dreamview and monitoring process

bash scripts/bootstrap.sh

(2) 每次车辆重新回到起点后,无论是线下模拟测试还是实车调试情形,**均需再次发送参考线数据**。

希望对你有帮助。

百度Apollo 2.5 导航模式 使用方法相关推荐

  1. Apollo项目导航模式下的坐标转换研究

    严正声明:本文系作者davidhopper原创,未经许可,不得转载.  Apollo项目导航模式下,规划模块输出的轨迹点使用FLU车身坐标系(见我的另一篇博客<Apollo项目坐标系研究> ...

  2. 百度apollo源码学习(二)apollo中的工厂模式

    文章目录 一.什么是工厂 二. 简单工厂模式 UML类图 简单工厂模式结构 代码 一.定义抽象产品类AbstractProduct 二.定义具体产品类 三.定义工厂类和工厂方法 应用 扩展 一.扩展具 ...

  3. 解析百度Apollo自动驾驶平台

    最近对百度的自动驾驶平台Apollo项目做了一些了解.下面将我所了解到的一些信息分享给大家. Apollo项目介绍 阿波罗(Apollo)是百度发布的面向汽车行业及自动驾驶领域的合作伙伴提供的软件平台 ...

  4. 百度Apollo自动驾驶学习笔记

    Apollo学习笔记 作者:邹镇洪(清华大学车辆学院,个人主页 转到Github项目主页查看持续更新 转到Github项目主页查看持续更新 转到Github项目主页查看持续更新 本文是对百度Apoll ...

  5. 进阶无人驾驶—百度Apollo定位技术

    课程简介 课程讲解无人车的定位技术,为学习者讲解无人车定位的概念.方法以及百度Apollo无人车定位的技术,希望大家在学习的过程中有所收获,并在该平台上积极活跃贡献自己的智慧. 一.技术入门 首先讲到 ...

  6. 从零学习自动驾驶—百度Apollo高精地图

    作者|晓畅Auto 来源|知乎.深蓝AI 本篇文章主要介绍主流自动驾驶实现方案中举足轻重的一个部分--高精地图.之所以称其为主流方案,是因为总有一个奇葩,那就是特斯拉,偏偏不走寻常路.而除此之外,包括 ...

  7. 百度Apollo发布海量自动驾驶数据集,还有两项重磅挑战赛

    作者 | 费棋 近日, ApolloScape 宣布开放了大规模自动驾驶数据集. 它是 Apollo 自动驾驶项目的一个研究型项目,旨在促进自动驾驶的各方面创新,号称是世界上最大自主驾驶技术开源数据集 ...

  8. 百度Apollo无人车能力降维释放,打造智能汽车可以像拼乐高

    像搭积木一样在汽车中实现智能驾驶,是一种怎样的体验? 现在,只要你想,就可以试着操作起来了. 因为在第二届百度Apollo生态大会现场,百度Apollo全面展示了其在智能交通.智能汽车和自动驾驶领域的 ...

  9. 百度Apollo无人车能力降维释放,打造智能汽车现在可以像拼乐高

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 像搭积木一样在汽车中实现智能驾驶,是一种怎样的体验? 现在,只要你想,就可以试着操作起来了. 因为在第二届百度Apollo生态大会现场,百度 ...

最新文章

  1. linux哪些文件被更新,Linux:如何確定文件是否已被其他進程更新?
  2. nyoj 762:第k个互质数
  3. sql 删除用户失败
  4. linux下安装 QQ(wine qq 2013-2014)
  5. 绝地求生测试服画面优化软件,绝地求生大逃杀 画质优化补丁
  6. ef 排序string转int_Java排序算法——基数排序(Radix Sort)
  7. OpenGL 自定义着色器(Shaders)
  8. 程序员上班都在做什么?
  9. JAVA简单的SWING及AWT
  10. 4 大妙招,教你快速搞定复杂的系统编程!
  11. 我与CSDN的2020年
  12. oracle汉字转拼音
  13. Chrome 进阶:用扩展武装自己
  14. 【代码实现】tag-based-multi-span-extraction
  15. NoSuchMethodError: No virtual method(Ljava/io/File;)V in class Landroid/media/MediaRec
  16. 2017年10大主流编程语言最新排行榜出炉
  17. pcie读写ddr_DDR4内存与PCIe 双杀打造4秒闪开的五星神机
  18. Caused by: org.elasticsearch.action.search.SearchPhaseExecutionException报错解决
  19. 用计算机计算1357城八十九十,1357单元.doc
  20. MyEclipse中如何修改项目的编码格式

热门文章

  1. 教你批量将视频画面顺时针旋转90度
  2. Ubuntu 下安装官网最新版Mongodb (apt命令安装)
  3. Vue3使用setup时使用name属性
  4. Arcgis Engine 二次开发之属性查询
  5. 计算机软件类自然科学基金标书,国家自然科学基金标书范例.pdf
  6. mysql创建表分区详细介绍及示例
  7. nvidia命令不可用linux,如何在Linux系统上检查NVIDIA驱动程序版本
  8. 10-风险管理:如何应对暗礁风险?系统化风险管理让你安心!
  9. 与计算机图形学相关的研究论文,计算机图形学相关论文范文数据库,与计算机图形学的相关技术与相关专科毕业论文范文...
  10. web网页设计——J04HTML5+CSS大作业——传统节日--中秋节(5页)