🤖

RDK X5 (2) ROS2ハンドジェスチャーを試す

に公開

はじめに

前回、D-Robotics社の「RDK X5」のセットアップまで完了したので、今回は用意されているサンプルコードに触れていきます。せっかくX5ボードと同時にカメラを入手したのでカメラ画像を使ったAI的なやつを試していきます。

カメラの接続

まず RDK X5にカメラを繋ぎます。
今回購入した物は MIPIインターフェースのカメラなので写真の「CAM1(シルク印刷あり)」コネクタにフラットケーブルを差し込みます。すぐ隣には「CAM2」があり2つのカメラでステレオを撮影してデプスを取るという使い方も出来るようです。

カメラ接続

カメラ映像から画像認識

RDK Studioから、RDK X5のターミナルを起動します。
ターミナル

root@ubuntu:~# ls -l /app/pydev_demo/
total 48
drwxr-xr-x 2 root video 4096 Oct 13 20:58 01_basic_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 02_usb_camera_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 03_mipi_camera_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 04_segment_sample
drwxr-xr-x 4 root video 4096 Oct 13 21:31 05_web_display_camera_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 06_yolov3_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 07_yolov5_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 08_decode_rtsp_stream
drwxr-xr-x 2 root video 4096 Sep 26 14:56 09_yolov5x_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 10_ssd_mobilenetv1_sample
drwxr-xr-x 2 root video 4096 Sep 26 14:56 11_centernet_sample
drwxr-xr-x 2 root video 4096 Oct 13 21:43 12_yolov5s_v6_v7_sample
lrwxrwxrwx 1 root video   16 Sep 26 14:56 models -> /app/model/basic
root@ubuntu:~# 

「/app/pydev_demo/」にプリインストールされたPythonのサンプルデモがいくつか収録されています。今回はこのうちのカメラ画像認識のひとつを試してみます。

03_mipi_camera_sample

公式ページ Using MIPI Camera

root@ubuntu:~$ cd /app/pydev_demo/03_mipi_camera_sample/
root@ubuntu:/app/pydev_demo/03_mipi_camera_sample$ ./mipi_camera.py 

こちらのデモは直接HDMI接続したディスプレイにしかカメラ映像が表示されず(VNC経由では表示されない模様)、(リンク先ページに表示されているような)画像を認識してタグ付けした際の枠も表示されずという残念な状態でしたので別のサンプルを試します。

05_web_display_camera_sample

root@ubuntu:~$ cd /app/pydev_demo/05_web_display_camera_sample/
root@ubuntu:/app/pydev_demo/05_web_display_camera_sample$ ./start_nginx.sh
root@ubuntu:/app/pydev_demo/05_web_display_camera_sample$ ./mipi_camera_web.py

上記を実行するとカメラ映像がWeb配信されている状態になるので、ブラウザを開いてアクセスします。

http://RDK X5のIPアドレス:80
例 : http://192.168.1.14:80

表示されたページの「Web Display」をクリックするとカメラ映像が現れ画像認識した結果がタグで表示されます。

camera_web

ハンドジェスチャー認識

スイッチサイエンス社のRDK X5ワークショップに参加したときに体験したハンドジェスチャーを試したくてサンプルを探してみました。

D-Robotics NodeHub

このページには多くのデモが投稿されており、ここからハンドジェスチャーらしきものを探すと次のようなものがありました。

手势识别算法(ジェスチャー認識アルゴリズム)

こちらを参考に進めてみたのですがどうも上手くいかず。ほかでも調べてみるとROS2のRDK X5最適化版である「TogetheROS.Bot」をインストールする必要があるらしい。
RDK X5のOSイメージにはROSが入っているものだと思っていたのですが、それが私の認識違いなのか、別の要因で単にデモが動かなかっただけなのかは不明です。が、とにかくTogetheROS.Botをインストールしていきます。

TogetheROS.Bot(tros.b)のインストール

公式ページ aptインストールとアップグレード を参考に進めます。

  • 準備
root@ubuntu:~# apt update
root@ubuntu:~# apt upgrade
  • tros.bのインストール
root@ubuntu:~# apt install tros-humble
root@ubuntu:~# ls /opt/
hobot  ros  tros

/opt内に上記のようなフォルダがあればインストール完了です。

ハンドジェスチャー機能のインストール

ファイルを展開するためのフォルダを用意します。あまり制限はないと思いますが、私は以下の場所に「yolo_sample」という名前のフォルダを作りました。

/home/sunrise/Documents/yolo_sample

そこのフォルダに移動して以降のコマンドでファイルをコピーしていきます。

apt install -y tros-hand-gesture-detection

source /opt/tros/humble/setup.bash

cp -r /opt/tros/${TROS_DISTRO}/lib/mono2d_body_detection/config/ .
cp -r /opt/tros/${TROS_DISTRO}/lib/hand_lmk_detection/config/ .
cp -r /opt/tros/${TROS_DISTRO}/lib/hand_gesture_detection/config/ .

export CAM_TYPE=mipi

ここまでの操作が完了すると作ったフォルダの中に「config」というフォルダが作られているはずです。

ハンドジェスチャー起動

次のコマンドでハンドジェスチャーのデモが動き出します。

ros2 launch hand_gesture_detection hand_gesture_detection.launch.py

ブラウザを開いてRDK X5へアクセスします。

http://RDK X5のIPアドレス:8000
例 : http://192.168.1.14:8000

するとカメラ映像が表示されハンドジェスチャーを認識している様子が確認出来ます。手の位置が近すぎると上手く認識が出来ないようで、ちょっと離しすぎかなくらいのところに手を撮すといい感じです。

実際にハンドジェスチャーを試している様子 X投稿動画

ハンドジェスチャー

おわりに

サンプルを動かしただけではあるのですが、(細かいところにハマりつつも)ここまで簡単にハンドジェスチャー認識が出来ると楽しいですね。他のマイコンボードの性能がどの程度なのかは知らないのですが、これだけの速度が出ていれば多くの場面で問題なく活用できそうです。

感触がつかめたところで一旦 ROSやらAIやらのところは離れて、次回は「CAN通信」を使ってDDモーターを回してみようと思います。

参考

Using MIPI Camera / D-Robotics
D-Robotics NodeHub / D-Robotics
手势识别算法(ジェスチャー認識アルゴリズム) / D-Robotics
aptインストールとアップグレード / D-Robotics
RDKX3 ハンズオン資料 東京 D-Robotics 日本語 / スイッチサイエンス 高須氏

Discussion