「ESP32」タグアーカイブ

SHISEIGYO-1 Walker 参 を実現させたい俺2 ー倒立実現ー

前回はシリアルサーボLX-244を用いて片足動作を確認しました。

SHISEIGYO-1 Walker 参 を実現させたい俺1 ーサーボ味見ー

 

精度も良くSHISEIGYO-1 Walker の実現に使えそうと判断しましたので、ここでは更に検証を進めます。

 

 

両足構成

シリアルサーボLX-244を追加購入し、片足4つずつ計8個のサーボを用いて両足動作を確認しました。

前回同様に専用のコントローラを介してArduino UNOで制御しています。

力強く非常にスムーズでいい動きです。

 

リアクションホイールも搭載してみました。
こちらはESP32で直接 シリアルサーボLX-244を制御しています。

サーボのトルクも十分で全く問題ないようです。

 

リアクションホイールによる倒立

足先をかまぼこ状にして、倒立動作を確認します。

 

倒立動作を確認しました。しかし若干安定度に欠けます。

 

フライホイールを2枚から3枚に増やしてみました。

 

重心前後運動

倒立の安定度確認や足の構成の調整チェックを重心の前後移動動作で実施しました。
もろもろ調整しつつ動作確認。

 

足の形状や取り付け位置を調整して安定して重心移動ができるようになりました。

 

おわりに

無事にリアクションホイールによる倒立で重心移動まで確認できました。
シリアルサーボLX-244の動作精度には全く問題がないと現状では考えております。

ここからは歩行に向けて検証進めたいと思います。

SHISEIGYO-1 Walker 参 を実現させたい俺1 ーサーボ味見ー

これまで2機種のリアクションホイールによってバランスする2足歩行ロボットを製作してきました。

初代のSHISEIGYO-1 Walker は歩行には成功しましたが使用したシリアルサーボ(KRS3301)のトルクが十分でなく、重心が低くゆっくりとした動作となりました。

 

二代目のSHISEIGYO-1 Walker 弐 は高トルクのPWMサーボ (RDS3218) を採用し素早い動作が可能となりましたが、サーボの動作角度の精度が低く足を交差させる歩行は断念しました。

 

いつかは高トルクで高精度のサーボモータを入手し完全版のSHISEIGYO-1 Walker 参 を実現したいと考えておりました。

近藤科学のシリアルサーボではKRS2572が高トルクであり、恐らく精度も高いと思われます。

但し、非常に高額です。。。

 

SHISEIGYO-1 Walker 参 の実現はしばらく難しいと考えておりました。
しかし先日 高トルクで低額のシリアルサーボを見つけましたので、ここではそのサーボの精度を検証してみましたので報告いたします。

 

 

シリアルサーボ LX-224

以下のシリアルサーボ LX-244を購入しました。トルクも十分で価格もPWMサーボと変わらないです。

サイズはPWMサーボ RDS3218 と同じです。

 

専用のコントローラも購入しました。

 

動作はコントローラと専用ソフトを使用して割と簡単にできました。サーボIDを割り当てたり、動作のシーケンスも組むことができました。

 

精度比較

LX-244の動作精度を PWMサーボ RDS3218 と比較してみました。

シリアルサーボ LX-244のほうは明らかに制動がかかっており精度もバッチリのようです。
上の実験ではLX-244の動作速度を最速で実施しているので若干オーバーシュート気味です。これは動作速度の調整で改善できそうです。

動作精度もさることながら各種パラメータを取得できることもシリアルサーボの魅力ですね。

 

片足構築

LX-244を3個使用して足を構築しました。
制御は専用コントローラにArduino UNOから信号を送って実施しました。

マイコンからの制御は以下を参考にしました。


HiwonderのシリアルサーボをM5StickCで動かす - スイッチサイエンス マガジン

 

屈伸動作

力強く割と滑らかな動作が実現されました。

 

コレはSHISEIGYO-1 Walker 参 の実現も夢ではないかもしれません。
引き続き検証進めます。

クローズドループ正弦波駆動 その2 ーブラシレスモータ駆動への道6ー

前回は磁気エンコーダを用いたクローズドループ正弦波駆動で位置指定による回転追従動作を確認いたしました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここではクローズドループ正弦波駆動による回転速度を指定した回転動作を目指します。

 

 

クローズドループ正弦波による回転

以下が理解しやすい図でした。

 

正弦波の振幅を上げて回転トルクをあげて回転位置をフィードバックして正弦波の周期を制御します。

矩形波駆動の時にも参考した書籍も上図と同じフローでの正弦波駆動が紹介されていました。

 

コレを参考に磁気エンコーダでロータ位置を検知しつつ正弦波の振幅を調整してみたのですがうまく回転できませんでした。

エンコーダから回転スピード算出して正弦波周期を変えたり、エンコーダ値を正弦波の位相に対応させてフィードバックなどいろいろ試しましたがダメでした。

 

勉強

どうしてもうまくできないのでリフレッシュと理解を深めるために書籍を購入しました。

こちらの書籍の正弦波駆動も正弦波の振幅調整で回転速度制御が紹介されていましたが、正弦波の印可が半波のみで実施されていました。

全波 vs 半波

正弦波の印可方法は全波が良いのか半波が良いのか比較してみました。
全波と半波の正弦波をブラシレスモータの3相に120°位相をずらして印可します。

 

全波印可の方が明らかにスムーズにまわっています。半波は矩形波駆動とあまり変わっていない印象を受けました。

ここでは全波印可を採用します。

 

検討

書籍の方法がうまくいかないため別手法を考えます。
書籍によって使用しているモータやエンコーダの仕様が異なるので仕方のないことかもしれませんが
今さらモータ学習用キットを購入するのもシャクなので、独自に方法を探ります。

前回の位置指定を応用して、位置の指定を周期的に可変させて回転動作を保つ方法を検討しました。

 

可変抵抗で回転速度指定し、コントローラで回転位置をループで制御して回転させています。

正弦波の振幅は所望回転位置とエンコードの値の差でのP制御で自動で決定します。
高速になると差が大きくなるので必然的に振幅が上昇します。

起動時にオープンループで回転させてエンコーダのオフセット検出して、後のクローズドループ制御に利用しています。

上の動画ではエンコーダ1周の値を7分割して正弦波を生成している(使用しているブラシレスモータの極数が14 [7ペア])ため、負荷かかって周期がずれてもそのまま回転してエンコーダとの差で振幅上昇して過電流が流れる問題がありました。こちらは改善が必要です。

 

クローズドループ正弦波駆動による回転

先ほどの機構を改善してさらにBlynkアプリでBLEで回転を制御できるようにしました。

構成

構成は前回と同様です。

 

Arduinoコード

 

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 72-80)。

モータの回転位置rotData をデュアルコアのcore0で検出しています。
1周の分解能を14bitから9bit (512)にしています (L. 46)。

可変抵抗でモータの位置period を0~511で指定します  (L. 67)。

