Apollo 2.5版基于相对地图的新导航模式

电子说

1.3w人已加入

描述

Apollo项目以其优异的系统架构、完整的模块功能、良好的开源生态及规范的代码风格,受到众多开发者的喜爱和好评。不过在Apollo之前的版本中,感知、预测、导航、规划模块均依赖于高精地图,而高精地图的制作方法繁琐且不透明,对于很多开发者而言,这是一个难以逾越的障碍。因为没有高精地图,很多人只能使用Apollo提供的模拟数据包进行走马观花式的观赏,而无法在测试道路上完成真枪实弹式的实车调试,这极大降低了Apollo项目带来的便利,也不利于自动驾驶开源社区的发展和壮大。显然,Apollo项目组已注意到该问题,经过他们几个月的艰苦努力,终于在2.5版开发了一种新的基于相对地图(Relative Map)的导航模式(Navigation Mode),利用该模式可顺利实施测试道路上的实车调试。

相对地图是Apollo2.5引入的新特性。从架构层面,相对地图模块是连接高精地图(HD Map)、感知(Perception)模块和规划(Planning)模块的中间层。相对地图模块会实时生成基于车身坐标系的地图(格式与高精地图一致),并且输出供规划模块使用的参考线。从开发者友好性角度看,基于相对地图的导航模式,让开发者可以不依赖高精地图便可实施测试道路的实车调试,极大降低了开发者的使用门槛。

导航模式的基本思路是:

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

利用Apollo工具对原始轨迹进行处理得到平滑轨迹,该轨迹既用于替代路由(Routing)模块输出的导航路径,也是规划(Planning)模块用到的参考线(或称指引线、中心线,Reference line),还是生成相对地图(Relative Map)的基准线。此外,平滑轨迹还可用于替换高精地图内某些车道的参考线(默认情况下,高精地图将车道中心线作为参考线,在道路临时施工等特殊情形下该方式很不合适,需使用人工录制并平滑处理的轨迹替换特殊路段的车道参考线,当然本文不讨论该项内容);

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

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

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

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

{  一  }

Apollo 2.5版的构建

首先从GitHub网站【https://github.com/ApolloAuto/apollo】下载Apollo2.5版源代码,可以使用git命令下载,也可以直接通过网页下载压缩包。源代码下载完成并放置到合适的目录后,可以使用两种方法构建:1.在Visual Studio Code中构建(推荐);2.使用命令行构建。

当然,两种方法都有一个前提,就是在你的机器上已经顺利安装了Docker。Apollo之前版本提供了一个install_docker.sh脚本文件,因为很多开发者反映可能出错,Apollo项目组已将该文件移除。现在要安装Docker就只能参考Docker官方网站的帮助文档了。

1.1在Visual Studio Code中构建

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

Apollo

Apollo

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

Apollo

1.2在命令行中构建

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

123 cd your_apollo_project_root_dir# 从中国大陆访问,最好加上“-C”选项,直接访问中国大陆镜像服务器以获取更快的下载速度bash docker/scripts/dev_start.sh -C

 

输入如下命令进入Docker:

1 bash docker/scripts/dev_into.sh

 

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

1 bash apollo.sh build

 

整个操作如下图所示:

Apollo

1.3修改定位模块UTM区域ID

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

1 --local_utm_zone_id=10

 

修改为下述内容(这是长沙地区的UTM区域ID,中国UTM分区可参考该网页【http://www.360doc.com/content/14/0729/10/3046928_397828751.shtml】):

1 --local_utm_zone_id=49

 

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

{  二  }

参考线原始数据的采集

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

1 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内部,使用如下命令从原始数据包提取裸数据:

12 cd /apollo/modules/tools/navigatorpython 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。

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

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

 

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

Apollo

3.2对裸数据进行平滑处理

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

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

 

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

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

1 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是平滑结果,显示效果类似下图:

Apollo

{  四  }

Dreamview前端的编译及配置

Dreamview前端默认使用Baidu地图,也可修改为Google地图,但需重新编译Dreamview前端,并正确设置UTM区域,具体方法如下(**注意:如不需修改地图设置,可忽略4.1-4.2步,直接执行4.3步):

4.1更改导航地图

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

1234567 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前端:

123456 # 安装Dreamview前端依赖包,注意:该步骤只需执行一次,不必每次执行cd /apollo/modules/dreamview/frontend/yarn install# 编译Dreamview前端cd /apollobash apollo.sh build_fe

 

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

1234 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'*...(后面还有一长串,不再一一列出)

 

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

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

12345 cd /apollo/modules/dreamview/frontend/rm -rf node_modulesyarn installcd /apollobash apollo.sh build_fe

 

4.3配置UTM区域ID

打开文件[apollo项目根目录]/modules/common/data/global_flagfile.txt,在最后一行添加如下语句(这是长沙地区的UTM区域ID,中国UTM分区可参考该网页【http://www.360doc.com/content/14/0729/10/3046928_397828751.shtml】):

1 --local_utm_zone_id=49

 

{  五  }

导航模式的使用 5.1打开Dreamview并开启导航模式

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

1234567 cd your_apollo_project_root_dir# 如果没有启动Docker,首先启动,否则忽略该步bash docker/scripts/dev_start.sh -C# 进入Dockerbash docker/scripts/dev_into.sh# 启动Dreamview后台服务bash scripts/bootstrap.sh

 

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

12 # 模拟测试情形下,循环播放录制数据;实车调试情形忽略该步骤rosbag play -l /apollo/data/bag/2018-04-01-09-58-00.bag

 

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

5.2打开Dreamview导航模式选项

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

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

5.3发送参考线数据

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

12 cd /apollo/modules/tools/navigatorpython navigator.py ./path_2018-04-01-09-58-00.bag.txt.smoothed

 

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

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

需注意以下几点:

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

1234 # 停止Dreamview后台服务bash scripts/bootstrap.sh stop# 重新启动Dreamview后台服务bash scripts/bootstrap.sh

 

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

本文介绍了Apollo 2.5版基于相对地图的新导航模式,新特性将有效降低开发者的使用门槛。希望本文对大家有所帮助!

自Apollo平台开放已来,我们收到了大量开发者的咨询和反馈,越来越多开发者基于Apollo擦出了更多的火花,并愿意将自己的成果贡献出来,这充分体现了Apollo『贡献越多,获得越多』的开源精神。为此我们开设了『开发者说』板块,希望开发者们能够踊跃投稿,更好地为广大自动驾驶开发者营造一个共享交流的平台!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分