# 基于摄像头的封闭园区自动驾驶搭建--自动驾驶演示


- [基于摄像头的封闭园区自动驾驶搭建--自动驾驶演示](#基于摄像头的封闭园区自动驾驶搭建--自动驾驶演示)
  - [前提条件](#前提条件)
  - [概览](#概览)
  - [启动流程](#启动流程)
      - [1. 启动can卡](#1-启动can卡)
      - [2. 编译项目,启动Dreamview](#2-编译项目启动dreamview)
      - [3. 启动所需模块](#3-启动所需模块)
      - [4. 检查各模块channel是否正确](#4-检查各模块channel是否正确)
      - [5. 启动Camera感知](#5-启动camera感知)
      - [6. 感知验证](#6-感知验证)
      - [7. 启动 Planning、Prediction、Routing、Control模块](#7-启动-planningpredictionroutingcontrol模块)
      - [8. 验证Planning、Prediction、Routing、Control模块是否启动成功](#8-验证planningpredictionroutingcontrol模块是否启动成功)
      - [9. 启动自动驾驶](#9-启动自动驾驶)
  - [常见问题](#常见问题)
      - [1. 自动驾驶过程中车轮来回摆动,有画龙现象](#1-自动驾驶过程中车轮来回摆动有画龙现象)
      - [2. 车辆换道、停止等效果不理想](#2-车辆换道停止等效果不理想)


## 前提条件

1. 正确完成了[基于摄像头的封闭园区自动驾驶搭建--感知设备集成](sensor_integration_cn.md)。

2. 正确完成了[基于摄像头的封闭园区自动驾驶搭建--感知适配](perception_configuration_cn.md)。

3. 正确完成了[封闭园区自动驾驶搭建--虚拟车道线制作](../Lidar_Based_Auto_Driving/virtual_lane_generation_cn.md)。

4. 正确完成了[封闭园区自动驾驶搭建--规划适配](../Lidar_Based_Auto_Driving/planning_configuration_cn.md)。

5. 确保在道路平整、车少人少等相对安全的情况下实验。

6. 确保至少两人操作,一人操作工控机,一人操作遥控器,做好随时接管准备。


## 概览
该用户手册旨在帮助用户完成基于Camera感知的封闭园区自动驾驶

## 启动流程

### 1. 启动can卡

进入can卡目录启动can卡,用以下命令启动

    cd ~/SocketCan/
    bash start.sh


### 2. 编译项目,启动Dreamview
进入docker环境,用gpu编译项目,启动DreamView 

    cd /apollo
    bash docker/scripts/dev_start.sh
    bash docker/scripts/dev_into.sh
    bash apollo.sh build_opt_gpu
    bash scripts/bootstrap.sh
 
### 3. 启动所需模块
在浏览器中打开`(http://localhost:8888)`,选择模式为`Dev Kit Debug`, 根据车辆铭牌信息选择对应的车型(详情见下表),并选择相应高精地图,在module Controller标签页启动Canbus、Camera、GPS、Localization、Transform模块。

| 铭牌信息 | 车型选择 | 
|---|---|
| Apollo D-KIT Lite | dev_kit |
| Apollo D-KIT Standard  | dev_kit_standard |
| Apollo D-KIT Advanced(NE-S)| dev_kit_advanced_ne-s |
| Apollo D-KIT Advanced(SNE-R) | dev_kit_advanced_sne-r  |

![camera_adaptation_dreamview](images/camera_adaptation_dreamview.png)

###  4. 检查各模块channel是否正确
在docker中输入`cyber_monitor`命令并检查以下channel(使用`上下方向键`选择channel,使用`右方向键`查看channel详细信息。关于cyber_monitor更详细使用,请参考[CyberRT_Developer_Tools](../../cyber/CyberRT_Developer_Tools.md)):
	
|channel_name | 检查项目 | 
|---|---|
| `/apollo/localization/pose`| 确保能正常输出数据 | 
|`/apollo/sensor/gnss/best_pose` | 确保能正常输出数据、`sol_type:` 选项显示为`NARROW_INT`   |
| `/apollo/sensor/camera/front_6mm/image` | 确保能正常输出数据、帧率在15帧左右|
|`/tf`|确保能正常输出数据|
|`/tf_static`|确保能正常输出数据|
|`/apollo/canbus/chassis`|确保能正常输出数据|
|`/apollo/canbus/chassis_detail`|确保能正常输出数据|

### 5. 启动Camera感知

在dreamview中启动`Camera Perception`模块,使用`cyber_monitor`查看`/apollo/perception/obstacles`是否正常输出,并在dreamview上查看障碍物信息:
![camera_adaptation_dreamview](images/camera_adaptation_dreamview_start_perception.png)

### 6. 感知验证
使用`cyber_monitor`查看`/apollo/perception/obstacles`是否正常输出,并在DreamView上查看障碍物信息:查看车前方10米处运动的人或者自行车(自行车上要有人),在DreamView上查看障碍物颜色以及位置速度信息(自行车青蓝色,行人黄色,车辆绿色),如下图所示:

![camera_demonstration_dreamview_obstacle](images/camera_demonstration_dreamview_obstacle.png)

`/apollo/perception/obstacles`的数据如下图所示:

![camera_demonstration_perception_obstacle1](images/camera_demonstration_perception_obstacle1.png)

![camera_demonstration_perception_obstacle2](images/camera_demonstration_perception_obstacle2.png)

确保在Dreamview上能看到障碍物并且`/apollo/perception/obstacles`有障碍物信息。

### 7. 启动 Planning、Prediction、Routing、Control模块
在Module Controller标签页启动Planning、Prediction、Routing、Control模块。
![lidar_adaptation_dreamview1](images/camera_demonstration_dreamview.png)

在Routing Editor标签中点击Add Point of Interest按钮添加一个point, 然后选择Send Routing Request按钮发送添加的routing点

![lidar_adaptation_dreamview1](images/camera_demonstration_dreamview1.png)

### 8. 验证Planning、Prediction、Routing、Control模块是否启动成功
从DreamView中查看会出现一个蓝色的线以及一个红色的stop标志。如下图所示:

![camera_demonstration_dreamview_planning1](images/camera_demonstration_dreamview_planning1.png)

在车前方存在人或者自行车(车上有人)时,在Tasks标签页查看Planning轨迹线,如下图所示:

![camera_demonstration_dreamview_planning2](images/camera_demonstration_dreamview_planning2.png)

在docker环境中输入命令`cyber_monitor`并查看Planning channel信息: 

![camera_demonstration_planning_data](images/camera_demonstration_planning_data.png) 

如果出现上图所示轨迹线和topic信息,表示规划模块适配和开环测试通过,否则继续查看log信息进行调试。
### 9. 启动自动驾驶
在附近没有人员和车的情况下,遥控器下放权限并在Tasks标签页中点击Start Auto使车进入自动驾驶状态,在车自动驾驶这个过程中做好随时用遥控器接管,确保安全的准备。

## 常见问题
### 1. 自动驾驶过程中车轮来回摆动,有画龙现象
这种情况一般是车辆动力学标定没有做好,建议重新进行动力学标定
### 2. 车辆换道、停止等效果不理想
- 在保证感知、定位稳定的前提下,可以尝试修改planning配置文件中的相关参数进行调整,详情参考[封闭园区自动驾驶搭建--规划适配](../Lidar_Based_Auto_Driving/planning_configuration_cn.md)