起動時に1周期分オープンループで回転させて位相のオフセットを導出します (L. 97-120)。
正弦波1周期はエンコーダの1周の分解能 512/7≒73としています(使用しているブラシレスモータのロータの極数は14 [7ペア])。

位相のオフセット導出後はクローズドループで回転し続けます (L. 122-158)。
オフセットを加味した指定の回転位置 iとエンコーダによる実際の位置の差diff を導出し (L. 123-126)、正弦波の振幅を係数Kをかけて算出します(L. 128, 129)。

エンコーダの値は7分割して使用しています(512/7≒73)。
これによって正弦波の周期からモータ回転がずれても過電流が流れることを回避しています。

U相はオフセットを加味した指定の回転位置 iとして、
V相とW相はそれぞれ120°づつ位相をずらします (L. 131-137)。

位相と振幅に従って正弦波を生成します (L. 140-146)。

ループのディレイ時間periodによって回転速度を制御します (L. 148)。

BottunStateによって正転/逆転を判断し。指定する回転位置 iのインクリメント/デクリメントを判断します (L. 150-157)。

Blynkアプリで、モータ回転方向BottunStateと回転速度period、正弦波振幅のPs制御係数KをBLEで受信します (L. 51-62) 。

 

おわりに

ついに若干変則的ではありますがクローズドループ正弦波駆動による回転制御を実現できました。

いろいろやってみた結論としては回転位置の検出及びフィードバックにはロータの磁極自体をセンスするホール素子の使用がベストと気づかされた。

しかしロータの磁極数や位置はモータによって異なるので、磁気エンコーダと後付け磁気センサによる方法は汎用性は高くなるとも言えます。

正弦波駆動によって低速回転をマスターできたので今後応用を考えたいと思います。

クローズドループ正弦波駆動 その1 ーブラシレスモータ駆動への道5ー

 

前回はオープンループでのブラシレスモータ正弦波駆動を確認しました。
矩形波駆動では出来なかった低速回転が実現され大変満足した次第です。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここからはセンサを用いてモータの回転位置をフィードバックしたクローズドループ正弦波駆動に挑戦したいと考えております。

 

 

オープンループ正弦波駆動 BLE制御

クローズドループにとりかかる前に復習をかねて、BLEで回転速度や正転・逆転切り替えをできるようにしました。

正弦波駆動によってセンサレス矩形波駆動では実現できなかった低速回転が実現されています。

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

 

磁気エンコーダ

クローズドループに向けてモータの回転位置を把握するために磁気エンコーダ AS5048 を購入したしました。

 

AS5048はインターフェースがSPIで付属の磁石の回転を1周 14 bit (16384)でエンコードします。

 

付属の磁石は面の上下が磁極になっていました。
以下では磁石の磁場をマグネットビューアシートでみています。

 

 

専用の磁気エンコーダケースを設計し3Dプリントしてロータに磁石をつけてブラシレスモータと一体化しました。

 

ブラシレスモータは以下を使用。極数は14。

エンコーダ動作

エンコーダの電源とSPI配線をESP32に接続して、動作確認しました。

以下は手回し。

 

AS5048のライブラリとして以下を使用しました。
 https://github.com/eborghi10/AS5048A

 

オープンループで回して、エンコーダ値を見てみました。

エンコーダ値が1巡 (モータが1回転) する間にブラシレスモータのu, v, w相にはそれぞれ7周期の正弦波が印可されています。

これはロータの磁石が14個 (7ペア)のモータを使用したためです。

 

クローズドループ検討

矩形波駆動の時のように速度を指定して回転させる制御を実施したかったのですが現状うまくいっておらず勉強中のため、ここではモータの回転位置を可変抵抗で指定してモータを動かしてみました。

構成

前回のものに磁気エンコーダ  AS5048 を追加した構成となります。

 

Arduinoコード

 

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 44-52)。

モータの回転位置rotData をデュアルコアのcore0で検出しています。
1周の分解能を14bitから9bit (512)にしています (L. 32)。

可変抵抗でモータの位置period を0~511で指定します  (L. 67)。

指定した位置とエンコーダによる実際の位置の差diff を導出し (L. 71)、その正負によって回転させるための正弦波のU相の位相のインクリメント・デクリメントを決定します(L. 73-77)。
V相とW相はそれぞれ120°づつ位相をずらします (L. 79, 80)。

正弦波の振幅は回転位置の差diffに比例させて定めます(P制御) (L. 86, 87)。
比例係数Kはもう一方の可変抵抗で調整できるようにしました (L. 68)。

上位の位相と振幅に従って正弦波を生成します (L. 89-95)。
正弦波の周期はモータが1周(分解能512)する間に7周期となるようにしています。

動作

動作は以下の通り、可変抵抗で指定した位置にモータが移動します。
手でずらしても指定の位置に戻ります。

比例係数Kは2.5ほどで安定動作しました。

参考

 

おわりに

ここでは磁気エンコーダを用いたクローズドループ正弦波駆動で位置指定による回転追従動作を確認いたしました。

回転速度を指定した回転動作は現在猛勉強中ですので、後日できましたら報告したいと考えております。

オープンループ正弦波駆動 ーブラシレスモータ駆動への道4ー

これまでは矩形波駆動によるブラシレスモータ制御を勉強し
前回は回転速度指定によるセンサレス クローズドループ矩形波制御を実現しました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここからはブラシレスモータの正弦波駆動について学びます。

 

 

疑似正弦波

正弦波駆動の下準備としまして、まずはESP32で正弦波出力の生成を確認しました。

正弦波を直接出力できませんので、PWMのデューティを時間で変化させて疑似的に正弦波を実現させます。

以下がESP32による疑似正弦波出力の様子です。

可変抵抗を2個接続して正弦波の周期と振幅も変えれるようにしました。

 

Arduinoコードのコア部は以下のような感じ

2個の可変抵抗で正弦波の周期 period と振幅 ampを指定して、正弦波の周期を48分割してPWMのデューティを計算してledcWriteで出力しています。

コレを位相を120°ずらして3出力にしてドライバ駆動すればモータを回せるはずです。

 

ドライバ基板作製

これまでの正弦波駆動ではパワトラ駆動にはハイサイドとローサイドの入力を指定できるプリドライバIC IR2101を採用していましたが、正弦波駆動のために1入力でハイサイドとローサイドの信号を内部でデッドタイム込みで生成してくれる IR2302 を採用いたしました。

ドライバのNMOSには 2SK4017 を用いました。

1chの構成は以下の通りです。1入力でドライバ駆動できます。

 

まずは1ch分を作製しました。

 

コレに先ほどのESP32による疑似正弦波を入力します。

 

問題なくドライバ出力が確認できましたので残りの2chも作製し、ドライバ完成です。

 

ESP32で位相を120°ずらした3信号を入力して出力を観測しました。出力は抵抗で1/3に分圧して観測しています。
問題なく疑似正弦波が出力していますが、使用したADALM2000のオシロではサンプリングが間に合わず平滑化され正弦波に観えています。

 

