文書作成日: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 を実行すると問題ありません。