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」をクリックするとカメラ映像が現れ画像認識した結果がタグで表示されます。

ハンドジェスチャー認識
スイッチサイエンス社のRDK X5ワークショップに参加したときに体験したハンドジェスチャーを試したくてサンプルを探してみました。
このページには多くのデモが投稿されており、ここからハンドジェスチャーらしきものを探すと次のようなものがありました。
こちらを参考に進めてみたのですがどうも上手くいかず。ほかでも調べてみると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