# 封闭园区自动驾驶搭建--虚拟车道线制作

- [封闭园区自动驾驶搭建--虚拟车道线制作](#封闭园区自动驾驶搭建--虚拟车道线制作)
  - [前提条件](#前提条件)
  - [主要步骤](#主要步骤)
    - [虚拟车道线数据包录制](#虚拟车道线数据包录制)
    - [使用虚拟车道线云服务生成虚拟车道线](#使用虚拟车道线云服务生成虚拟车道线)
      - [1. 上传数据至BOS](#1-上传数据至bos)
      - [2. 提交虚拟车道线生成任务](#2-提交虚拟车道线生成任务)
      - [3. 获取虚拟车道线并添加到apollo中](#3-获取虚拟车道线并添加到apollo中)
  - [NEXT](#next)
  - [常见问题](#常见问题)
    - [1. 在BOS中没有生成local_map文件夹](#1-在bos中没有生成local_map文件夹)
    - [2. 在BOS中生成的地图有问题](#2-在bos中生成的地图有问题)
    - [3. 在BOS没有生成任何地图数据](#3-在bos没有生成任何地图数据)

## 前提条件

 - 完成了[基于激光雷达的封闭园区自动驾驶搭建--感知设备标定](sensor_calibration_cn.md)
 - 完成了[开通云服务账号向导](../../Apollo_Fuel/apply_fuel_account_cn.md)
 
## 主要步骤

### 虚拟车道线数据包录制

将想要自动驾驶的区域提前按要求录制数据包,作为后面生成虚拟车道线的输入数据,注意目前限制数据包大小不要超过5G。

- 需要的channel信息如下所示:

|序号 | topic | 
|---|---|
|1|/apollo/localization/pose | 
|2|/apollo/sensor/gnss/odometry|
|3|/apollo/sensor/gnss/ins_stat|
|4|/apollo/sensor/lidar16/compensator/PointCloud2|

- 为获取上述`channel`,需要启动`GPS`、`Localization`、`Velodyne`三个模块,`GPS`、`Localization`模块的启动请参考定位模块配置文档,`Velodyne`模块的启动请参考感知传感器集成文档。由于GNSS设备的限制,`/apollo/sensor/gnss/odometry`、`/apollo/sensor/gnss/ins_stat`这两个`channel`不能由GNSS设备直接给出,需要借助`/apollo/modules/tools/sensor_calibration/`下的两个脚本工具。在`localization`模块正常启动且输出`/apollo/localization/pose`数据时,在不同终端分别执行`python modules/tools/sensor_calibration/ins_stat_publisher.py`、`python modules/tools/sensor_calibration/odom_publisher.py`两个命令,便可以分别产生`/apollo/sensor/gnss/ins_stat`、`/apollo/sensor/gnss/odometry`这两个`channel`。

- 为了节省数据空间,这里建议用户在docker环境使用命令行录制数据包,不要使用`Recorder`模块录制,录制命令如下

```
 cyber_recorder record -c /apollo/localization/pose /apollo/sensor/gnss/odometry /apollo/sensor/gnss/ins_stat /apollo/sensor/lidar16/compensator/PointCloud2
```



**注意**:在执行`sensor_calibration/ins_stat_publisher.py`脚本前,请务必检查`/apollo/sensor/gnss/best_pose`中GPS信号质量,确保GPS信号质量为`NARROW_INT`时,才可以使用`ins_stat_publisher.py`脚本。在录制数据前,应首先确保`modules/localization/conf/localization.conf`文件中的`enable_lidar_localization`设置为`false`,待地图制作完成后如果需要msf定位,再修改为true。

### 使用虚拟车道线云服务生成虚拟车道线

#### 1. 上传数据至BOS

**注意:** 必须使用在Dreamland中提交用户账号信息的 Bos bucket,确认`Bos容器名`、`Bos服务区域`、`Bos访问秘钥`、`Bos访问私钥`正确。

在BOS bucket中新建目录virtual_lane,作为后续云标定服务读取数据的`Input Data Path`,把前面录制的数据包以及lidar_GNSS外参文件拷贝至该目录。目录结构如图所示:

![virtual_lane_tree1](images/virtual_lane_tree1.png)

#### 2. 提交虚拟车道线生成任务

点击左侧菜单栏的「Apollo Fuel」里的「任务」菜单项,进入任务管理页面,点击新建任务按钮,在弹出的下拉框中选择虚拟车道线服务,如下图所示:

![virtual_lane_fuel](images/virtual_lane_fuel.png)

填写输入数据路径(在本例中为"virtual_lane")、输出数据路径(地图生成路径此例中为"result")、区域编号(根据当地实际情况填写,本例中所在地方为北京应填50)、雷达类型(是配置的/apollo/sensor/lidar16/compensator/PointCloud2这个channel的雷达类型,此例中是lidar16)、车道宽度(车道线的宽度,此例中为3.3)、额外ROI拓展(车道线的边界到真实道路边缘的距离,此例中为0.5),最后点击提交任务按钮提交。
**注意**:bos需要有写权限,并且传入的区域编号应和录制数据包时localiztion.conf配置文件中的local_utm_zone_id配置项的值一致才行。

#### 3. 获取虚拟车道线并添加到apollo中

任务完成后,将在注册的邮箱中收到一封邮件:

![virtual_lane_email](images/virtual_lane_email.png)

如果邮件内容为上图所示则表示虚拟车道线成功生成,查看bos上的Output Data Path(此例中为result),此path的目录结构如下图所示:

![virtual_lane_tree2](images/virtual_lane_tree2.png)

将上图中的2020-01-16-08-08-42整个文件夹拷贝到/apollo/modules/map/data/下,重命名为自己的地图名字(例如gongyuan),重启DreamView即可在地图下拉框中看到自己刚添加的地图。
## NEXT
现在,您已经完成虚拟车道线制作,根据您使用的是基于Lidar的感知方案还是基于Camera的感知方案,接下来可以开始[基于激光雷达的封闭园区自动驾驶搭建--感知适配](perception_configuration_cn.md)或[基于摄像头的封闭园区自动驾驶搭建--感知适配](../Camera_Based_Auto_Driving/perception_configuration_cn.md)

## 常见问题
### 1. 在BOS中没有生成local_map文件夹
* 确认/apollo/modules/localization/conf/localization.conf文件中`--local_utm_zone_id` 选项和提交虚拟车道线云服务的时传入的zone_id一致。
### 2. 在BOS中生成的地图有问题
* 在虚拟车道线数据包录制过程中,车只能沿着预定道路走一遍且不能闭环。
### 3. 在BOS没有生成任何地图数据
* 确认提交账号时给的BOS信息正确。