オープンループ正弦波駆動

ドライバもできたのでいよいよ正弦波駆動を実施します。

構成

構成は以下の通りです。

 

Arduinoコード

 

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 20-28)。

可変抵抗で正弦波の周期と振幅を設定します (L. 32, 33)。

疑似正弦波を48分割して120°位相をずらして出力します (L. 37-46)。

動作

まずは振幅Maxで動作確認しました。
無事にモータの回転を確認できました。低速回転もできていますが遅すぎると停止します。

 

正弦波の振幅を小さく調整するとかなり低速でも回転できました。

 

おわりに

オープンループでのブラシレスモータ正弦波駆動を確認することができました。
矩形波駆動では出来なかった低速回転が実現され大変満足です。

以下では可変抵抗で回転位置をして動作させました。
センサレスなので絶対位置の精度は高くないはずですが、それなりに動いたので驚きました。

 

次回はセンサでフィードバックをかけてクローズドループでの正弦波駆動を楽しみたいと考えています。

今回は高速回転ができませんでしたが、センサ導入でできるようになるのでしょうか?
今のところ なんとなく正弦波駆動は高速回転に向かないような気がしています。
コントローラの速度にも依存するかもしれませんね。

引き続き勉強進めます。

センサレス クローズドループ矩形波制御 その2 ーブラシレスモータ駆動への道3ー

前回 ESP32をコントローラとしてセンサレス クローズドループ矩形波制御を実現しました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

ここでは更に検討進めましたので報告いたします。

 

 

オンデューティ指定

前回はモータの回転を駆動するドライバのハイサイドトランジスタのPWMオンデューティを指定して制御しました。

この方法では以下のようにモータの負荷によって回転速度は変わってしまいます。

 

そこでここではモータ回転速度を直接指定してのモータ制御を目指します。

またせっかくESP32を使用しているのでBLEで回転速度や正転・逆転切り替えができるようにしました。

 

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

 

回転速度指定

回転速度を指定して実際の回転速度と比較してドライバのオンデューティを制御します。

回転速度には以下の誘起電圧から検知される各モータ位置ステートの平均時間を用いました。

 

回転速度からオンデューティの算出には以下の書籍の5.5.11 回転数制御の節のPI制御の原理を参考にいたしました。

 

以下でオンデューティ$D_{ON}$を定め、係数$K_P, K_I$を動作させながら調整しました。

$$D_{ON} = K_P × (実測回転速度 – 指定回転速度) + K_I × \sum{(実測回転速度 – 指定回転速度) }$$

 

動作

BLEで回転速度を指定して、モータを回転させています。
負荷を与えてもドライバのオンデューティを変えることで回転速度を保っています。

 

Arduinoコード

 

前回のオンデューティ指定版と異なる点はBlynkレガシーによるBLE通信の導入と
回転速度からオンデューティを算出する機能です。

L. 149~155で指定回転速度 rotSpeedと実測回転速度 rotTimeAve を比較してPI制御でオンデューティvolPWM を算出しています。

 

おわりに

ここでは回転速度指定によるセンサレス クローズドループ矩形波制御が実現できました。

回転速度の正確性や応答性は別途評価用に外部エンコーダを導入して確認したいと考えております。

書籍で原理を学習し、実機を組んで原理に基づいてプログラミングすることでブラシレスモータについての理解がかなり深まりました。

今後は別の制御方法についても検証し理解をさらに深めたいと思います。

センサレス クローズドループ矩形波制御 その1 ーブラシレスモータ駆動への道2ー

前回はブラシレスモータをいじくりつつ、駆動ドライバ基板を製作して矩形波駆動でいわゆるオープンループ制御でのモータ回転を楽しみました。

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

ここではモータの回転をセンサレスでフィードバックするクローズドループ矩形波制御での駆動を目指します。

 

 

参考書籍

ここからは以下の電子書籍を参考に進めます。Kindle Unlimitedメンバーでしたら無料で読むことができます。

ブラシレスレスモータの制御方法が各種紹介されPICマイコンでの実例が記載されております。
原理説明も明確になされているのでかなり理解が深まりました。

書籍のChapter8 センサレス 制御(120 °通電方式) を参考に回転制御の実現を目指します。

 

モータ誘起電圧

ここではエンコーダなどの外部センサを用いずに回転位置を把握しながらの矩形波回転制御を目指します。

モータは前回に引き続き以下のセンサのないものを使用します。

 

センサレスの場合はブラシレスモータが回転したときに発生する端子の誘起電圧から回転位置を読み取る必要があります。

参考書籍のブラシレスモータ誘起電圧観測回路を製作し、実際の回転時の発生する電圧を観てみます。
以下が製作した誘起電圧観測用フィルタ回路です。

$v_u, v_v, v_w$でモータ端子の誘起電圧を観測します。

実動作時にはドライバによるPWMオン電圧がモータ端子には印可されますので、誘起電圧はフィルタを介して観測します。
参考書籍にならってフィルタのカットオフ周波数は1.78kHzとしました。
モータ回転制御時のPWM周波数は20kHzとしますので十分スイッチングの影響はカットされるはずです。

$v_n$は各端子間を抵抗で分圧してモータコイルの中間の電圧(中性点電圧)を観測します。

 

モータを電動ドライバで回してフィルタ回路を介して誘起電圧を観測してみました。

 
以下が観測波形。それぞれ120°位相が異なる電圧が観られました。

 

回転位置検出

次にモータに前回製作した駆動ドライバを接続した状態(電源はOFF)で電動ドライバでモータを回して、
誘起電圧$v_u$と中性点電圧$v_n$を観ました。

誘起電圧$v_u$と中性点電圧$v_n$と一致する点がコイルが永久磁石による磁束と直行せずに電磁誘導が起きない位置にあることを示しており、更にモータ端子の誘起電圧が$v_n$より大きいか小さいかでモータの位置を分類することができます。

 

フィルタ回路の出力をESP32のアナログ入力ピンに接続して、各誘起電圧と中性点電圧$v_n$を比較することでモータの回転位置を1周6分割で把握することができました。

 

各誘起電圧が中性点電圧$v_n$より大きければ1を出力し、各状態を分類することで6つの位置ステートに分けれました。

中性点との比較にはヒステリシスのあるコンパレータなどは用いず、ESP32アナログピンによるanalogReadで実施しました。
若干ノイズ的な比較出力もありますが$v_u > v_n、v_v < v_n、v_w > v_n$ならモータ位置①などと明確な場合分けによって6分割できました。
ステートの時間を観測すれば回転速度も把握できることになります。

以上、誘起電圧と中性点電圧比較によってモータの位置と回転速度を把握できるようになりました!

センサレス クローズドループ矩形波制御

いよいよモータ位置と回転速度に基づいて制御を実施します。

構成

ここでの駆動システムの構成は以下の通りです。

スイッチでモータの正転・逆転を変えれるようにしました。
またここではモータの回転速度ではなくドライバのハイサイドON時の20kHz PWMデューティを可変抵抗で指定するようにいたしました。
 

