ROS2-Foxyでdarknet-ros(Ubuntu20.04+OpenCV4.2+CUDA11.2)


※この記事は過去に私が投稿した記事(えいあーる・れいの技術日記(はてなブログ))を修正したものです。

元記事はこちら↓

 この記事では、Ubuntu20.04+CUDA11.2でDarknet_rosを動かす方法を環境構築と合わせて説明します。リポジトリを見る限りYOLOv3までの対応だと思います。
 Ubuntu20.04+CUDA11.2+OpenCV4.2+ROS2-Foxy(2021年3月時点ですべて最新)の組み合わせを前提にしています。また、NVIDIAドライバのバージョンは460.32.03です。

ハードウェア

 次のハードウェアで環境構築しました。

  • CPU:Ryzen7 2700x(16threads @4.3GHz)
  • GPU:GeForce RTX2080Ti(TU102)
  • RAM:16GB DDR4

Ubuntu20.04LTSの環境構築

1.Ubuntu20.04LTSのインストール

  • PCをUbuntu20.04を焼いたUSBメモリでブートし、インストールを行います。minimal installationでいいです。言語は英語推奨。

2.パッケージの更新とインストール

 gccとcmakeはNVIDIA Driverのインストールで必要です。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install git gcc cmake

3.NVIDIA Driverのインストール

4.nouveauを無効化する

echo `blacklist nouveau` >> /etc/modprobe.d/blacklist-nouveau.conf
echo `options nouveau modeset=0` >> /etc/modprobe.d/blacklist-nouveau.conf
sudo reboot

5.NVIDIA Driverをインストールする

  • ログイン画面が表示されたら、Ctrl+Alt+F2を押してCUIログインをします。
$ cd ~/Downloads/
$ chmod +x NVIDIA-Linux-x86_64-460.67.run
$ ./NVIDIA-Linux-x86_64-460.67.run

###基本的には質問に対してOKでいいです

$ sudo reboot

6.ログインしてドライバインストール確認

  • 再度ログインしてターミナルを開き、$ nvidia-smiでドライバがインストールされているか確認します。

成功例

| NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  On   | 00000000:06:00.0  On |                  N/A |
| 24%   32C    P8    22W / 260W |    654MiB / 11016MiB |      3%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A       983      G   /usr/lib/xorg/Xorg                102MiB |
|    0   N/A  N/A      1491      G   /usr/lib/xorg/Xorg                336MiB |
|    0   N/A  N/A      1623      G   /usr/bin/gnome-shell               70MiB |
|    0   N/A  N/A      2349      G   ...AAAAAAAAA= --shared-files       72MiB |
|    0   N/A  N/A     18194      G   ...AAAAAAAA== --shared-files       22MiB |
|    0   N/A  N/A    113055      G   ...AAAAAAAAA= --shared-files       35MiB |
+-----------------------------------------------------------------------------+

7.CUDA 11.2のインストール

  • https://developer.nvidia.com/cuda-downloads に従ってインストールします。

  • $ sudo apt install cuda-11-2のステップまで終わらせます。

  • nanoやvscodeなどで~/.bashrcを開いて環境変数の設定を追記します。2行目についてはcudaのままでもいいし、cuda-11.2などのバージョン指定でもよいです。(バージョンを切り替えがちな人はbashrcに記載しないほうがいいかも)

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

8.cuDNNのインストール

※かなり面倒な方法なので、もっと楽な方法があれば教えてください。

  • https://developer.nvidia.com/rdp/cudnn-download に移動して対応するcuDNNをダウンロードして、/usr/local/cuda-11.2/include//usr/local/cuda-11.2/lib64/にそれぞれファイルをコマンドでコピペし、シンボリックリンクを作成します。

ROS2のインストール

  • https://docs.ros.org/en/foxy/Installation.html に従ってインストールを進めます。OpenCVはFoxy依存なので、ros-foxy-vision-opencvパッケージは必ずインストールしてください。(ros-foxy-desktopで勝手にインストールされます)

ROS2用ワークスペースの作成とソースコードのダウンロード

 4つめのコマンドで--recusiveオプションを追加しないように!(OpenCV3のバージョンがダウンロードされてしまいます。)

$ source /opt/ros/foxy/setup.bash

$ cd ~/
$ mkdir -p ros2_ws/src
$ cd ros2_ws/src
$ git clone https://github.com/ajaypaul2008/darknet_ros.git
$ cd darknet_ros
$ git checkout foxy

$ git clone https://github.com/kunaltyagi/darknet.git
$ cd darknet
$ git checkout opencv4

$ cd ~/ros2_ws/
$ colcon build
  • webカメラ用ROS2パッケージもインストールしておきましょう。
$ sudo apt install ros-foxy-v4l2-camera

実行

 あらかじめROS2とワークスペースの環境はロードしておきましょう。

  • 1つめのターミナル:$ ros2 run v4l2_camera v4l2_camera_node __ns:=/color

  • 2つめのターミナル:ros2 launch darknet_ros darknet_ros.launch.py

(YOLOv4)AlexeyAB氏実装のdarknetについて

 Ubuntu20.04LTS+CUDA11.2の場合、コンパイルしてそのまま動きました。MakeFileのパスは適宜変更してください。CUDA11以上を使用する場合は-gencode arch=compute_30,code=sm_30 \を削除してください。(CUDA11より、KeplerアーキテクチャのGPUは使えなくなりました。)

トラブルシューティング

  • cannot find -lcudaというエラーについて:以下のリンクを参照して、バージョンを書き換えてシンボリックリンクを貼り付けてください。

  • Could not load library libcudnn_cnn_train.so.8などロードできないという趣旨のエラー:エラーをよく確認して、リンクを正しく貼り直してください。

  • error "OpenCV 4.x+ requires enabled C++11 support"というエラーが出る:ROS2用ワークスペースの作成の時点でダウンロードしたリポジトリがOpenCV3用の可能性があります。OpenCV4用のリポジトリをダウンロードしてください。

使用したリポジトリ

関連

  • Darknet YOLOv3・YOLOv4の作者のリポジトリです。