# Autoware Docker安裝教學
<style>
html, body, .ui-content {
background-color: #333;
color: #ddd;
}
body > .ui-infobar {
display: none;
}
.ui-view-area > .ui-infobar {
display: block;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
color: #ddd;
}
.markdown-body h1,
.markdown-body h2 {
border-bottom-color: #ffffff69;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #fff;
}
.markdown-body img {
background-color: transparent;
}
.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
color: white;
border-left: 2px solid white;
}
.expand-toggle:hover,
.expand-toggle:focus,
.back-to-top:hover,
.back-to-top:focus,
.go-to-bottom:hover,
.go-to-bottom:focus {
color: white;
}
.ui-toc-dropdown {
background-color: #333;
}
.ui-toc-label.btn {
background-color: #191919;
color: white;
}
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: white;
border-left: 1px solid white;
}
.markdown-body blockquote {
color: #bcbcbc;
}
.markdown-body table tr {
background-color: #5f5f5f;
}
.markdown-body table tr:nth-child(2n) {
background-color: #4f4f4f;
}
.markdown-body code,
.markdown-body tt {
color: #eee;
background-color: rgba(230, 230, 230, 0.36);
}
a,
.open-files-container li.selected a {
color: #5EB7E0;
}
</style>
> [color=#907bf7] [name=梓育(moon.starsky37@gmail.com)] [time=Wed, May 6, 2020 18:00 PM]

----
Outline
[TOC]
## Autoware 為何
Autoware.AI 是基於ROS的開源軟體,可讓自動駕駛汽車在私人區域、城市道路和高速公路上進行測試。其license為Apache 2.0,並開源在GitLab上:[連結](https://gitlab.com/autowarefoundation/autoware.ai)
* 主要功能
> Localization
Object detection
Driving control
3D map generation and sharing
* 軟體架構

## 安裝環境與需求for linux
在開始安裝Autoware前,請先確認硬體設備或驅動環境是否有符合官方的spec,主要的幾個常用規格列表如下:
* Generic x86
* CPU: Intel Core i7 (preferred), Core i5, Atom
* 記憶體: 16GB to 32GB of main memory
* 儲存空間: More than 30GB of SSD
* GPU: NVIDIA GTX GeForce GPU (980M or higher performance)
* Operating System and driver
* Ubuntu 16.04
* CUDA 10.2 (在這邊我們不會特別說明如何安裝,請參照[Nvida官網教學](https://developer.nvidia.com/cuda-downloads)
可以用`$ nvidia-smi` 檢查自己的安裝結果

## Autoware 安裝流程
由於本篇文章是在Ubuntu底下,利用Docker安裝Autoware,所以安裝時的指令會以[RPM](https://zh.wikipedia.org/wiki/RPM%E5%A5%97%E4%BB%B6%E7%AE%A1%E7%90%86%E5%93%A1)方式去做安裝。
### 安裝Docker
由於Autoware在使用Docker安裝時,會使用到gpus的參數,所以如果使用者之前就有安裝過Docker但版本低於19.03的話,則需要安裝[NVIDIA Docker Runtime](https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(version-2.0)),而在這邊的安裝方式則為刪除舊有的版本,並安裝一個新的docker。
<iframe width="100%" height="1000" src="https://docs.docker.com/engine/install/ubuntu" frameborder="0"></iframe>
sudo apt-get install docker-ce=5:19.03.13~3-0~ubuntu-focal docker-ce-cli=5:19.03.13~3-0~ubuntu-focal containerd.io
安裝完之後驗證 docker 是否可以抓到顯卡
```
$ sudo docker run --gpus all nvidia/cuda nvidia-smi
```
### 利用Docker安裝 Autoware
為了使用 Autoware已經事先編譯過的 Docker Containers 我們需要先將它提供的Docker複製進我們的工作環境
```
$ git clone https://gitlab.com/autowarefoundation/autoware.ai/docker.git
$ cd docker/generic
```
接著我們要使用其中的 run.sh 來啟動Docker container
我們可以先看看他需要那些參數
```
$ ./run.sh -h
```
由於我們需要使用的環境會需要使用GPU來開啟環境,而且比較新版的Autoware有些功能更多元,且才有被成功編譯到有CUDA的版本,所以我們在這邊使用的指令為:
```
$ sudo ./run.sh -t 1.12.0 -r kinetic -c on -s
Using options:
ROS distro: kinetic
Image name: autoware/autoware
Tag prefix: 1.12.0
Cuda support: on
Pre-release version: off
UID: <1000>
Launching autoware/autoware:1.12.0-kinetic-cuda
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
```

```
$ roslaunch runtime_manager runtime_manager.launch
```
### Autoware Test
最後我們測試看看我們的Autoware是否能顯示我們的資料
官方有提供一些Demo用資料(3D map and ROSBAG sample data)
我們先把他載下來
```
$ # Sample 3D pointcloud/vector map data.
$ wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_data.tar.gz
```
Note:
因為環境是用Docker裝的,下載下來的檔案要記得要放到可取用的資料夾,如會被剛剛 run.sh創建的shared_dir資料夾
```
# 解壓縮
$ tar zxfv sample_moriyama_data.tar.gz
```
* 裡面的資料結構如下

* 點選Map中Point Cloud的Ref。
將data/map/pointcloud_map裡的資料(*.pcd)全選放入
* 點選Map中Vector Map的Ref。
將data/map/vector_map裡的資料(*.csv)全選放入
* 點選Map中TF的Ref。
將data/tf中的tf.launch放入
* 然後點選Map中的Point Cloud, Vector Map, TF三個按鈕讓Autoware讀取資料。
* 最後在點選RViz按鈕開啟視窗,如果有成功看到如下畫面代表已經安裝完成。

Note:
若是用rosbag的功能,則使用
```
$ # Sample data (LiDAR: VELODYNE HDL-32E, GNSS: JAVAD GPS RTK Delta 3) in ROSBAG format or ROSBAG2 format.
$ wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.tar.gz
or
$ wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.bag2.tar.gz
# 解壓縮
$ tar zxfv sample_moriyama_150324.tar.gz
```
# 其他使用的指令
<iframe width="100%" height="1000" src="https://sdi4apps.eu/2016/03/journey-to-creating-drivenet-maps-open-data-real-time-road-maps-for-autonomous-driving-from-3d-lidar-point-clouds/" frameborder="0"></iframe>
## 安裝環境與需求 for win10
### 安裝docker
安裝docker for win10 並勾選Expose daemon on tcp://localhost:2375 without TLS

```bash=
~/docker/generic/run.sh -t 1.12.0 -r kinetic -c off -s
roslaunch runtime_manager runtime_manager.launch
```

#### win10 ssh
win+I 開啟「應用程式與功能」
「選用功能」->「新增功能」->「OpenSSH Server」
In PowerShell (管理員權限)
```
Start-Service sshd
Get-Service sshd
```
成功

建議進入後在開啟wsl來操作

## Other Autoware Demo with filter
https://www.youtube.com/watch?v=3UO1K0lD2Qk
## Referance
- https://github.com/CPFL/Autoware-Manuals/blob/master/en/Autoware_UsersManual_v1.1.md#chapter-2---ros-and-autoware
- https://gitlab.com/autowarefoundation/autoware.ai/autoware/-/wikis/ROSBAG-Demo
- https://hub.docker.com/r/autoware/autoware/tags
- https://qiita.com/kameyama-eiji/items/0b3f914dbe03a83a1231
# Autoware universe
* Installation: https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/docker-installation/
Note: not using ansible
* rocker : https://memoteki.net/archives/4471
* CUDA Error: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#ubuntu
* Using commands:
```
cd project
git clone https://github.com/autowarefoundation/autoware.git
rocker --nvidia --x11 --user --volume $HOME/project/autoware --volume $HOME/autoware_map -- ghcr.io/autowarefoundation/autoware-universe:latest-cuda
```