動作

制御の詳細説明の前に動作をご覧ください。

無事に回転制御できました!

可変抵抗による速度制御やスイッチによる正転・逆転切り替えも動作しました。

 

以下は動作時の誘起電圧$v_u$と中性点電圧$v_n$です。
スイッチングノイズの影響を受けておりますが、電動ドライバでモータを動かしたときと同様の波形で制御出来ております。

Arduinoコード

ESP32用に制作したプログラムを元に制御方法説明します。

 

モータ回転時の誘起電圧を検出できないと回転位置の把握ができないため、
コントローラ起動時にモータを少し回して誘起電圧を発生させています (L. 185-201)。

デュアルコアのcore0でモータの位置と速度を算出しています (L. 43-141)。
モータの位置ステートの切り替わり時にIO14をHIGHに立ち上げてIO12でそれを受けて割り込みでドライバを駆動するようにいたしました (L. 159)。

駆動するためのドライバのトランジスタON/OFFステートはスイッチ(IO39)のH/Lで正転用・逆転用に切り替えています (L. 80-116)。

回転速度rotTimeAve は各位置ステートの時間の平均で割り出しています (L. 128-136)。

ステートの切り替えの割り込みでドライバ駆動関数rot() (L. 210-263)が呼ばれます。
rotTimeAveの半分待った後 (L. 216) に位置ステートと正転/逆転に基づいたトランジスタON/OFF設定が実行されます。
位置ステートの時間の真ん中でモータが駆動して次の位置ステートに移行し回転が継続されます。

トランジスタのハイサイドONはledcWriteを用いて20kHz PWMで印可します。分解能は10ビット(0~1023)でオンデューティ設定します (L. 161-171)。
オンデューティは可変抵抗(IO13)で設定するようにしました (L. 224)。

 

おわりに

センサレス クローズドループ矩形波制御が実現できました。
モータの誘導起電力で回転位置や速度を判定しているため、低速では起電力が小さくモータを駆動できませんでした。

 

またここではモータを駆動するドライバのハイサイドトランジスタのPWMオンデューティを指定して制御しましたが、この場合モータの負荷によって速度は変わってしまいます。

次回は回転速度を指定するようにして、実回転速度からPWMオンデューティをコントロールするようにしたいと思います。

SHISEIGYO-1 Walker 弐 を実現させたい俺2 ー歩行検討ー

前回は高トルク中華サーボで足を構築して、リアクションホイールでバランスをとるロボット(2号機)を検討しました。

SHISEIGYO-1 Walkerを実現させたい俺2 ー歩行検討1ー

 

サーボの大きさや動作角度の精度を鑑みて以下のようなガニ股型のロボットにいたしました。

 

ここでは歩行を検討いたしました。

 

 

歩行検討

重心を片足に載せて、他方の足を上げて進行方向に出し重心をシフトして他方の足を戻すを繰り返します。

歩幅は1cmと大きくないですが
流石 20kg・cmと高トルクのサーボなので、かなり高速の重心移動が実現できました。

 

足底をかまぼこ状にしてリアクションホイールでバランスをとっているので、床が傾いても足が滑らなければ平気でバランスして歩行します。

 

SHISEIGYO-1 Walker

1軸のリアクションホイールでバランスとりつつ 2足歩行するロボットは今回で2台目の製作となります。

 

1号機はシリアルサーボ KRS3301を使用しました。 トルクが足りず( 6.0kg・cm)、ゆっくりとした歩行しかできませんでした。

 

今回 高トルクのサーボの使用で速い重心移動が確認できましたので、次回は高トルクでかつ精度の高いサーボを使用して高速での足を交互に進める歩行を目指したいです。

KRS-2572あたりが最適でしょうか。価格も高いので少しづつ集めて製作進めたいと思います。


KRS-2572R2HV ICS - 近藤科学

 

おわりに

ここでは高トルクPWMサーボでのSHISEIGYO-1 Walker 2号機の歩行を検討しました。

課題は残りましたが、それは希望とも言え リアクションホイールによるバランス機構を用いてスムーズに2足歩行するロボットの実現確度はかなり自身の中で向上しました。目を閉じればもう姿が見えているほどです。

ただ理想と考えるサーボを導入するには資金が必要となりそうなのでコツコツ貯めていきたいと思います(過剰な労働は絶対にしたくないので)。

 

余談ですが。今回 SHISEIGYO-1 Walker 弐 をTwitterにアップしたところ、以下のようであると感想をいただきました。

  • チャップリン
  • どじょうすくい
  • タイムボカンエンディングテーマで出てくるマージョ一味

ガニ股がレトロな印象を与えているのでしょうね 😆 

そういえば平成以降ガニ股はとんと見なくなった気がいたします。
現在ガニ股は競合がいない状況ですので何かチャンスがあるかもしれません。

SHISEIGYO-1 Walker 弐 を実現させたい俺1 ーキックオフー

以前に姿勢制御リアクションホイールに足をつけて2足歩行ロボットを製作しました。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

 

1号機のSHISEIGYO-1 Walkerはシリアルサーボ KRS3301を使用しておりました。

ゆっくりではありますが、リアクションホイールによる自律的重心移動動作を実現し2足歩行を実現できました。
但し、サーボのトルクが6.0kg・cm程度と低くホイールを重くできないなどの制約もありました。

ここでは足に使用するサーボモータをかえて2号機 (SHISEIGYO-1 Walker 弐) の製作を実施します。

 

 

サーボモータ入手

AliExpressで高トルクのサーボを購入いたしました。

 

アルミフレームもついて連結しやすく、簡単に足的なモノを構成できました。

ちなみに上の動画で使用してるコントローラは以下。
50HzのDuty 5~10%のPWM信号を出力します。

 

 

合計8個のサーボで両足を構成して、ESP32の評価ボードとモータドライバ PCA9685で動かしてみました。

 

 

屈伸動作は逆運動学で足高さを指定して動かしています。

SHISEIGYO-1 Walkerを実現させたい俺2 ー歩行検討1ー

 

SHISEIGYO-1 Walker 弐 製作

ESP32の評価ボードとモータドライバ PCA9685にIMUセンサMPU6050を加えて、更にブラシレスモータを制御します。

 

組立てました。
1号機のSHISEIGYO-1 Walkerより大きくなりました。
足は同様にかまぼこ状です。

 

倒立も実現できましたが、高さがあるためか少しフラフラしています。

ホイールは市販のアルミホイールを2枚重ねにしておもさが約125gありますが、サーボが強力なので全く問題ありません。
3枚重ねにして更に重くして試してみましたが、モータが熱くなって苦しそうなので2枚にしました。

調整

倒立がフラフラなので、極力ホイール高さを低くしてみました。
足の付け根を上げて、モータ固定位置を下げました。

 

だいぶ安定してきました。

 

BLEでESP32に信号をおくって手動で前後動作させました。

若干不安定で怖いです。。

再調整

色々足の構成を変えて、高さを低くして安定性の向上など目指しましたがあまりうまくいきませんでした。

 

