ミニぷぱのROS版を触っていて、少し知見がたまってきています。
- 初心者もプロも楽しめる!自作できるロボット犬『Mini Pupperミニぷぱ』|マクアケ - アタラシイものや体験の応援購入サービス
- 自作できる小型ロボット「犬」に物体追跡AIを搭載してみよう:AI・データサイエンスで遊ぼう - @IT
非常にニッチだと思いますが、ミニぷぱのROS版をPS4版のように扱えないと感じる人も多いかと思うので、個人的に知っている内容を書いておきます。誰かに役立つといいけど。
※書く必要もないと思いますが念のため。この記事の通りに実施して何か起きた場合の責任は筆者および本サイトは負いません。自己責任でお願いします。
ROS版で起動時に鳴かせる方法
PS4版では起動時に鳴くので起動が分かりやすいです。なぜかROS版では実装してくれていません(もしかしたら最新版では対応済みかもしれません。確認していません)。
鳴き声の音声はこちらにあります: github.com
これを再生するだけです。再生コマンドはmpg123 /home/ubuntu/Music/power_on.mp3
にようになります。このコマンド実行を、起動時のrc.localサービスで実行してもらいます:
github.com
rc.localファイルは、
/home/ubuntu/minipupper_ros_bsp/mangdang/System/rc.local
にあります。私のrc.localファイルの中身は以下のようになっています。個人的にカスタマイズを試しまくっているので元と違うかもしれません。
#!/bin/bash # # 1.Initialize power switch and pwm units # 2.start lcd # # Copyright (c) 2020, Mangdang Technology Co., Limited # # #remove bluebooth cache # sudo rm /var/lib/bluetooth/* -rf # sleep 2 # get hardware version # echo 27 > /sys/class/gpio/export # echo in > /sys/class/gpio/gpio27/direction # hw_version_io=`cat /sys/class/gpio/gpio27/value` # echo 27 > /sys/class/gpio/unexport # if [ "$hw_version_io" == "1" ]; then # sudo echo "P1" > /home/ubuntu/.hw_version # else # sudo echo "MP" > /home/ubuntu/.hw_version # fi #export pwm channel for i in $(seq 0 15) do sudo echo $i > /sys/class/pwm/pwmchip0/export sudo echo 4000000 > /sys/class/pwm/pwmchip0/pwm$i/period sudo chmod 777 /sys/class/pwm/pwmchip0/pwm$i/duty_cycle done # init the Bluetooth # sudo hciattach /dev/ttyAMA0 bcm43xx 115200 noflow - # sleep 8 # sudo hciattach /dev/ttyAMA0 bcm43xx 115200 noflow - # sleep 2 # init lcd #python3 /home/ubuntu/minipupper_ros_bsp/mangdang/LCD/lcd_init.py # set cpu performance # Set the Frequency Governor to Performance (run CPU at maximum frequency) which determines the frequency policy. Default is On-Demand # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors # conservative ondemand userspace powersave performance schedutil が利用可能 echo performance > /sys/bus/cpu/devices/cpu0/cpufreq/scaling_governor # show wake-up-face (& means background job) su ubuntu -l -c "python3 /home/ubuntu/minipupper_ros_bsp/mangdang/LCD/wake-up-face.py" & # play sound (& means background job) su ubuntu -l -c "mpg123 /home/ubuntu/Music/power_on.mp3" & exit 0
音声コマンドは最後に実行しているsu ubuntu -l -c "mpg123 /home/ubuntu/Music/power_on.mp3" &
ですね。/home/ubuntu/Music/
ディレクトリに音声ファイルを配置しました。
このrc.localサービスを有効にするには、以下のコマンドを実行してください。
# Install mangdang wake-up service cd /home/ubuntu/minipupper_ros_bsp/mangdang/System sudo bash install.sh sudo reboot
ROS版で顔を表示させる方法
顔もアニメーションさせたりいろいろとできるのですが、PS4版で動くとアニメーションするようなコードになっていたと思います。それを実装するのは面倒なので、取りあえず起動時にlogo用の顔(黄色と黒色が反転した顔)を表示させるようにしてみましょう。手間を省くため、上記と同じrc.localサービスを利用しました。
上のコードにあるsu ubuntu -l -c "python3 /home/ubuntu/minipupper_ros_bsp/mangdang/LCD/wake-up-face.py" &
がその部分です。Pythonスクリプトを呼び出しています。そのスクリプトコードは以下の通りです。
import os import sys from PIL import Image sys.path.append('/home/ubuntu/minipupper_ros_bsp') sys.path.extend([os.path.join(root, name) for root, dirs, _ in os.walk('/home/ubuntu/minipupper_ros_bsp') for name in dirs]) # sys.path.append('/home/ubuntu/minipupper_ros_bsp/mangdang') # sys.path.extend([os.path.join(root, name) for root, dirs, _ in os.walk('/home/ubuntu/minipupper_ros_bsp/mangdang') for name in dirs]) # from LCD.ST7789 import ST7789 from mangdang.LCD.ST7789 import ST7789 cartoons_folder = '/home/ubuntu/Pictures/' disp = ST7789() def main(): """ To show wake-up-face """ # Firstly, show logo #init st7789 device global disp disp.begin() disp.clear() image=Image.open(cartoons_folder + 'logo.png') image.resize((320,240)) disp.display(image) main() #### #### run this script #### # python3 /home/ubuntu/minipupper_ros_bsp/mangdang/LCD/wake-up-face.py
顔画像はこちらにあります: github.com
これらの画像ファイルを/home/ubuntu/Pictures/
ディレクトリに配置しました。
仕組みさえ分かってしまえば特に難しいとろころはないのではないかと思います。その仕組みを説明する資料がないんですよね...。こんな感じでプログラミング次第で何でもできます。
ヒントとして、ROS版のこういったプログラム関連とそのインストール用ファイルは、
/home/ubuntu/minipupper_ros_bsp/mangdang
にまとめられています。それに対応するGitHubリポジトリが以下だと思います。
https://github.com/mangdangroboticsclub/minipupper_ros_bsp
また、ROS用のコマンドなど(ワークスペース)は、
/home/ubuntu/catkin_ws
というディレクトに入っています。それに対応するGitHubリポジトリが以下だと思います。
https://github.com/mangdangroboticsclub/minipupper_ros
ROS版でバッテリー電池不足時に鳴かせる方法
ついでにバッテリー電池不足時に鳴かせる方法も紹介しておきます。起動時に鳴かせる方法と基本的な考え方は同じです。電池がなくなったらsu ubuntu -l -c "mpg123 /home/ubuntu/Music/low_power.mp3"
を実行するだけです。
バッテリー電池は/home/ubuntu/minipupper_ros_bsp/mangdang/FuelGauge/battery_monitor
サービスで対応できます。私のbattery_monitorファイルの中身は以下のようになっています。
#!/bin/bash # # Copyright (c) 2021, Mangdang Technology Co., Limited # # IO Mapping configuration IO_MAP=( 25 1 # Servo 1 control for v2 board - on 21 1 # Servo 2 control for v2 board - on #26 1 # LCD LED <backlight LED control> - on #24 0 # LCD RST <ReSeT control> - off #27 0 # LCD DC <Data/Command (NOT MOSI!)> - off ) # Set the above Configuration function io_init(){ len=${#IO_MAP[@]} for((i=0;i<len;i+=2)) do io=${IO_MAP[i]} val=${IO_MAP[i+1]} echo $io > /sys/class/gpio/export echo out > /sys/class/gpio/gpio$io/direction echo $val > /sys/class/gpio/gpio$io/value done } # init IO io_init sleep 1 chmod 777 /sys/class/gpio/gpio24/value chmod 777 /sys/class/gpio/gpio27/value chmod 777 /dev/spidev0.0 #Power monitor while true do current_voltage=`cat /sys/class/power_supply/max1720x_battery/voltage_now` if [ $current_voltage -le 6500 ]; then echo 0 > /sys/class/gpio/gpio25/value echo 0 > /sys/class/gpio/gpio21/value su ubuntu -l -c "mpg123 /home/ubuntu/Music/low_power.mp3" fi sleep 8 done
このコード内のcat /sys/class/power_supply/max1720x_battery/voltage_now
で電圧をチェックし、電圧が6500未満になると、su ubuntu -l -c "mpg123 /home/ubuntu/Music/low_power.mp3"
で音声ファイルを鳴らし続けています。PS4版のコードそのもののコードになっています。仕組みは簡単です。
ちなみにROS版の元々のコードでは、バッテリー側のブザー音を鳴らす内容になっていたと思います。音声ファイルの鳴き声の方が気分が乗りますよね。
このbattery_monitorサービスを有効にするには、以下のコマンドを実行してください。
# Install mangdang power-on service cd /home/ubuntu/minipupper_ros_bsp/mangdang/FuelGauge sudo bash install.sh sudo reboot
ミニぷぱに付属のバッテリーでは、このように電圧をチェックできますが、人が見る場合、「電池があと何%?」と見た方が分かりやすいですよね。これを調べるには、
cat /sys/class/power_supply/max1720x_battery/capacity
というコマンドを実行すればよいです。実開発作業ではGUIを見ずにSSHでVisual Studio Codeから触ることが多いのではないかと思いますが、このコマンドは便利ですよ。
(走り書きで見直してないです以上です。読む人も限られると思うので最小コストで。)