Mini PupperでObject Trackingのデモを動かしてみた!
最近"LOVOT"のような人の気持ちに訴えかけるコミュニケーションロボットが出てきています. MangDang社が開発したロボット犬"Mini Pupper"もそうしたロボットと同種の愛くるしさを持っており, 12個のモーターによる多様な姿勢や簡易な表情を表現するディスプレイを搭載しています. またROSに対応しているので自律歩行や認識機能を実装することができ, 生物らしさを感じさせる動きを作ることができます. 今回はそのMini Pupperの物体追従デモを紹介していきます.
準備したもの
四脚ロボットを作成できるKitです. 12個のサーボモーター, 基礎フレーム, 外装や前面ディスプレイが入っています.
Mini PupperのKitにはRaspberryPiがついていないので, 別途購入します.
物体認識用のカメラです. GPUの搭載していないマイコンでも, カメラについているマイコンにVPUが搭載されているので, カメラ自身で負荷の高い物体認識ライブラリを実行してくれます.
セットアップ
ハードウェア
Mini Pupperの組み立て
以下の記事を参考にしました.
OAK-D LITE向けカスタム部品
OAK-D LITEをMini Pupperへ装着する部品は公式には配布されていないので, 3Dプリントします.
L字のType-C USBケーブル向けです.
ファン付きバージョン
VPUを多く使用するニューラルネット演算時, OAK-D LITEカメラはとても熱くなりがちです. そこでファン付きバージョンも作ってみました. 下図は物体認識プログラムであるroslaunch depthai_examples mobile_publisher.launchを立ち上げたときの温度上昇を1時間にわたって計測したものです. ファン付きの方が10℃程度温度が低いことがわかります.
温度計測プローブはOAK-D LITEカメラのケース部分に固定しました.
ソフトウェア
Mini Pupperの基本的なソフトウェア
下記リンクを参考にしました. 少なくともROSパッケージのインストールまで終え, catkin_makeが完了できるまで進めます.
OpenCV AI KitのROSパッケージ
次にOpenCV AI KitのROSパッケージをインストールします. まずはコアAPIのdepthai coreをインストールします.
# get depthai-core source
cd
git clone https://github.com/luxonis/depthai-core.git
cd depthai-core
git submodule update --init --recursive
# depthai-core dependencies
sudo apt install libusb-1.0-0-dev
# build depthai-core
cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
cmake --build build --parallel 4
次にdepthai rosをインストールします.
# Install Dependencies of depthai ros
sudo wget -qO- https://raw.githubusercontent.com/luxonis/depthai-docs-website/master/source/_static/install_dependencies.sh | bash
# install vcs
sudo apt install python3-vcstool
# build depthai ros
cd mnpp_ws
wget https://raw.githubusercontent.com/luxonis/depthai-ros/main/underlay.repos
vcs import src < underlay.repos
rosdep install --from-paths src/luxonis --ignore-src -r -y
source /opt/ros/noetic/setup.bash
catkin_make --cmake-args -D'depthai_DIR=/path/to/depthai-core/build'
source devel/setup.bash
Raspberry Piでのビルドが途中で止まってしまうとき
PCと比べてメモリが小さいRaspberry Piでdepthai rosをビルドする際, メモリ不足でビルドが止まってしまうことがあります. こうしたときはSDカードの記憶領域をメモリのように扱い, メモリ不足を補います.
このような領域, スワップ領域は以下のように作成します. コマンド例では1Gのスワップ領域を作成していますが, 1Gサイズのスワップ領域を作成してもビルドが止まってしまう場合はより大きなサイズにしてみてください.
# make swap file
sudo fallocate -l 1G /swapfile
# change permission
sudo chmod 600 /swapfile
# create swap
sudo mkswap /swapfile
# activate swap
sudo swapon /swapfile
# check
sudo swapon --show
# rebuild depthai ros
catkin_make --cmake-args -D'depthai_DIR=/path/to/depthai-core/build'
物体追従用のスクリプトを/body_poseがPoseをPublishするように編集します.
# edit mnpp_ws/src/minipupper_ros/mini_pupper_detect/scripts/oak_detect.py
- pub_pose = rospy.Publisher('mini_pupper/body_pose', Pose, queue_size=10)
+ pub_pose = rospy.Publisher('/body_pose', Pose, queue_size=10)
物体追従デモ
下記のコマンドで物体追従のデモを行うことができます.
OAK-D LITEカメラでペットボトルを認識し(mobile_publisher.launch), そこで得られるBoundingBoxの情報を元にペットボトルにカメラが追従するような姿勢を計算し(oak_detect.py), その姿勢データに従ってMini Pupperを動作させています(bringup.launch).
# Terminal 1
roscore
# Terminal 2
source devel/setup.bash
roslaunch mini_pupper bringup.launch
# Terminal 3
source devel/setup.bash
roslaunch depthai_examples mobile_publisher.launch
# Terminal 4
source devel/setup.bash
rosrun mini_pupper_detect oak_detect.py
ペットボトルを動かしてそれに追従する動きを見せたらうまくいっています.
おわりに
今回はMini Pupperの物体追従デモの紹介をしました. 物に視線を送る姿だけでもちょっと生き物のようなものを感じます. みなさんもぜひ試してみてください!