足の高さを変えると足を交差させて足底を一直線にする際に他方の足に干渉してしまうなどの問題がありました。

またこのサーボの場合 角度指定の際にばらつきがあり(正方向と逆方向時に静止位置が異なったりする)、複雑な動作は難しいかなという結論に至りました。

 

方針変更

今回のサーボは高トルクですがサイズが大きく角度の精度も低いので、1号機のように足を交差させての歩行は難しいと判断しました。
以下のような構成にして歩行を目指すことにしました。

足をロールさせるサーボを減らして、足1本あたり3個のサーボ
合計6のサーボを使用して足を構成しています。

 

前後動作も比較的安定しているので、歩行動作にも可能性ありです。

 

ちなみに足底はかまぼこ状なのでホイール回転なしでは自立しません。

 

 

おわりに

ここでは高トルクの中華サーボでのリアクションホイール2足歩行ロボットの製作を開始しました。

製作の過程でサーボの特性を理解しつつ調整を重ねだいぶ方針が固まってきました。

次回は歩行を目指したいと思います。

それではまた。

ロボット犬『Mini Pupperミニぷぱ』ATOM Matrix で動作再検討

前回はコントローラにATOM Matrixを採用してIMUセンサによるバランス制御を実現しました。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

ここではさらに動作の検証を進めましたので報告いたします。

 

バク転

↑このロボットのようにバク転できたらいいなと思い、試してみました。

 

できるわけねーか。。

次だ 次

 

歩行改善

他の4足歩行に比べて、歩行がぎこちないのでロボット犬との距離が以前に比べ縮まった現在、
改めて歩行動作を検討してみました。

これまでは対角線の2本を上げている間に接地している2本を動かして歩行しており、足上げと前後運動が分断し かつ足上げの時間が長く前後運動も等速ではありませんでした。

足上げの時間を短くし、足の前後運動を等速したところ非常にスムーズな歩行が実現されました。
機体のブレも小さく移動もスムーズです。これが正解の歩行方法のようですね。
生き物らしさは失われた気もしますが 🙄 

ランニングマン

4足歩行ロボットといえばSPOTのこの動作ですよね。
そうランニングマン!

 

ミニぷぱでも実現したく以下動画で勉強しつつ。。

 

ランニングマン動作を作りこんでみましたが。。

う~ん。。。イマイチ。。
よくよく見るとランニングマンは全足が一瞬浮く時間があって、その際に足を引いてるのですよね。。

ちょっとミニぷぱでは厳しいのかな?
引継ぎ勉強いたします。

おわりに

ここではATOM Matrixを用いて ミニぷぱの動作を再検証いたしました。

 

だいぶ4足歩行ロボットの理解が深まりましたので、次はミニぷぱ正規の専用回路の動作を検証しラズパイ4での制御に挑戦したいです。

ロボット犬『Mini Pupperミニぷぱ』を ATOM Matrix で堪能

前回はミニぷぱのコントローラにESP32を採用し、足を自由自在に制御できるようになり4足歩行についての理解を深めました。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

ここではコントローラにIMUを内蔵したATOM Matrixを使用してみましたので報告いたします。

 

 

ATOM Matrix

4足歩行について理解が深まりましたので、次は以下を再現してみたいと考えました。

恐らくIMUセンサで姿勢を検出して足の高さを制御して、機体を平行に保っているものと思われます。

 

これまでのESP32を使用した機構にIMUセンサを追加しようとも思ったのですが、
ESP32-PICOとIMUセンサ MPU6886がコンパクトに内蔵されたATOM Matrixを使用することにしました。

コントロール基板

SHISEIGYO-1 専用基板PCA9685モジュールを用いてコントローラを構築しました。

 

注意点

ATOM MatrixとPCA9685モジュール間のI2C通信として
Wire.begin(22, 19); //SDA, SCL
を使用しました。

