环境:
本文讲解的是如何通过数据集制作简易的高精地图(RelativeMap 和 Routing 地图)。RelativeMap 地图的制作实际是为车辆的行驶绘制一条参引线,并把参引线的数据主题发布出去,使用该主题的模块是 relative_map,relative_map 模块把参引线和计算出的车道线信息封装成主题发布,planning 模块订阅该主题信息进行路径规划。Routing 地图用于 routing 模块, routing 模块关注起点到终点的长期路径,根据起点到终点之间的道路,选择一条最优路径。
可以通过仿真或者现实环境来录制获取数据集,使用以下指令进行录制
cyber_recorder record -a
本文以demo_3.5.record为例,可以直接在https://github.com/ApolloAuto/apollo/releases/download/v3.5.0/demo_3.5.record进行下载,下载好后放到/apollo/data/bag/文件夹。
终端上执行 docker start apollo_dev 启动 apollo 容 器 (如果是第一次创建并启动容器,需要执行 ./docker/scripts/dev_start.sh ), 再执行./docker/scripts/dev_into.sh 进入 docker 容器。
进入容器后执行
./bazel-bin/modules/tools/navigator/record_extractor data/bag/demo_3.5.record
此时在当前目录下会产生一个路径文件,命名为path_demo_3.5.record.txt,内容如下:
运行以下指令查看生成的路径
./bazel-bin/modules/tools/navigator/viewer_raw path_demo_3.5.record.txt
注意:可能会出现以下警告提示
/apollo/./bazel-bin/modules/tools/navigator/viewer_raw.runfiles/apollo/modules/tools/navigator/viewer_raw.py:43: UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
plt.show()
解决方法:
sudo apt-get update
sudo apt-get install tcl-dev tk-dev python3-tk
重新执行./bazel-bin/modules/tools/navigator/viewer_raw path_demo_3.5.record.txt 后会
正常显示如下:
对路径进行平滑处理,200 是平滑长度的参数,如果平滑失败,请尝试更改此参数以使
平滑通过。首选数字在 150 到 200 之间,处理后会产生一个新的路径文件path_demo_3.5.record.txt.smoothed。
bash modules/tools/navigator/smooth.sh path_demo_3.5.record.txt 200
验证平滑处理结果的正确性
./bazel-bin/modules/tools/navigator/viewer_smooth path_demo_3.5.record.txt path_demo_3.5.record.txt.smoothed
若s-theta 和s-s数据为空的话,则表示生成的数据不正常(如下图),解决方法可参考这里。
修改之后再重新执行
bash modules/tools/navigator/smooth.sh path_demo_3.5.record.txt 200
./bazel-bin/modules/tools/navigator/viewer_smooth path_demo_3.5.record.txt path_demo_3.5.record.txt.smoothed
接着开启新的终端,启动Apollo,在浏览器中访问 http://localhost:8888 显示 DreamView 界面
./scripts/bootstrap.sh start
回放录制的数据包
cyber_recorder play -f data/bag/demo_3.5.record --loop
将产生的路径文件作为主题发布出去,供 relative_map 模块订阅使用,命令如下:
bash scripts/navigator.sh path_demo_3.5.record.txt.smoothed
base_map、sim_map 和 routing_map 的区别:
获取地图数据采集时产生的数据包路径,执行后会在当前目录下生成名为demo_3.5.txt的文件
./bazel-bin/modules/tools/map_gen/extract_path demo_3.5.txt data/bag/demo_3.5.record
生成 base_map,输出的结果是以 map_开头的.txt 格式的虚拟车道线数据文件
./bazel-bin/modules/tools/map_gen/map_gen demo_3.5.txt
修改生成的虚拟车道线数据文件名称为base_map.txt,modules/map/data目录下创建demo_3.5文件夹,将base_map.txt放置到demo_3.5文件夹内再执行以下指令生成 sim_map。
./bazel-bin/modules/map/tools/sim_map_generator --map_dir=modules/map/data/demo_3.5 --output_dir=modules/map/data/demo_3.5
注意:map_gen.py 是生成三条车道的虚拟车道线数据文件,要想生成一条车道和两条车道,请使用 map_gen_single_lane.py 和 map_gen_two_lanes_right_ext.py。
routing_map 用于 routing 模块,如果没生成 routing_map,则无法正常使用 routing 模块。
bash scripts/generate_routing_topo_graph.sh --map_dir modules/map/data/demo_3.5
会生 routing_map.bin 和 routing_map.txt两个文件。
启动Apollo后,在浏览器中访问 http://localhost:8888 显示 DreamView 界面,完成后 DreamView 显示如下:
【1】Apollo详解之高精地图模块——相对地图模块
【2】Apollo详解之地图模块———制作高精地图
【3】开发者说|Apollo高精度地图离线制作
【4】开发者说|Apollo简易制图过程
【5】Apollo低速微型车自动驾驶套件软件使用手册