apollo之高精地图

介绍

apollo的高精度地图采用了opendrive格式,opendrive是一个统一的地图标准,这样保证了地图的通用性。

apollo之map模块

代码目录结构:

├── data           // 生成好的地图
│   └── demo
├── hdmap          // 高精度地图
│   ├── adapter    // 从xml文件读取地图(opendrive保存格式为xml)
│   │   └── xml_parser
│   └── test-data
├── pnc_map        // 给规划控制模块用的地图
│   └── testdata
├── proto          // 地图各元素的消息格式(人行横道,车道线等)
├── relative_map   // 相对地图
│   ├── common
│   ├── conf
│   ├── dag
│   ├── launch
│   ├── proto
│   ├── testdata
│   │   └── multi_lane_map
│   └── tools
├── testdata       // 测试数据?
│   └── navigation_dummy
└── tools          // 工具

apollo 高精地图

Map()

message Header {
  optional bytes version = 1;   //地图版本
  optional bytes date = 2;      //地图时间
  optional Projection projection = 3; //投影方法
  optional bytes district = 4;        //区
  optional bytes generation = 5;      //
  optional bytes rev_major = 6;       //
  optional bytes rev_minor = 7;       //
  optional double left = 8;           //左
  optional double top = 9;            //上
  optional double right = 10;         //右
  optional double bottom = 11;        //底
  optional bytes vendor = 12;         //供应商
}

Lane()

车道结构:

message Lane {
  optional Id id = 1;         //编号
  optional Curve central_curve = 2;     //中心曲线
  optional LaneBoundary left_boundary = 3;          //左边界
  optional LaneBoundary right_boundary = 4;         //右边界
  optional double length = 5;                       //长度
  optional double speed_limit = 6;           //速度限制
  repeated Id overlap_id = 7;                //重叠区域id
  
  repeated Id predecessor_id = 8;           //前任id
  repeated Id successor_id = 9;             //继任者id

 
  repeated Id left_neighbor_forward_lane_id = 10;    //左边相邻前方车道id
  repeated Id right_neighbor_forward_lane_id = 11;   //右边相邻前方车道id
enum LaneType {               //车道类型
    NONE = 1;                  //无
    CITY_DRIVING = 2;           //城市道路
    BIKING = 3;                 //自行车
    SIDEWALK = 4;               //人行道
    PARKING = 5;                //停车
  };
  optional LaneType type = 12;         //车道类型
enum LaneTurn {
    NO_TURN = 1;        //直行
    LEFT_TURN = 2;      //左转弯
    RIGHT_TURN = 3;     //右转弯
    U_TURN = 4;         //掉头
  };
  optional LaneTurn turn = 13;          //转弯类型
repeated Id left_neighbor_reverse_lane_id = 14;       //左边相邻反方向车道id
  repeated Id right_neighbor_reverse_lane_id = 15;      //右边相邻反方向车道id

  optional Id junction_id = 16;

  repeated LaneSampleAssociation left_sample = 17;      //中心点与最近左边界之间的关联
  repeated LaneSampleAssociation right_sample = 18;     //中心点与最近右边界之间的关联
enum LaneDirection {
    FORWARD = 1;     //前
    BACKWARD = 2;    //后,潮汐车道借用的情况?
    BIDIRECTION = 3;  //双向
  }
  optional LaneDirection direction = 19;   //车道方向
 
  repeated LaneSampleAssociation left_road_sample = 20;    //中心点与最近左路边界之间的关联
  repeated LaneSampleAssociation right_road_sample = 21;    //中心点与最近右路边界之间的关联
}

Road()

message RoadSection {
  optional Id id = 1;
  // 本节所包含的车道
  repeated Id lane_id = 2;
  // 截面边界
  optional RoadBoundary boundary = 3;
}

// 道路是车道、道路边界等交通要素的集合。
// 它提供道路的一般信息。
message Road {
  optional Id id = 1;
  repeated RoadSection section = 2;

  // 如果车道不在路口,路口id为空。
  optional Id junction_id = 3;
}

具体生成方法

确保在docker容器中

先进入apollo目录下

1. 启动docker

bash docker/scripts/dev_start.sh

apollo 配置spring相关配置_apollo 配置spring相关配置

2. 开始docker

bash docker/scripts/dev_into.sh

apollo 配置spring相关配置_运维_02

3. 在docker中编译apollo源码

bash apollo.sh build_cpu

apollo 配置spring相关配置_容器_03

启动DreamView

./scripts/bootstrap.sh [start | stop | restart]

apollo 配置spring相关配置_python_04

打开浏览器

:http://localhost:8888/

apollo 配置spring相关配置_python_05

下载预录资源

python3 rosbag_helper.py demo_3.5.record

apollo 配置spring相关配置_python_06

cyber_recorder play -f demo_3.5.record -l

apollo 配置spring相关配置_docker_07


界面显示如图

apollo 配置spring相关配置_apollo 配置spring相关配置_08

生成好的地图

参考

查看当前轨迹

python modules/tools/map_gen/plot_path.py test.csv

apollo 配置spring相关配置_apollo 配置spring相关配置_09

生成地图

python modules/tools/map_gen/map_gen.py points

apollo 配置spring相关配置_apollo 配置spring相关配置_10


得到

apollo 配置spring相关配置_容器_11

查看地图

python modules/tools/mapshow/mapshow.py -m map_test.csv.txt

apollo 配置spring相关配置_apollo 配置spring相关配置_12

apollo 地图生成

base_map.bin
python modules/tools/create_map/convert_map_txt2bin.py -i mymap/map_test.csv.txt -o mymap/base_map.bin

-o:存放路径

apollo 配置spring相关配置_容器_13

sim_map.bin
./bazel-bin/modules/map/tools/sim_map_generator -map_dir=mymap/ -output_dir=mymap/

apollo 配置spring相关配置_apollo 配置spring相关配置_14

routing_map.bin
./bazel-bin/modules/routing/topo_creator/topo_creator -map_dir=mymap/ --flagfile=modules/routing/conf/routing.conf

生成地图另外一种方法

参考

bash /apollo/scripts/create_map_from_xy.sh --xy  test.csv --map_name test
/apollo/bazel-bin/modules/map/tools/bin_map_generator --map_dir=/apollo/modules/map/data/test --output_dir=/apollo/modules/map/data/test

其它

linux 文件解锁

sudo chmod -R 777 路径

pip install 豆瓣源

pip install pyinstaller -i http://pypi.douban.com/simple --trusted-host pypi.douban.com