yolov5 を ROS に統合する

文書作成日:2023年3月27日

文書内容: yolov5をROSに統合するプロセスの記録

文書作成者: RobotFreak

yolo シリーズは非常に便利なオープンソースの視覚認識検出アルゴリズムで、現在 yolov8 にアップデートされており、学習と導入を容易にするための関連資料が多数あります。この記事では、yolov5 を ROS に統合するプロセスについて説明します。

仮想マシンがローカル カメラを呼び出します

仮想マシン -> リムーバブルデバイス -> カメラの接続。カメラの前にチェックマークがある場合、仮想マシンに接続されています。

ここに画像の説明を挿入

yolov5 ローカル展開

まず、yolov5 ソース コードをダウンロードまたは複製する必要があります。Python を使用してローカルで実行できるかどうかをテストするのが最善です。

デプロイメントリファレンス: Linux での yolov5 環境構成

ブログと yolov5 の README に記載されている Python バージョン >=3.7 を参照してください。ただし、実際には依存関係をインストールするときに Python バージョンが不十分な状況に遭遇したため、Python >=3.8 をインストールする必要がある場合があります。

デプロイ後のフォルダーの状態は次のようになります。
ここに画像の説明を挿入

yolov5をROSの機能パッケージに統合

ここでは、yolov5 フォルダーを関数パッケージの scripts ディレクトリに直接配置します。yolov5 フォルダー内のファイルを scripts フォルダーに直接コピーすることもできますが、一般的にスクリプトに配置されるのは .py ファイルと .sh ファイルのみであることを考慮して、フォルダー全体を scripts フォルダーに配置することにしました。よりきれいに。

ここに画像の説明を挿入

ここで私のワークスペースは、anaconda の Python ではなく、ネイティブ環境の Python を使用します。

detect.py に実行可能権限を追加します。

chmod +x detect.py

機能パックの CMakeLists.txt を編集します。

 catkin_install_python(PROGRAMS
   scripts/yolov5/detect.py
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )

コンパイルするワークスペース ディレクトリを入力します。

catkin_make

ここに画像の説明を挿入

roscore をオンにしてノードを実行します。

rosrun yolo detect.py

ここに画像の説明を挿入

統合完了

問題が解決しました

(解決済み) [警告:[email protected]] global cap_v4l.cpp:1119 tryIoctl VIDEOIO(V4L2:/dev/video0): select() タイムアウト。

yolov5 の検出をリアルタイム検出に変更した後、ローカル カメラを呼び出して detect.py を実行すると、このエラーが発生します。

このブログを参照してください: (29 メッセージ) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout._One WILLPOWER ブログ-CSDN ブログ

次のコマンドを直接実行します。

ffplay -f video4linux2 -input_format mjpeg -framerate 30 -video_size 640*480 /dev/video0

カメラを呼び出す効果は次のとおりです。
ここに画像の説明を挿入

ブログによると、仮想マシン -> 設定 -> USB コントローラーで、USB 互換性を USB3.1 として選択します。

次のコマンドを使用してカメラを再度呼び出します。
ここに画像の説明を挿入

detect.pyを再度実行しても問題ありません

(解決済み) ImportError: 名前 'ParserError' を 'dateutil.parser' (/usr/lib/python3/dist-packages/dateutil/parser/ init .py)からインポートできません

このエラーは detect.py を実行すると発生します

参考ブログ: (29 メッセージ) [Python] 'dateutil.parser' から名前 'ParserError' をインポートできません_Raurean のブログ - CSDN ブログ

ブログによると、python-dateutil を最新バージョン 2.8.2 に更新し、再度 detect.py を実行すると問題ありません。

おすすめ

転載: blog.csdn.net/svfsvadfv/article/details/129825613