ATOM内蔵の MPU6886は
Wire1.begin(25,21);  (https://github.com/m5stack/M5Atom/blob/master/src/utility/MPU6886.cpp)
でI2C通信しているのでPCA9685モジュールとの干渉は心配ありません。

但し、M5Atomライブラリを用いて
M5.begin(true, true, true);   (Serial Enable, I2C Enable, Display Enable)
でI2Cを初期化してしまうと
Wire.begin(25, 21, 100000UL);
が実行されPCA9685モジュールと干渉してしまうので
M5.begin(true, false, true);
とする必要があります。

アドレスが違うので同じI2Cピンを用いても良いのですがMPU6886とPCA9685モジュールの既存のライブラリを使用したく、そのライブラリでWre設定がなされてるので通信ピンを分けました。
今後 高速化のためにコアを分けることも見据えております。

動作

ATOM Matrixでも問題なく歩行動作を確認できました。

 

平行制御

いよいよIMUセンサをもちいて機体を平行に保つ制御を実現させます。

ATOM MatrixのIMUの座標軸は以下のようになっています。

X軸とY軸の姿勢角をセンシングして足の高さを制御します。
それぞれの軸の姿勢角と角速度にはカルマン・フィルタを用いました。
 https://github.com/TKJElectronics/KalmanFilter

1軸制御

まずは1軸 (Y軸)での制御を実現させます。
なかなか制御がうまくいかず。。

 

いろいろ制御方法を試行錯誤してる際にサーボが暴走しPCA9685モジュールの逆起電力防止PMOS燃えて動かなくなりました。。煙出たから。。。

しょうがないのでPMOS外してショットキーダイオードをぶち込みましたww
あくまで再購入品が届くまでの応急処置です(しかし こういったイレギュラーな状況下での対応にエンジニアの差というものが出ます)。

 

P制御

センシングしたY軸の角度$θ_Y$から機体を平行にするための足の移動量$h_Y$を以下で算出し制御してみます。

$$h_Y = h_{Y-1} + {Kp}_Y × \sin{θ_Y} $$

$$   但し、h_{Y-1}:直前に算出した移動量、 {Kp}_Y:係数$$

姿勢角から高さ変化量を導出して随時足して目標値に収束させます。
sinをとる必要はなさそうですが何となくそうした。

 

地面の傾きに追従して機体を平行に保とうとしますが、まだぎこちないです。

 

PD制御

さらにY軸の角速度$ω_Y$もフィードバックさせてみます。

$$h_Y =h_{Y-1} + {Kp}_Y × \sin{θ_Y + {Kd}_Y ×ω_Y / 100.0}   但し、{Kd}_Y:係数$$

係数${Kd}_Y$が大きい値にならないように100.0で割っています。

 

かなりヌルヌルと追従できるようになしました!

2軸制御

同様にX軸についてもセンシングして足の高さを制御し、2軸での平行追従制御を実現させました。

 

おわりに

IMUを内蔵したATOM Matrixをコントローラに採用することで、やってみたかったバランス制御が実現できました。

IMUのYaw角センスで旋回制御して常に同じ方向を向くのもやってみたかったのですが、MPU6886のドリフトが大きく実現できませんでした。
違うセンサでいつか実施したいですね。

ロボット犬『Mini Pupperミニぷぱ』ESP32で歩行動作検討2

前回はESP32で4本の足の制御を実現し4足歩行を学びました。
ここでは更に深堀します。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

 

 

電源コードレス化

前回は5V ACアダプタから電源供給していましたが、ミニぷぱのバッテリを使用してコードレス化を目指しました。

ミニぷぱには2セルの7.4V LiPoバッテリが搭載されています。

構成

LiPoバッテリからPCA9685モジュールのサーボ電源 (V+) と5V DCDCコンバータに給電し、
PCA9685モジュールのロジック電源 (VCC) とESP32にはDCDCの5V出力で給電します。

相変わらずのブレッドボード。。

部品

動作

電源コードがなくなったので、これでどこにでも行けます。

 

本当に散歩してきました。かわいい。
毎日したい

 

歩行検討

これまでは足の移動を座標指定しサーボが最速で動ける速度で直線的に動かして
遅延時間を設けて動作周期を変えていました。

ここでは足を細かく時間分割して正弦波形で動かすようにしてみました。
正弦波で足を動かすことによって足の方向転換時の加速度を低減を狙っています。

足踏み

足の高さを正弦波形で変えます。

線型的に足を移動して遅延で周期を設けた場合と正弦波形での移動では
正弦波のほうが機体のブレが小さくなりました。

歩行

方向時の足の位置やロール角も正弦波形で動かしてみました。

動作周期が短い場合にはさほど効果を感じませんでしたが
周期を長くするとマイルドな足移動が効いてきました。

正弦波形で動かしているというよりは時間分割で細かく座標していることが大きく効いたようです。
しかし、無駄な加速度は機体のブレに繋がるので正弦波でオールオッケーということにいたします。

 

Arduinoコード

今回作成したESP32用のArduinoコードを以下で公開いたします。
 https://gist.github.com/homemadegarbage/c31722700b58e631aec13b39db416e0b

ESP32によるミニぷぱの制御は当然 オフィシャルなものではありませんので
実施の際には自身でコードを理解・修正し自己責任で宜しくお願い致します。
過度なサポート要求もお断りさせていただきます。

コードの概要は以下の通りです。

Blynk

スマホのBlynkアプリを用いてBLE通信で歩行動作指示を送ります。

以下のESP32のBLE用サンプルコードを参考にプログラミングしました。
 https://github.com/blynkkk/blynk-library/blob/master/examples/Boards_Bluetooth/ESP32_BLE/ESP32_BLE.ino

 

以下はミニぷば用Blynkスマホアプリ画面

歩行時に上げる足の高さ(WALK HEIGHT)や歩幅(STRIDE)、旋回時のロール角度(TILT)などを指定しています。

ボタンで足踏み(STEP)やジャンプ(JUMP)動作を起動

ジョイスティックで前後(walkAd, walkBack)や旋回(walkL, walkR) 歩行します(ヴァーチャルピン V20使用)。

PCA9685

PCA9685モジュールで12個のサーボを制御します。
ESP32からI2CでPCA9685モジュールにサーボの角度指示をします。

PCA9685用のArduinoライブラリは以下の秋月電子のサイトで公開されているものを使用しました。
 https://akizukidenshi.com/catalog/g/gK-10350/

 
サンプルコードを参考に以下のように12個のサーボを制御しました。

逆運動学

足の移動は以前検証した通り、足のロール角と足の前後位置と上下位置を指定して、
逆運動学によってロール角以外のサーボの角度を算出します。

得られたサーボ角をPCA9685用のサーボ制御関数 [servo_write()]に代入してそれぞれのサーボを動かします。

足の座標とサーボ角度算出の式は以下の通り

 

腿の長さ$L_1$は50mm、下肢の長さ$L_2$は56mmでした。
足のロール角を$θ_0$、腿の角度を$θ_1$、下肢を動かすサーボの角度を$θ_2$とします。

 

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

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

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

${L_2}^2 = {L_1}^2 + {l_d}^2 – 2{L_1}{l_d}\cos{θ_1}’  $

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

$$θ_1 = φ – {θ_1}’  = φ -\cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’} \right)$$

$$          l_d = \sqrt{x^2 + {z’}^2}$$

$$  高さを足のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

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

${l_d}^2 = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos\left({\pi-θ_2+θ_1}\right) = {L_1}^2 + {L_2}^2 + 2{L_1}{L_2}\cos\left({θ_2-θ_1}\right) $

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

以上より右前足の逆運動学の計算関数は以下のようになります。

サーボ角度指定の際に初期位置を補正するoffset[]も加算しています。

残り3本の足についても同様に関数を用意して制御します。

足移動

ここでは足移動の際に正弦波形で細かく座標移動を行いました。

時間分割による座標変化のコードは以下の書籍のサンプルコードを参考にしました。

 
書籍のサンプルコードは以下でダウンロードできます。
_710_humanoide_BNO055_KO_mega_walking.inoを参考にしました。
 https://www.ohmsha.co.jp/book/9784274222115/

例えば、足踏みの場合は以下のようになります。

periodで周期の1/4時間を指定して足の高さを正弦波で上下しています。

それぞれの動作も同様に正弦波で移動させています。

 

おわりに

コントローラにESP32を採用し、足を自由自在に制御できるようになったため
4足歩行についての理解が非常に深まりました。

本当に素晴らしいキットをいただいたことを幸せに思います。

ラズパイによる正規の制御の学習進めたいと思います!

あー楽しいね!

ロボット犬『Mini Pupperミニぷぱ』ESP32で歩行動作検討1

前回はラズパイ4とミニぷぱ専用基板での制御を一旦諦め、邪道ですがESP32での逆運動学による足制御を実施しました。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

前回は足1本のみで動作確認しましたが、ここでは足4本を動かして歩行動作を確認しましたので報告いたします。

 

 

ESP32で4本足制御

12個のサーボをPCA9685モジュールに接続してESP32で制御します。

 

相変わらずのブレッドボードww
電源は5V ACアダプタで供給

部品

動作

前回同様にBlynkアプリで足の位置をスマホで指定してBLE通信でサーボを制御しています。

 

これで遂に4本の足を自由自在に動かすことができるようになりました。

 

歩行動作検討

正規のミニぷぱの歩行動作を参考にしつつ4足歩行を実現させます。

足踏み

足踏みは対角の足を交互に上げ下げすることで実現できました。

前進後進

足踏みを応用して、対角の足2本を上げている間に接地している足を後ろ(もしくは前方)に動かすことで歩行できました。

横移動

左右への横移動は 対角の足2本を上げている間に接地している足のロール角を一方に傾けることで実現できました。

ジャンプ

機体を下げて、急峻に足を伸縮させてジャンプ動作を確認することができました。
カスタムサーボのトルクの高さをうかがうことができます。

 

おわりに

ついに4足歩行を自身の手で実現することができました。

