SimpleFOC で倒立振子4

Home > 電子工作 > SimpleFOC で倒立振子4
すき 0
うんこ 0

ここ最近はSimpleFOCの勉強に凝っていて、先日もベクトル制御による倒立振子を楽しみました。

SimpleFOC で倒立振子3

↑ここで非常に応答の良い倒立振子を実現できたので、更に検証を進めます。

 

AudiostockでBGM・効果音を販売中!

屈伸型倒立振子

SimpleFOCのベクトル制御によって小型で応答性がよいブラシレスモータユニットを手にしたので、前々からいつか作ってみたいと思っていた屈伸型倒立振子を作りたいと思います。

1脚をリンク機構によってサーボ 1個で動かす屈伸型倒立振子は以前にいくつか製作しました。

DYNAMIXEL シリアルサーボ XL330 屈伸型倒立振子で起上り

この屈伸型倒立振子は足が上下にのみ移動可能です。

ここではサーボ 2個ずつで足を構成して上下移動に更に前後移動も加えて豊かに動作する屈伸型倒立振子を目指します。

構成

屈伸型倒立振子の構成は以下のとおり
屈伸の足のためにシリアルサーボ STS3032を追加しました。

 

  • Makerbase esp32デュアルsimpriefocシールド
     
     

 

  • IMUセンサ MPU6050

     
  • I2Cマルチプレクサ TCA9548A

     

  • 磁気エンコーダ AS5600

     

  • 260KVブラシレスモータ

     

  • 3セル 11.1V LiPoバッテリ

  • サーボ用 降圧DCDCモジュール

     
  • シリアルサーボ STS3032

機体製作

Makerbase社製コントローラの余剰ピンでシリアルサーボを動かせることを確認しました。

 

ESP32のGPIOを用いてFeetech製シリアルサーボを簡単に駆動できる以下のライブラリを使用しました。
サーボからのデータ受信はできませんがUART信号変換基板を使用せずに直接信号送信が可能です。

 

降圧DCDCをコントローラ裏に配置・配線してバッテリ電圧 11.1Vを7.4Vにしてサーボに給電します。

 

3Dプリントしたフレームを5節リンク状に組んで 1脚 2個のサーボで動かします。

 

 

足先にモータをつけて配線します。

磁気エンコーダとブラシレスモータを治具で固定

 

エンコーダのI2Cラインをマルチプレクサに配線

 

機体完成!

逆運動学

5節リンクによる足での逆運動学は以前にも経験があり、今回もそちらを流用してサーボを動かします。

SHISEIGYO-2 Walker の歩行を再検討1

 

足の座標 (x, y) からサーボの角度 ($θ_1$, $θ_2$)を導出します。
片足の座標は以下で定義しました。

サーボのアームの長さは$L_1$、下肢の長さは$L_2$、サーボの軸間の長さを$l$とします。

 

前後のサーボの角度$θ_1$, $θ_2$は以下で導出されます。

$$θ_1=θ_a-θ_b$$

$$θ_2=θ_c-θ_d$$

$θ_a$, $θ_b$, $θ_c$, $θ_d$は三角比や余弦定理より以下で導出できます。

$θ_a = \tan^{-1} \left(\frac{y}{x-l/2} \right)$

${L_2}^2 = {L_1}^2 + {l_a}^2 – 2{L_1}{l_a}\cos{θ_b}  $
$θ_b=\cos^{-1} \left(\frac{ {L_1}^2+ {l_a}^2- {L_2}^2}{2{L_1}{l_a}} \right)$

$π-θ_c = \tan^{-1} \left(\frac{y}{x+l/2} \right)$
$θ_c =π- \tan^{-1} \left(\frac{y}{x+l/2} \right)$

${L_2}^2 = {L_1}^2 + {l_b}^2 – 2{L_1}{l_b}\cos{θ_d}  $
$θ_d=\cos^{-1} \left(\frac{ {L_1}^2+ {l_b}^2- {L_2}^2}{2{L_1}{l_b}} \right)$

 
よってサーボの角度$θ_1$, $θ_2$は足先の座標 (x, y)より以下で導出できる。

$$θ_1=\tan^{-1} \left(\frac{y}{x-l/2} \right)-\cos^{-1} \left(\frac{ {L_1}^2+ {l_a}^2- {L_2}^2}{2{L_1}{l_a}} \right)$$

$$θ_2=π- \tan^{-1} \left(\frac{y}{x+l/2} \right)-\cos^{-1} \left(\frac{ {L_1}^2+ {l_b}^2- {L_2}^2}{2{L_1}{l_b}} \right)$$

$$      但し、l_a = \sqrt{\left(x-l/2\right)^2 + y^2}$$

$$         l_b = \sqrt{\left(x+l/2\right)^2 + y^2}$$

 

ちなみに今回の屈伸型倒立振子では$L_1 = 50$ mm、$L_2 = 60$ mmです。

動作

逆運動学で足の座標を指定してサーボを動作させつつ倒立を目指します。

足踏み・屈伸

いい感じ

ジャンプ

ブラシレスモータの応答が良いのでジャンプ後の倒立も問題なし

機体幅詰

機体幅が広すぎるのでバッテリ位置を変えて、20 mmほど幅詰めしました。

機体姿勢制御

機体のロール軸やピッチ軸によって足を動かして姿勢を制御してみます。

ロール軸制御

機体ロール軸の傾きをフィードバックして左右の足高さをPD制御して機体姿勢を保持させてみました。

 
いいですね。モータが元気だからもち上げても倒立を維持しつつ姿勢保持してくれて面白い。

ピッチ軸制御

さらに機体ピッチ軸の傾きをフィードバックして足を前後させてみます。
ここにきてやっと1脚にサーボを2個使用する意味が見いだせる時が来ました。

以下の動画冒頭の急停止の時に足を前後させるのカッコよく、いつか自分でもやってみたいと思っていました。

恐らくピッチ軸制御で実現できるはずです。

 

ほらね。できた 😛 。

 

足を前後できるご利益ですね。これは嬉しい

おわりに

ここではSimpleFOCによる屈伸型倒立振子の製作を実施しました。

1脚にサーボを2個使用するタイプに初めて挑戦し、足の前後動作もできるようになったのでカッコいいピッチ軸制御も実現できました。

当然 起き上がりもできるよ。

 

さて足の前後移動をピッチ軸制御にだけ使用するのは実にもったいないですよね。
この構成での屈伸型倒立振子でやりたいことはまだまだございます。
引き続き実験・調査して報告させていただきますので、その際にはまた是非お越しください。

バイなら

次の記事

SimpleFOC で倒立振子5 歩行に挑戦

コメントはこちらから

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

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