# 基于摄像头的封闭园区自动驾驶搭建--感知适配

- [基于摄像头的封闭园区自动驾驶搭建--感知适配](#基于摄像头的封闭园区自动驾驶搭建--感知适配)
  - [概览](#概览)
  - [前提条件](#前提条件)
  - [配置文件的修改](#配置文件的修改)
  - [启动Camera感知](#启动camera感知)
      - [1. 启动can卡](#1-启动can卡)
      - [2. 编译项目,启动Dreamview](#2-编译项目启动dreamview)
      - [3. 启动所需模块](#3-启动所需模块)
      - [4. 检查各模块channel是否正确](#4-检查各模块channel是否正确)
      - [5. 启动Camera感知](#5-启动camera感知)
      - [6. 验证Camera感知效果](#6-验证camera感知效果)
  - [NEXT](#next)
  - [常见问题](#常见问题)
      - [1. 感知的输出帧率达不到10帧](#1-感知的输出帧率达不到10帧)
      - [2. 感知的障碍物位置与实际障碍物误差较大](#2-感知的障碍物位置与实际障碍物误差较大)


## 概览
该用户手册旨在帮助用户完成摄像头感知适配,实现Camera感知

## 前提条件

 1. 正确完成了[循迹搭建--车辆循迹演示](../Waypoint_Following/start_waypoint_following_cn.md)。

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

## 配置文件的修改

|序号 | 待修改文件 | 修改内容 | 
|---|---|---|
|  1 | `modules/common/data/global_flagfile.txt` |  添加`--half_vehicle_width=0.43` |

## 启动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` | 确保能正常输出数据,帧率稳定在15HZ左右 |
|`/apollo/sensor/camera/front_12mm/image` | 确保能正常输出数据,帧率稳定在15HZ左右 |
|`/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. 验证Camera感知效果
查看车前方运动的人或者自行车(自行车上要有人),在DreamView上查看障碍物颜色以及位置速度信息(自行车青蓝色,行人黄色,车辆绿色),如下图所示:

![camera_adaption_dreamview_vehicle](images/camera_adaption_dreamview_vehicle.png)

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

![camera_adaption_dreamview_obstacle1](images/camera_adaption_dreamview_obstacle1.png)

![camera_adaption_dreamview_obstacle2](images/camera_adaption_dreamview_obstacle2.png)

如果在dreamview上能看到障碍物并且`/apollo/perception/obstacles`有障碍物信息,则开环测试通过。

## NEXT
现在,您已经完成摄像头感知适配,接下来可以开始[封闭园区自动驾驶搭建--规划适配](../Lidar_Based_Auto_Driving/planning_configuration_cn.md)

## 常见问题

### 1. 感知的输出帧率达不到10帧
建议使用 `bash apollo.sh build_opt_gpu` 编译Apollo工程

### 2. 感知的障碍物位置与实际障碍物误差较大
* 确认localization信号状态,保证`/apollo/sensor/gnss/best_pose`中`sol_type` 选项显示为`NARROW_INT`
* 保证各个传感器外参文件准确