これまで4足歩行がどのように実現されるか分かっておりませんでしたが、動画でロボット犬の歩行の様子を凝視したり 実機で色々試したりすることで大変理解が深まりました。

さらに学習をすすめ ぷぱっていこうと思います。

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

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

ロボット犬『Mini Pupperミニぷぱ』カスタマイズ下準備

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

 

 

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モジュールを使用しました。

 

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

 

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

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

 

逆運動学で足を制御

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

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

 

腿の長さ$L_1$は50mm、下肢の長さ$L_2$は56mmでした。
足のロール角を$θ_0$、腿の角度を$θ_1$、下肢を動かすサーボの角度を$θ_2$とします。

 

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

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

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

${L_2}^2 = {L_1}^2 + {l_d}^2 – 2{L_1}{l_d}\cos{θ_1}’  $

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

$$θ_1 = φ – {θ_1}’  = φ -\cos^{-1} \left(\frac{{L_1}^2+{l_d}^2 – {L_2}^2}{2{L_1}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’} \right)$$

$$          l_d = \sqrt{x^2 + {z’}^2}$$

$$  高さを足のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

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

${l_d}^2 = {L_1}^2 + {L_2}^2 – 2{L_1}{L_2}\cos\left({\pi-θ_2+θ_1}\right) = {L_1}^2 + {L_2}^2 + 2{L_1}{L_2}\cos\left({θ_2-θ_1}\right) $

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

 

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

動作

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

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

 

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

 

おわりに

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

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

実に楽しみです!

SHISEIGYO-1 Walkerを実現させたい俺5 ー歩行検討3ー

前回はリアクションホイールを用いたオートバランスによる前進歩行を確認することができました。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

その他モーションも作りましたので報告いたします。

 

 

後進

後ろ歩きもできるようになりました。

 

旋回

旋回動作も追加。
後ろ足を上げて歩行ラインから少し外しておろして戻すを繰り返してます。

 

おわりに

歩行モーションを追加し、これによってSHISEIGYO-1 Walkerは四方八方どこでも行けるようになりました!

電源コードが邪魔ですね。。
バッテリ搭載などすると今のサーボではトルクギリギリなので、
新たな部品が届き動作検証後にコードレス化も検討したいです。

SHISEIGYO-1 Walkerを実現させたい俺4 ー歩行検討2ー

前回は足の座標からバランスする姿勢角を算出しての制御を確認いたしました。

SHISEIGYO-1 Walkerを実現させたい俺3 ーバランス動作検討ー

ここでは歩行動作の最終調整を実施いたしました。

 

 

機体調整

これまでいじってきて改善点が見えてきましたのでもろもろ調整

ホイール変更

足をより曲げれるようにホイール径を小さくしました。
フレームを3Dプリントしてナットで重さを追加します。

アルミホイール(2枚重ね)  直径 120mm、重さ124g
から
直径 106mm、重さ91gのホイールになりました。

足の調整

ホイールの径と重さの減少によってトルクが落ちましたので
足をなるべく低くするべく、
足先ピッチのアームを26mmから20mmに変更しました。

動作

リアクションホイールの制御ゲインも調整し動作バッチリです。

 

歩行検討

前回検討した足座標からバランス姿勢角をオフセットさせる手法を歩行に応用しようと思いましたが、天板を下げる方向にはオフセットできるが上げる方向にはサーボトルク不足で出来ないため今回は見送りました。

重心移動は 倒立角動的再調整システム (IDRS)で踏ん張ってもらうことにします。

歩行シーケンス

以下のシーケンスを組んで歩行動作を実現しました。

  • 重心を前方に移動
  • 後ろ足を上げて前に移動
  • 後ろ足をさらに前に出して歩行ラインに接地、同時に前足を下げる
  • 重心を前に移動
  • 足を逆にして上記を繰り返す

IDRSによる自律的重心移動もうまくいっております。

 

おわりに

リアクションホイールを用いたオートバランスによる歩行を確認することができました。

しかし課題はまだ多く、早い歩行は難しい状況です。
課題は以下の通り

  • サーボのトルク不足

シリアルサーボでトルクの大きいものを購入となるとかなりの出費です。。
安価なPWMサーボでいつか検証しようと思います。

足のサーボのトルク不足が解消されれば、リアクションホイールのトルクも大きくでき、バランス安定度や重心移動精度が増し高速歩行も可能であると考えております。

よいサーボモータを入手次第また報告いたします。
またお会いいたしましょう!

SHISEIGYO-1 Walkerを実現させたい俺3 ーバランス動作検討ー

前回はSHISEIGYO-1 Walkerの足構造と逆運動学を再検討し、ヨチヨチではありますが歩行動作を確認いたしました。

SHISEIGYO-1 Walkerを実現させたい俺2 ー歩行検討1ー

ここではバランス動作について検討します。

 

 

バランス動作検討

使用している姿勢制御装置にはホイール回転数から動的に目標姿勢角を調整するIDRS機能がついており、床の傾きやゆるやかな外乱に耐性を持たせております。

 

倒立角動的再調整システム Inverted angle Dynamic Readjustment System (IDRS)については以下の通りです。

 

前回検討したように天板を水平に保ってIDRS機能のみでの制御では、足をホイール回転軸の極力直下に配置するように移動させる花魁道中のような歩行になります。

この手法を最適化してスムーズな歩行を目指してもいいのですが、せっかくなので足の配置の自由度を高める検証をしてみました。

足座標からバランス姿勢角導出

IDRSに加えて接地する足の座標からバランスする角度を算出して制御目標角としてみます。
具体的には接地する足先の座標とホイール回転軸が地面に対して垂直になるように制御します。

SHISEIGYO-1 Walkerは足の位置を 股関節のロール角$θ_0$と足の前後(X軸)位置と上下(Z軸)位置で指定します。

バランスオフセット角$θ_{offset}$は以下の図より

   $\tan θ_{offset}= \frac{z \tan{θ_0}+29}{34.6+28+z}$ から

$$θ_{offset} = \tan^{-1} \left(\frac{z \tan{θ_0}+29}{34.6+28+z}\right) で導出されます。$$

このオフセット角$θ_{offset}$を制御目標角に付与して制御します。

動作

片足バランス後に 股関節のロール角を変えてみました。

目標姿勢角も変更されいい感じにバランス追従できました。

 

おわりに

ここでは足の座標からバランスする姿勢角を算出してオフセットとして付与しリアクションホイールを制御いたしました。

これにより足の接地位置の自由度は増しました。
しかし この機構をどのように歩行に利用するかはよく検討しないといけません。

なんだか発散しそうになってるけど、ここからがエンジニアリングの醍醐味でありましょうから楽しんでやっていきたいです。

SHISEIGYO-1 Walkerを実現させたい俺2 ー歩行検討1ー

前回はシリアルサーボ (KRS3301) による足とリアクションホイールによるオートバランスシステムで
二足歩行ロボットSHISEIGYO-1 Walker を製作し、片足立ちを実現いたしました。

