ロボット犬『Mini Pupperミニぷぱ』逆運動学で足制御

Home > 電子工作 > ロボット犬『Mini Pupperミニぷぱ』逆運動学で足制御
すき 0
うんこ 0

前回は足を自由に動かすための準備として、ラズパイ4のOS吟味等実施しました。

ここではさらにカスタマイズを進めて足を逆運動学で自由自在に制御できるようになりましたので報告いたします。

 

 

PCA9685検証

専用基板にはサーボドライバPCA9685が載っており、ラズパイからI2Cでサーボを制御していることが前回わかりました。

 

そこでラズパイ4に専用基板を載せて、Node-REDからPCA9685を制御してサーボを動かしてみようと考えました。

PCA9685用Node-REDノードは以下を使用
 https://flows.nodered.org/node/node-red-contrib-pca9685

しかし、専用基板からバッテリを接続して起動しましたが、サーボの電源には電圧がフルで共有されず動かすことができませんでした。。。

恐らく、専用基板にロードスイッチかDCDCのイネーブルピンなどの起動制御があるのだと思いますが、
現状 回路図が未公開なのでラズパイによるサーボ制御は一旦保留とします。

 

ESP32とPCA9685

こうなったら一旦ラズパイ4は忘れて、慣れ親しんだESP32でPCA9685を制御しちゃいましょう。

 

ESP32開発ボードと以下のPCA9685モジュールを使用しました。

VKLSVAN 2個 PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール Arduinoと互換

VKLSVAN 2個 PCA9685 16チャンネル 12-ビット PWM Servo モーター ドライバー IIC モジュール Arduinoと互換

  • ShenZhen HuaRen ChuangYi Science and Technology Ltd .
  • 価格¥1,799(2025/07/14 17:19時点)
  • 商品ランキング35,121位

 

いつもの組み合わせなので簡単にサーボを制御できます。
BlynkをつかってBLEでスマホから制御しています。

 

ミニぷぱの右前足のサーボ3個を繋げてみました。

それぞれのサーボの角度を指定して自由に動かすことができるようになりました。

 

逆運動学で足を制御

右前足を位置座標を指定して動かせるようにします。

座標は腿のつけ根を原点として以下で定義します。

 

腿の長さL1は50mm、下肢の長さL2は56mmでした。
足のロール角をθ0、腿の角度をθ1、下肢を動かすサーボの角度をθ2とします。

 

ここでは腿のつけ根のロール角θ0と座標x, zを指定して足を制御することにしました。

足を上げて(Z軸)、前後(X軸)するためのサーボ角度は以下で導出されます。

腿のサーボの角度θ1は余弦定理を用いて導出します。

L22=L12+ld22L1ldcosθ1

θ1=cos1(L12+ld2L222L1ld)

θ1=φθ1=φcos1(L12+ld2L222L1ld)

φ=tan1(xz)

ld=x2+z2

 z=zcosθ0

 

下肢の角度はサーボの角度θ2と平行になるようにθ1とも連動しています。
こういうの平行リンクっていうんでしょうか。
同様に余弦定理を用いて導出します。

ld2=L12+L222L1L2cos(πθ2+θ1)=L12+L22+2L1L2cos(θ2θ1)

θ2=cos1(ld2L12L222L1L2)+θ1

 

以上で 足のロール角θ0と足の前後(X軸)位置と上下(Z軸)位置の指定で足のサーボを制御できるようになりました。

動作

実際導出した式で足を動かしてみます。

スマホから前後(X軸)位置と上下(Z軸)位置を指定し、サーボ角を導出して制御します。

 

ロール角を動かしても前後(X軸)位置と上下(Z軸)位置は保たれています。

 

おわりに

ラズパイ4と専用基板での制御を一旦諦め、邪道ですがESP32での足制御を検討しました。

逆運動学でやっと自由に動かせるようになったので、コレを4本に展開して
歩行の学習に入りたいと思います。

実に楽しみです!

次の記事

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください