Ubuntu18.04+CUDA10.0でZEDのROSパッケージを動かす

#　はじめに

ZEDのROSパッケージを実際に動かしてみました．
その時に，nvidia関連で大変苦労したので，メモ．
nvidia関連は[ここ](https://medium.com/repro-repo/install-cuda-10-1-and-cudnn-7-5-0-for-pytorch-on-ubuntu-18-04-lts-9b6124c44cc)を参考にしました．

#　動作環境
仕様は以下の表にまとめています．

| 項目 | 値 |
|:-:|:-:|
| OS | 18.04.3 LTS (Bionic Beaver) |
| kernel | 5.0.0-29-generic |
| ROS | melodic |
| CPU | core i7-6820HQ |
| RAM | 16GB |
|GPU|NVIDIA Quadro M1000M |

#　nvidia driverのインストール．
まず，最初にnvidia driverをインストールする．
GUIで操作する場合は，`ソフトウエアとアップデート`→`追加のドライバー`から，nvidia-driver-410を選択．
選択し，`変更の適用`を押すと，自動でドライバーをインストールしてくれる．適用には，結構時間がかかる．
![driver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467962/e2034f7a-b922-621f-e02f-e4119b40e025.png)

もしくは，

```
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-driver-410
```
でインストールできる．

ここまでできたら，一旦再起動．

#　deb[local]形式で，CUDA10.0インストール
ターミナルで`nvidia-smi`コマンドを打ち，現在のnvidia-driverのバージョンが，410.XXになっていることを確認．

[ここ](https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal)の配布サイトから，CUDA10.0をdeb[local]形式でダウンロード．
こんな感じで選択しました．
![cuda10-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467962/33cbcd79-71a4-7866-d15d-04a946d6ff43.png)


ダウンロードした，ディレクトリに移動．
以下のコマンドを順に実行

```
sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda
```
ここまでできたら，一旦再起動．
上記でインストールできる場合もあるが、何故か、nvidiadriverが上書きされる場合があるので、下記のように指定してあげたほうが良さそう（2020/06/20）

```
sudo apt-get install cuda-toolkit-10-0
```
次に，PATHの設定．

```
gedit ~/.bashrc
```
でbashファイルを開き，以下の2行を追加．

```
export PATH="/usr/local/cuda-10.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.0/lib64:/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
```

bashファイルを再読込（PATHを通す）．

```
source ~/.bashrc
```
ここまでできたら，一旦再起動．

`nvidia-smi`で確認．
以下のように，DriverとCUDAのVersionが表示されれば，OK．

```
cat02@dmgs-TPad:~$ nvidia-smi 
Wed Sep 25 15:47:19 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.129      Driver Version: 410.129      CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro M1000M       On   | 00000000:01:00.0  On |                  N/A |
| N/A   44C    P0    N/A /  N/A |    805MiB /  2002MiB |      9%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1244      G   /usr/lib/xorg/Xorg                            95MiB |
|    0      1414      G   /usr/bin/gnome-shell                          52MiB |
|    0      1646      G   /usr/lib/xorg/Xorg                           327MiB |
|    0      1850      G   /usr/bin/gnome-shell                         167MiB |
|    0      2958      G   ...uest-channel-token=17855968623154417761   125MiB |
|    0      3241      G   ...uest-channel-token=17932134006793618157    30MiB |
+-----------------------------------------------------------------------------+
```
#　ZED SDKをインストール

ZEDSDKのインストールは，[ここ](https://www.stereolabs.com/docs/getting-started/installation/)を参照．

ダウンロード先に移動．

実行権限を追加

```
chmod +x ZED_SDK_Ubuntu18_v2.8.3.run 
```
runファイルを実行

```
./ZED_SDK_Ubuntu18_v2.8.3.run 
```
基本的に，何か聞かれたら，`Y`を入力してエンター
このとき，

```
fail: "ERROR: Found Cuda 9.1 but the ZED SDK requires 10.0"
```
的な，ものが表示された場合は，正しくCUDAがインストールされていないので，一度，

```
sudo apt-get purge  nvidia-*
```
でnvidiaを消去，もう一度最初からやり直してみてください，

正しくインストールできた場合は，ZEDをUSB3.0ポートに接続して`/usr/local/zed/tools`にある，`ZED Explorer`を実行すると，
Viewerが動く．
`camera not deteced`の警告が出たら，USB接続し直してください．

#　ZED ROS Warpperをインストール

ZED ROS Warpperのインストールは，[ここ](https://www.stereolabs.com/docs/ros/)を参照．

RvizのIMUプラグインをインストール．

```
 sudo apt-get  install  ros-melodic-rviz-imu-plugin
```

自分の`catkin_ws/src`に移動．
git cloneでスクリプトをダウンロード．

```
 git clone https://github.com/stereolabs/zed-ros-wrapper.git
```

その後以下のコマンドを実行

```
 cd ..
 catkin_make -DCMAKE_BUILD_TYPE=Release
```
ちゃんとMakeできたら，正しくインストールしている．
このとき，`~.soをmakeするファイルがありません．中止`とエラーが出た場合は，一度，`devel`と`build`ファイルを消去し，`catkin_make`してみてください．うまく行くかもしれないです．

また，この[投稿](https://qiita.com/Uejun/items/fbb579374eafab8633d6)も参考にしてみてください．

#　動かす

```
roslaunch zed_wrapper zed.launch
```
ZED-miniの場合は，


```
roslaunch zed_wrapper zedm.launch
```
詳しくは，先程参照した，[ここ](https://www.stereolabs.com/docs/ros/)を見る．


#　終わりに
SDK，ros wrapper自体のインストールは，問題なかったですが，CUDAのインストールに大変苦労しました．
自分の場合，CUDA10.0は，Nvidia-driver 410.xxじゃないと，うまくインストールできませんでした．．．．
また，複数回CUDAやSDKを入れ直したことによって，パスがぐちゃぐちゃになってしまい．`catkin_make`を通すのに，時間がかかりました（泣）．
もう少し，パスや環境変数，シンボリックリンクなど，Linuxのシステムについて，色々と触らないと駄目ですね．