ロボット犬『Mini Pupperミニぷぱ』ラズパイ4 Node-REDで味見
前回はATOM Matrixを用いて ミニぷぱの動作を楽しみました。
ここでは正規のラズパイ4と専用基板を用いて ミニぷぱを動かせるようにします。
目次
ミニぷぱ専用基板
以前 ミニぷぱに同梱のラズパイ4にRaspi OSを入れて専用基板でのサーボモータ制御を試みたのですが、サーボに電源が供給されず断念しました。
(2022/2/16現在 専用基板の回路図は未公開)
ロードスイッチかDCDCのイネーブルピンがありそうだな
単純にサーボに電源供給できひん
#MiniPupper #ミニぷぱ pic.twitter.com/2W0A3gpFbQ— HomeMadeGarbage (@H0meMadeGarbage) February 9, 2022
そうしましたところ、ミニぷぱの開発元様よりサーボ電源のイネーブルピンの存在をご教示いただきました。
ラズパイのGPIO21、GPIO25がサーボ電源供給のENピンとのことです。
それぞれサーボモータドライバのPCA9685の16個分のサーボの半分ずつの電源スイッチとなっているようです。
PCA9685動作
サーボドライバ PCA9685 はI2Cがインターフェースとなっております。
PCA9685つこてまんな pic.twitter.com/HHTdtfnXBw
— HomeMadeGarbage (@H0meMadeGarbage) February 9, 2022
Raspi OSでI2C通信を有効にします。
I2C有効後に専用基板を載せてi2cdetect で接続されているI2Cデバイスを調べてみました。
0x40がPCA9685です。0x70はなんだろ? 🙄
https://github.com/mangdangroboticsclub/QuadrupedRobot/tree/MiniPupper_V2/Mangdang によると
専用基板にはI2Cは3系統あって正規のI2Cピン(i2c-1)にはPCA9685しか つながってないはずだけど?
i2c-1 : for pwm controller PCA9685
i2c-3 : for EEPROM
i2c-4 : for fuel gauge max17205
サーボ制御
ラズパイ4にNode-REDを導入して専用基板でサーボを動かしてみました。
以下のPCA9685用のノードで制御しています。
https://flows.nodered.org/node/node-red-contrib-pca9685
やはりミニぷぱ専用基板のサーボ電源供給にイネーブルピンあったとのこと
EN ONでサーボ動かせた#MiniPupper #ミニぷぱ #nodeRED pic.twitter.com/NGVlZEy0Lf
— HomeMadeGarbage (@H0meMadeGarbage) February 16, 2022
ちょっとハマったのが専用基板のサーボ1を動かすためにはPCA9685ノードで15を設定する必要がありました。
専用基板のサーボナンバー 1~12がPCA9685ノードの15~4に対応していました。
PCA9685ノードがおかしいのか専用基板の配線がそのようになっているのかは不明です。
rpi-gpio outノードでGPIO21、GPIO25をHighにしてサーボに電源供給しています。
無事に専用基板でサーボを動かせるようになったので、いよいよミニぷぱ制御に挑戦です!
ミニぷぱ 足制御
ESP32やATOM Matrixで行っていた時と同様に逆運動学でミニぷぱの足を制御します。
とりあえず1本動かしてみた。
Node-REDで足制御#MiniPupper #ミニぷぱ #nodeRED pic.twitter.com/GInAHOzwGx
— HomeMadeGarbage (@H0meMadeGarbage) February 16, 2022
Node-REDで足の高さを指定して制御しています。
IK 右前足ファンクションで足の高さをうけて各サーボの角度を導出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
L1=50 L2=56; x = 0 zd = msg.payload / Math.cos(0/180.0 * Math.PI); ld = Math.sqrt(x * x + zd * zd) phi = Math.atan2(x, zd) msg.payload1 = 0; msg.payload2 = phi - Math.acos((L1*L1 + ld*ld - L2*L2)/(2*L1*ld)) * 180.0 / Math.PI msg.payload3 = Math.acos((ld*ld - L1*L1 - L2*L2)/(2*L1*L2)) * 180.0 / Math.PI + msg.payload2 return msg; |
足踏み
足1本を制御出来ればこっちのもんです。同じように残り3本も制御できるようにして足踏み動作してみました。
やっと正規の構成で
足踏みぷぱぷぱできるように
なたーよぉ#MiniPupper #ミニぷぱ #nodeRED pic.twitter.com/APcFOahvb0— HomeMadeGarbage (@H0meMadeGarbage) February 16, 2022
足踏み動作実現!
久しぶりに外装も全て取り付けて可愛さが復活しました。
ディスプレイも表示させたいな 🙄
しかしNode-REDで動作シーケンス組むのは結構大変だったな。。。
歩行動作とかも仕込みたいので実装手法は検討が必要そうです。
おわりに
ついにラズパイ4と専用基板でミニぷぱを動かせるようになりました。
引き続きもろもろ検証して自由自在に動かせるようにしたいと思います。