えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

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

※Qiitaの記事もチェックしてみてください。

qiita.com

Ubuntu20.04の環境構築をしました。そして、Ubuntu18プログラムの移行のためにとりあえずDarknetの環境構築を行いました。Darknetの環境構築を行う記事は多くありますが、将来環境構築を複数回行うことを見越して備忘録として書きます。

この記事では、Ubuntu20.04+CUDA11.2+OpenCV4.2(すべて最新)の組み合わせを前提にしています。また、NVIDIAドライバのバージョンは460.32.03です。

Ubuntu20.04LTSの環境構築

1.Ubuntu20.04LTSのインストール:minimal installationでいいです。言語は英語推奨。

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

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

3.NVIDIA Driverのインストール: 公式ドライバー | NVIDIAGPUの種類を選択してダウンロードします。

 私が使用したドライバは以下のリンクから直接とべます。(Linux Driver)

www.nvidia.com

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のインストール

  • CUDA Toolkit 11.7 Downloads | NVIDIA Developerに従ってインストール。

  • nanoなどで~/.bashrcを開いて追記する。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のインストール

ROS2のインストール

ROS2用ワークスペースの作成

 4つめのコマンドで--recusiveオプションを追加しないように!

$ 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

AlexeyAB氏実装のdarknetについて

 Ubuntu20.04LTS+CUDA11.2の場合、そのまま動きました。

動作確認

トラブルシューティング

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

github.com

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

  • error "OpenCV 4.x+ requires enabled C++11 support"というエラーが出る:リポジトリが違います。あるいは、OpenCV3.2を導入することでも解決します。

参考資料

github.com

github.com

github.com