SHISEIGYO-1 Walkerを実現させたい俺1 ーキックオフー

ここでは遂に歩行に向けて検討を開始します。

 

 

足動作検討

足の動作を検討します。
前回に引き続きホイールのバランス制御を調整し、片足立ち時の他方の足の動作を確認しました。

 

両足を1直線上に配置して前後動作を確認しました。

 

サーボ配置検討

片足立ちと前後の重心移動が確認できました。

歩行時には足を交差させて移動させる必要があり、現状では膝が90°以上曲げられず動作に制限が生じるので
膝のサーボの配置を変更しました。

これで膝がかなり曲げられるようになり、自由度が増しました。

 

逆運動学

足の移動に正確な座標指定が必要と考え、逆運動学の再考を実施しました。

股関節に直交軸フレーム を使用したため$L_1$は0です。

 

ここでは股関節のロール角$θ_0$は直接指定することにしました。

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

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

${L_3}^2 = {L_2}^2 + {l_d}^2 – 2{L_2}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{{L_2}^2+{l_d}^2 – {L_3}^2}{2{L_2}{l_d}} \right) $

$$θ_1 = φ + {θ_1}’  = φ +\cos^{-1} \left(\frac{{L_2}^2+{l_d}^2 – {L_3}^2}{2{L_2}{l_d}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z’ – L_1 – L_4} \right)$$

$$          l_d = \sqrt{x^2 + \left(z’ – L_1 – L_4\right)^2}$$

$$  高さを股関節のロール角で補正 z’ = \frac{z}{\cos{θ_0}}$$

 

膝のサーボの角度$θ_2$も余弦定理を用いて導出します。

${l_d}^2 = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos{θ_2}’ = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos\left({\pi-θ_2}\right) = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos{θ_2}$

$$θ_2 = \cos^{-1} \left(\frac{{l_d}^2-{L_2}^2 – {L_3}^2}{2{L_2}{L_3}} \right)$$

 

足首のサーボの角度$θ_3$は足を平行にするために

$$θ_3 =θ_2-θ_1$$

 

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

 

手動による歩行動作確認

スマホアプリBlynkでBLEを介してSHISEIGYO-1 WalkerのコントローラESP32に左右の足の座標を送って
手動で歩行動作の確認を実施しました。

まだヨチヨチですが、なんとか歩けましたww

 

使用したBlynkアプリの画面

 

おわりに

ここではSHISEIGYO-1 Walkerの足構造と逆運動学を再検討し、ヨチヨチではありますが歩行動作を確認することができました。

よりスムーズでスタイリッシュな歩行を目指しておりますので、引き続き検討実施いたします!

SHISEIGYO-1 Walkerを実現させたい俺1 ーキックオフー

先日 2軸の姿勢制御モジュール SHISEIGYO-2を用いて二足歩行ロボット(SHISEIGYO-2 Walker)を製作いたしました。

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

ここでは新たな2足歩行ロボットの実現を目指して検討を進めます。

 

 

SHISEIGYO-1 Walker

SHISEIGYO-2 Walkerでは足の高さが4cm程度まででの倒立保持がやっとでした。
これ以上の足の高さにするにはホイールのトルクを大きくする必要がありそうですが
2つの大きなホイールとモータ重量を支える長い足の実現は難しそうです。

 

そこで1軸のリアクションホイールを用いて足の長い二足歩行ロボットを目指すことにしました。

足には以前検討したシリアルサーボ(KRS3301)による機構を応用したいと思います。

歩行検討2 -シリアルサーボと距離を詰めたい俺7-

 

1軸リアクションホイールを用いた2足歩行ロボット SHISEIGYO-1 Walkerのイメージは以下のような感じ


↑コラ―ジュですw

 

1軸 姿勢制御モジュールの検討

1軸 姿勢制御モジュール SHISEIGYO-1 を応用して、長い足を支えるための検討を実施します。

ブラシレスモータとコントロール基板の箱をつくって、三角形の足を両面テープで貼り付けて倒立高さの実験を行いました。

コントローラ基板はSHISEIGYO-2 Walkerのモノを1軸用に改修しました。
12cm径のフライホイールを使用しました。

 

間に木の棒を挿入して高さを上げて実験。

15cm以上の高さでも倒立を確認することができました。
このくらいであればシリアルサーボによる足も導入できそうです。

 

足の検討

以前製作したシリアルサーボによる足にリアクションホイール部を載せて歩かせてみました。

問題なく歩けました。大きなトルク不足はないようで安心しました。

 
軸の自由度を変えずに足高さを低くするために直交軸フレームの導入を検討しました。

 

直行軸フレームを足の付け根に導入しました。
歩行も問題なく、高さは20mmほど低くできました。

 

参考

 

倒立検討

リアクションホイール部を載せての歩行が確認できましたので、ホイールによるバランス倒立動作の確認を実施します。

足先は以下のようにかまぼこ型にして、足首ロール用のサーボモータは除去しました。片足が5軸から4軸となります。

 

片足立ちの姿勢でサーボを固定して倒立動作を確認しました。

無事に倒立できました。
サーボ軸が若干きしむので少しふらつきますが踏ん張ってくれています。

 
より安定性を高めるためにフライホイールを2枚重ねにしました。

 

他方の足をゆっくり動かしてみました。

足を急に動かすと、バランスを崩すので現状で歩行はまだ難しく調整が必要です。

 

おわりに

ここでは1軸 姿勢制御モジュールを用いた2足歩行ロボット SHISEIGYO-1 Walker の検討を行いました。

とりあえず片足倒立は実現できましたので歩行に向けて検討を進めたいと思います。

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

前回はSHISEIGYO-2 Walkerで逆運動学による歩行を確認しました。

33日後に2足歩行ロボットを完成させたい俺

上下前後を正弦波形で回転するように移動させる歩行から、もう少し人間らしい歩行を目指してみました。

 

 

足の前後

まずは片足で足をどれほど前後できるのか確認してみました。

足の高さ30mmで ゆっくりとですが前後 10mm ~ -10mm 移動できました。

支点動かして機体傾けるこの動作は面白いですね。
今後なにかに応用できそう。

 

歩行検討

片足を上げて前方に下げると同時に他方を後ろに下げて前進する人間っぽい歩行を目指します。

足の座標は以下のように動かしてみます。

動作

片足接地時にも足を後方に下げているので常に前進しており、割と自然な歩行になったのではないでしょうか?
足の高さ30mmで前後 5mm ~ -5mm 移動で歩行できました。

リアクションホイールの制御ゲインや回転検出ロータリエンコーダの4逓倍化などでオートバランスの精度向上を図りましたが前後移動は ±5~6mmが限界でした。
これ以上大股で歩くには足高さを低くしたりフライホイールのトルクを上げるしかなさそうです。

 

おわりに

ここではSHISEIGYO-2 Walkerの方向の再検討を実施いたしました。

安定性や歩幅の向上が実現され大変喜んでいます。

 
でも以前のほうがロボットらしくていいかなとも思わなくもない(;^ω^)