てきとうなさいと べぇたばん

Mini Pupper(ミニぷぱ)がうちにやってきた

TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > Mini Pupper(ミニぷぱ)がうちにやってきた

Mini PupperにOpenCV AI Kit(OAK-D)を乗っけたときのやつ。

Mini Pupper(ミニぷぱ)がうちにやってきた

ロボット犬であるミニぷぱがうちにやってきました。組み立てていきます。

https://www.makuake.com/project/mini_pupper/

組み立て

組み立ては以下のページのとおりにやっていきました。

https://minipupperdocs.readthedocs.io/ja/latest/guide/Assembly.html

キャリブレーション

こいつのキャリブレーションは、ちょっとコツがいりますね。「Restore」のボタンを押してから、足を外してそれっぽい位置につけ直してキャリブレーションするっていう戦法をとりました。そうしないと動かないサーボモーターがあったので。

コントロール

付属のコントローラーを使って操作します。まあもうここらへんまでは全部上のリンクに書いてある。

ROSを使って制御する

このあたりになってくるとコツという次元じゃないスキルが必要になってきます。PCとしてUbuntuを搭載したドンキPCを用意しました。また、新しくSDカードを用意して、上記のとは別にしました。戻せますからね。

https://github.com/mangdangroboticsclub/minipupper_ros

Installation Guideの通りに1.1 PC SetupでPCのほうのコマンドを操作していきます。1.2 Mini Pupper SetupでミニぷぱのほうにSSHかGUIで入って操作していきます。受け取っているRaspberry Pi 4は2GBメモリのモデルだったため、このあたりからスワップを作ってビルドしたりするという回避策が必要になってきます。

こいつもキャリブレーションが必要になってきますが、上記とは違い90度にしてキャリブレーションしました。

OpenCV AI Kit(OAK-D)のROSパッケージのインストール

Raspberry Pi上でビルドを行います。こういう、メモリが必要なときは思い切って10GBとか確保しとくといいです。最終的に5GBくらい持っていかれたので。

$ sudo allocate -l 10G /swapfile
$ sudo chmod 0600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon --show # 確認

depthai coreのビルド

$ cd ~
$ git clone https://github.com/luxonis/depthai-core.git
$ cd depthai-core
$ git submodule update --init --recursive
$ sudo apt install libusb-1.0-0-dev
$ cmake -S. -Bbuild -D'BUILD_SHARED_LIBS=ON'
$ cmake --build build --parallel 4

depthai rosのビルド

これがメッチャクチャメモリを食う。スワップをつけることと、Raspberry Piの電源を、バッテリーからではなく直接電源から供給することが重要だと思います。ビルド時間が3時間とかはかかるはず。

また、参考にしたサイトでは記述がなかったが、何故か 'Empty' is not a member of 'nop::EncodingByte' などというエラーが出たため、 https://raw.githubusercontent.com/luxonis/depthai-ros/main/underlay.reposlibnopを追加しました。

※ libnopはGoogleが作ってるgoogle/libnopが本家。

repositories:
  luxonis/depthai-ros:
    type: git
    url: https://github.com/luxonis/depthai-ros.git
    version: main
  luxonis/depthai-ros-examples:
    type: git
    url: https://github.com/luxonis/depthai-ros-examples.git
    version: main
  luxonis/libnop:
    type:git
    url: https://github.com/luxonis/libnop.git
    version: master

その上でコマンドをまとめるとこうなるはずです。(こここそ試行錯誤があったため本当に再現性があるかは不明)

$ cd ~/catkin_ws
$ sudo wget -qO- https://raw.githubusercontent.com/luxonis/depthai-docs-website/master/source/_static/install_dependencies.sh | bash
$ sudo apt install python3-vcstool
$ wget https://raw.githubusercontent.com/luxonis/depthai-ros/main/underlay.repos
$ vi underlay.repos # 上記のように編集
$ vcs import src < underlay.repos
$ source /opt/ros/noetic/setup.bash
$ catkin build --cmake-args -D'depthai_DIR=/home/ubuntu/depthai-core/build'
$ source devel/setup.bash

物体追従デモを行ってみる

これで物体追従デモが行えるようになりました。

$ roscore &
$ source devel/setup.bash
$ roslaunch mini_pupper bringup.launch &
$ roslaunch depthai_examples mobile_publisher.launch &
$ rosrun mini_pupper_detect oak_detect.py

このような形でペットボトルを追ってくれるようになりました。

感想

PS4コントローラーを扱うだけの場合ならまだ普通にzipからRaspberry Pi Imagerで焼き込んでキャリブレーション行うだけでいけるにしても、これにROS(Robot OS)を扱うとなるとLinuxの専門知識が大量に必要になってくることに非常に大変さを覚えました。

Mini Pupperを犬のしつけだと思って頑張って色々な芸をできるようにしていきましょう。

参考サイト