KV260のDPU-PYNQで物体検出したデータを応用してみました。
WebカメラからリアルタイムでYOLOXを使っています。
特定の物体を検出してGPIOを出力したり、ROS2のマーカ表示をしてみました。
KV260でROS2とGPIOのテスト。Webカメラと一緒に動かしてみた
KV260のDPU-PYNQで物体検出したデータを応用してみました。
特定の物体(オレンジボール)を検出すると、GPIOを出力(Lチカ)をさせています。
テスト動画が下記です。
また検出した物体をROS2でマーカ表示したテストも行いました。
テスト動画が下記です。
プログラムやDPU、YOLOXのモデルは下記GitHubに保存しています。
詳細を紹介していきます。
テスト・合成環境
最初にテスト環境に関して説明します。
コンパイル・合成などはKV260とは別のデスクトップPC(Ubuntu)で実施しています。
またツール・合成環境は以下の通りです。
- Vivado, Vitis…2023.1
- Vitis AI …3.5 → 2.5
またDPU-PYNQのインストール・テストに関しては下記記事で紹介しています。
今回は応用編ということで、リアルタイムで検出しつつ、GPIOやROS2に出力させます。
Webカメラ(logicool C270n)
使用するWebカメラは「logicool Web camera C270n」です。
非常に安いWebカメラですが、(スペック上では)640x480で30fpsの速度があります。
テストには十分なカメラです。
GStreamer・libuvc・v4l2loopback-dkmsのインストール
USBカメラからライブストリーミングできるようにライブラリをインストールします。
GStreamer・libuvc・v4l2loopback-dkmsなどが必要となります。
1 2 3 4 5 6 |
git clone https://github.com/nickel110/libuvc.git cd libuvc/ mkdir build cd build/ cmake .. make && sudo make install |
1 2 |
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio sudo apt install v4l2loopback-dkms |
またPYNQ環境でもGStreamerを使うための環境を用意しています。
PYNQのデフォルトのopencv-pythonにはGStreamerがインストールされていないためです。
アンインストールしてUbuntu側のOpenCVと紐づけます。
1 2 3 |
sudo su source /etc/profile.d/pynq_venv.sh pip uninstall opencv-python |
ROS2・rviz2のインストール
KV260のROS2のインストール方法は沢山あると思います。
今回は以前に参加した下記コンテストのリファレンスのスクリプトを利用して楽をします。
下記の「install_ros.sh」でROS2-Humble環境構築ができます。
ダウンロードするかコピーして、実行します。
https://github.com/amd/Kria-RoboticsAI/blob/main/files/scripts/install_ros.sh
1 2 3 |
sudo su source /etc/profile.d/pynq_venv.sh source ./install_ros.sh |
可視化ツールやros2のopencv関連もインストールしときます。
(前述のスクリプトで一緒に入るかもしれません)
1 2 3 |
sudo apt install ros-humble-rviz2 sudo apt install ros-humble-image-transport sudo apt install ros-humble-cv-bridge |
WebカメラでYOLOX + GPIO出力のテスト
Webカメラでライブストリーミングをしつつ、YOLOXで物体検出を行います。
また特定の物体(オレンジボール)を検出すると、GPIOを出力(Lチカ)をさせています。
プログラムは下記です。
またGPIOの出力に関しては、下記のデバッグ基板を自作して使っています。
基板発注の仕方などは、下記記事でも紹介しています。
下記例のようにテストしました。
オレンジボール検出時に青色のLEDが点灯していることが分かります。
1 2 3 4 |
sudo su source /etc/profile.d/pynq_venv.sh cd kv260-ubuntu-test/usb-camera/ python3 app_gst-yolox-real-normal-camera-gpio.py |
テスト動画が下記です。
WebカメラでYOLOX + ROS2出力のテスト
Webカメラでライブストリーミングをしつつ、ROS2出力を行います。
YOLOXで物体検出した画像(Image)と座標をマーカ出力しています。
プログラムは下記です。
最初にrviz2を起動しておきます。
1 2 3 |
sudo su source /opt/ros/humble/setup.bash rviz2 |
左のウインドウにある「Add」から「MarkerArray」と「Image」を表示させています。
- Image…/camera/image/q1
- Fixed Frame…base_link
別のターミナル開いて実行すれば、自動的にrviz2にPublishされて表示されます。
1 2 3 4 5 |
sudo su source /etc/profile.d/pynq_venv.sh source /opt/ros/humble/setup.bash cd kv260-ubuntu-test/usb-camera/ python3 gst-yolox-ros2-normal-camera.py |
テスト動画が下記です。
まとめ
KV260のDPU-PYNQで物体検出したデータを応用してみました。
WebカメラからリアルタイムでYOLOXを使っています。
特定の物体を検出してGPIOを出力したり、ROS2のマーカ表示をしてみました。
よろしければ皆様もぜひ試してみてください。
コメント