予算3万円でつくる BLDC 2足歩行ロボット 第5号
ー2足歩行ロボットの動作を楽しむ1ー

Home > 電子工作 > 予算3万円でつくる BLDC 2足歩行ロボット 第5号ー2足歩行ロボットの動作を楽しむ1ー
すき 0
うんこ 0

前回は2足歩行ロボット HM-01 を完成させて PS4コントローラによる足動作を楽しみました。

予算3万円でつくる BLDC 2足歩行ロボット 第4号ー2足歩行ロボット完成ー

 

ここでは動作シーケンスを組んで足踏みや歩行動作を楽しみます。

 

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

ATOM用Arduinoコード

前回からATOM用のコードのみを変更して足踏み・歩行動作を実現します。
動作はPS4コントローラから指定します。

まずはコードを紹介します。
詳細は次節以降に記載します。

環境バージョンはこれまでと同様で以下の通りです。
 Arduino IDEバージョン:ver. 1.8.19
 ESP32ライブラリ:ver. 2.0.13
 M5Atomライブラリ:ver. 0.1.3
 Kalman Filter Library :ver. 1.0.2
 PS4Controllerライブラリ:ver. 1.1.0
 SimpleFOCライブラリ:ver. 2.3.3

 

動作モードを enum class ModeT (L. 1, 131) で定義して、setMotion() 関数内 (L. 134~337)で動作を切り替えています。
モードは以下の4種でPS4コントローラで切り替えます (L. 996~1011)。

  • Idle:初期姿勢 (x0 = 10mm, z0 = 99mm) 
  • Step:足踏み ×ボタン
  • Ad:前進 十字キー 上ボタン
  • Back:後進 十字キー 下ボタン

足踏み、前後進の動作詳細は次節以降で説明します。

 
足運動時のウェイトシフトや足底地面接地をモータトルク値(電流値)の検知で実施します (L. 536~553) 。詳細は次節。
 CAN ID 0x211:左足下腿モータのトルク受信
 CAN ID 0x212:右足下腿モータのトルク受信

トルク(モータ負荷電流)の生データにはノイズが乗っているためSimpleFOCのLPFライブラリを使用してフィルタリングしています (L.10, 36~41, 544)。
 tf:時定数(応答の遅さ)
  tfを大きくすると → 出力はなめらかになるが応答が遅れる
  tfを小さくすると → 応答は速いがノイズが残る

書き込み

ATOM Matrixに書き込む際にはモータに給電しないようにATOMの電源ラインは外してください。

 

ボードは”M5Stack-ATOM”を選択
PS4Controllerライブラリのサイズが大きいのでPartition Schemeは”No OTA (Large APP)”を選択

ブラウザアプリ

ATOM MatrixのAPモードでWiFi接続してブラウザから各種パラメータを指定します。

  • スマホもしくはPCのWiFi接続設定でSSID ”ATOM”に接続
     パスワード:password

  • ブラウザで”192.168.22.90”にアクセス

 

dx1:歩行時の歩幅指定  [mm]
dx2:歩行時の足蹴り上げ前後方向の幅  [mm]
dz1:歩行時の足蹴り上げ高さ  [mm]
dz2:足上げ高さ [mm]
delay1:足蹴り上げ時間 [msec]
delay2:足上げ時間 [msec]
th:トルク接地判定しきい値
tf:トルクLPF 時定数

動作

起動後、PS4コントローラと同期して動作を楽しめます。

 

足踏み

8つのMotionステートで足踏み動作を実現しています。

Motion番号 動作内容 補間 or 待機 条件・遷移先
0 左足を初期姿勢 (x0, z0) に戻す 即時 Motion = 1
1 右足を蹴り下げる (0 → dz1) delay1 [ms]でリニア補間 終了後 Motion = 2
2 右足を上げる (dz1 → -dz2) delay2 [ms]でリニア補間 終了後 Motion = 3
3 右足接地待ち (x0, z0) に保持 接地検出(stateJudge==1)
または 1秒経過 → Motion = 4
4 右足を初期姿勢 (x0, z0) に戻す 即時 Motion = 5
5 左足を蹴り下げる (0 → dz1) delay1 [ms]でリニア補間 終了後 Motion = 6
6 左足を上げる (dz1 → -dz2) delay2 [ms]でリニア補間 終了後 Motion = 7
7 左足接地待ち (x0, z0) に保持 接地検出(stateJudge==1)
または 1秒経過 → Motion = 0

足上げは事前に地面を蹴ってから実施することで、足上げ高さを稼いています。
要するに蹴りでウェイトシフトを容易にしています。

左右動作の切り替えは足モータのトルクによる足底地面接地検知で実施しています。
左右の下腿モータトルクをCAN通信で受信しています。

 

左右のトルクの差で接地を検出

ここでは左右のトルク差の変化分をしきい値として接地判定しています。
変化分で判定することで地面の凸凹の影響を低減しています。

動作

PS4コントローラの×ボタンで足踏みします。

転ばないように蹴り上げ量 (dz1)や蹴り上げ時間 (delay1) と
足上げ量 (dz2)や足上げ時間 (delay2) をうまく調整してください。

 

前後進

足踏み動作に前後方向動作を組み合わせて前後進を実現します。

前進時のステートは以下の通り

Motion x方向の動作 z方向の動作 補間 or 待機 遷移条件
0 左足:x0 + dx1
右足:x0 – dx1 
両足とも z0 即時 Motion = 1
1 右足:-dx1 → -dx1 – dx2

右足:0 → +dz1

delay1で補間 終了後 Motion=2
2

左足:+dx1 → -dx1
右足:-dx1 – dx2 → +dx1

左足: z0 固定
右足:+dz1 → -dz2
delay2で補間 終了後 Motion=3
3 左足:x0 – dx1
右足:x0 + dx1
両脚とも z0 固定 接地検出(stateJudge==1)
または 1秒経過 → Motion = 4
4 左足:x0 – dx1
右足:x0 + dx1
両脚とも z0 即時 Motion=5
5 左足:-dx1 → -dx1 – dx2 左足:0 → +dz1 delay1で補間 終了後 Motion=6
6 左足:-dx1 – dx2 → +dx1
右足:+dx1 → -dx1
左足:+dz1 → -dz2
右足:z0 固定
delay2で補間 終了後 Motion=7
7 左足:x0 + dx1
右足:x0 – dx1
両脚とも zZero 固定 接地検出(stateJudge==1)
または 1秒経過 → Motion = 0

地面を蹴る際にdx2で進行方向と逆に斜めにすることで推進力を与えています。
dx1が前後の移動量で1歩の歩幅は2 × dx1 となります。

後進はx方向を反転して実現。

動作

PS4コントローラ十字キーの上下ボタンで前後進します。

 

演習問題

1-パラメータ調整

ATOM Matrixのブラウザアプリやコードを修正するなどして歩行パラメータ値を変更して動作にどう影響するのか体験してみよう。

2-動作検討

次回は旋回動作や横移動、ジャンプを紹介します。
予習として事前に動作を考えてみましょう。

 

おわりに

本号では2足歩行ロボット HM-01 の足踏み・歩行動作を楽しみました。
上手にウェイトシフトして ちょこまか歩いて可愛いです。

 

次回はさらに歩行をアレンジして旋回や横移動を楽しみたいと思います。
加えてBLDCの即効性を活用してジャンプ動作にも挑戦します。

 

コメントはこちらから

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

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