ブラシレスモータで2足歩行ロボット9 ー CAN通信導入 ー

Home > 電子工作 > ブラシレスモータで2足歩行ロボット9 ー CAN通信導入 ー
すき 0
うんこ 0

前回は足踏みや歩行動作の検討を実施しました。

ブラシレスモータで2足歩行ロボット8 ー 動作検討 ー

 

足のロール軸駆動をサーボモータからブラシレスモータにして立派な動作を実現できると思ったのですが、左右の足動作の切り替え自動化が難しかったです。

左右の足動作の切り替えを時間指定ではなくIMUセンサでうまいことウェイトシフト検知して実施したいと思ったのですが上手くいかず、結局 足上げ着地後に振動が収まるのをIMUで検知してから他方の足の動作を開始させることとなりスムーズ動作は実現できませんでした。

前回の結論としてIMUセンサによるウエイトシフト検知は難しいということがわかりました。
ロール軸モータによってIMU搭載ATOM Matrixが載ったボディを平行にしようとする制御がなされることもウェイトシフト検知を難しくしています。

そこでここでは別のウェイトシフト検知手法を検討しましたので報告します。

 

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

ウェイトシフト検知

あらためて本ロボットの足の動作を足踏みで説明します。

  • 片足で地面を蹴ってから足を上げる
    足の蹴る量と速さ、そして上げる高さと速さはパラメータ値として指定
  • 蹴り上げによって傾いた機体が戻るタイミングをIMU角速度の符号反転で検知してあげた足を初期高さに下げる。
  • 戻した足が接地してウエイトが乗ったら反対の足の蹴り上げ動作を開始

上記を繰り返して足踏み動作とするのですが、反対の足を動かすトリガとなる、足の接地具合つまりウェイトシフトの検知が難しいと感じています。

ロール軸は機体姿勢を極力平行に保つようにIMU値で常に制御させています。

 

足接地後に十分時間をとったり前回のようにIMUで振動が収まる待つのは面白くないから嫌だ。
動作がかなりもたつくことになるので。。。せっかくロール軸もブラシレスモータにしたのにねぇ。

かといってIMUによる機体姿勢や角速度で足のウェイトの乗り具合の判定は難しい。。

 

そこでウェイトシフトを足モータのトルクつまり電流値で検知したいと思います。
トルクを直接測ればウェイトシフト検知が容易にできると考えたのです。

CAN通信

本ロボットの現状の通信システムは以下のとおり
中枢コントローラATOM Matrixからロール軸や足のモータに動作信号を送っています。

通信はUARTシリアル通信で実施しています。

ESP32はシリアルポートが3つと制限があります (1つはプログラム書き込み用のため実質2個)。
そのため足への信号は片足に送ってから他方に再度送るなどの工夫をしています。

このシステムでさらにモータトルク通信を追加するのはちょっと難しい。。。やりたくない。

CAN通信導入

そこでいい機会ですのでバス通信を導入します。
最近よく耳にするCAN通信でやってみようと思います。
よく聞くってことは良いものなのだろうから。

早速 CAN-UART変換モジュール VP230を購入

 

ESP32のライブラリにはデフォルトでCAN通信が用意されています。
但し、CANではなくTWAI (Two-Wire Automotive Interface) という名前でうたわれています。
まぁなんか事情があるのでしょう。使えればいいから こちとら

 

まずはロール軸に導入して中枢コントローラATOM MatrixからCAN通信で角度指定して動かしてみました。
なんとなくいい感じがする。。誉れ高き差動通信が心強いです。

 

そのまま足モータ間にもCANを導入
同様にATOM Matrixから足座標をそれぞれに送信

 

いままでの通信システムがお粗末だったので、動作も若干良くなりました。
気のせいかもしれないが

ちなみにCAN通信ボーレートは1Mbpsとしました。

モータトルク取得

CAN通信システムが確立できたのでモータトルク検知の検討を進めたいと思います。

まずは足のコントローラにUSBケーブルをつないで直接ブラシレスモータの電流を観測してみました。

足の動作に連動してモータの電流値が変動しているのがわかります。
リンク機構の足の2個のモータの電流をみていますが、それぞれに大きな差は無いのでいづれか1つの電流をみれば十分そうです。

 

ちなみに基板むき出しが転んだりすると怖くなってきたので、アーマーを付けました。

 

各足の1個のモータ(ふくらはぎ) の電流値をATOM MatrixにCAN送信するようにしました。

足踏みによって左右のモータの電流が動作に応じて変動しています。

 

CAN通信は端末ではなくデータ自体にIDをつけて管理します。使ってみると非常に良い仕様です。
ここでは以下のようにしました。

バス通信内に色々なデータが飛び交うので各モータコントローラには必要なデータだけを受信するようIDを指定してマスクしました (twai_filter_config_t)。
来るデータ全部に対して選別処理すると実際動作が遅くなります。

この辺はAIに助けてもらいながら実施しました。

ウェイトシフト検知

中枢コントローラATOM Matrix で左右の足のトルク (ふくらはぎ) が得られるようになったのでウェイトシフト検知を目指します。

足上げ動作時の左右のモータ電流の差分を見てみました。

動作に応じて左右のモータ電流の差分が大きく変動します。
この差分の増加・減少を検知することで以下の3ステートを明確に検知できるようになりました。

① 足上げで浮いている
② 足下げによる接地
③ 接地後の反動による他方へのウェイトシフト

差分のさらに変動をみてステータス検知しているので床の傾きや外乱の影響も小さいと考えられます。

 

上記 検知ステータス③で左右足動作切り替えて足踏みをしてみました。

非常に安定した足踏みが実現できました!!
見事に目論み通り モータ電流 (トルク) によるウェイトシフト検知で左右足動作の切り替えができました。

おわりに

ここではCAN通信を導入してモータトルクによるウェイトシフト検知での足踏み動作を確認しました。

ウェイトシフト検知で左右足動作切り替えを自動化でき、動作も安定しています。

次回は左右動作切換タイミングの更なる深掘りや歩行について検証したいと思います。

それではまた

コメントはこちらから

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.