予算3万円でつくる BLDC 2足歩行ロボット 第3号
ー股関節を楽しむー

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

前号ではロボットの足を1本完成させて、IKによる制御を楽しみました。

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

 

本号ではロボの股関節を製作します。

 

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

はじめに

ここからは股関節部の組み立てを手順通りに記載します。

外部コントローラ ATOM Matrixを用いてIMUによる姿勢検知で股関節の制御を楽しみます。

ATOM Matrix内蔵のIMUの姿勢角データを股関節のコントローラ(MKS ESP32 FOC V2.0)に送信してBLDCモータを制御します。
通信にはCAN通信を使用します。

 

本号で必要な部品

  • BLDCコントローラ MKS ESP32 FOC V2.0 :1個

      
  • BLDC 5010 360KV:2個

     
  • 磁気エンコーダ AS5600:2個


     

  • LiPoバッテリ 3セル 11.1V:1個
    本号では安定化電源 (12V)の使用を想定していますが、完成ロボはLiPoバッテリを使用します。

      
  • CANコントローラボード:2個

     
  • ATOM Matrix:1個

     
  • ATOM Mate:1個
    ATOM Matrixの機体固定に使用します。

     
  • 4ピン GHコネクタケーブル 150mm:2本
    MKS ESP32 FOC V2.0の外部配線として使用

     
  • その他
    10mm M3ねじスペーサ:4個
    25mm M3ねじスペーサ:4個
    M2 12mm タッピングネジ:2本
    M2 14mm なべネジ:2本
    M3 5mm なべネジ:8本
    M3 6mm なべネジ:18本
    M3 10mm なべネジ:4本
    M3 14mm なべネジ:8本
    M3 25mm なべネジ:2本
    M3 30mm なべネジ:4本
    M3 40mm なべネジ:2本

 

ロボット完成に必要な主な部品

AliExpressでの部品購入は到着までに日数がかかるので、あらかじめロボ完成までの部品を購入しておきたい方のために主な必要部品をまとめておきます。

# 品目 数量
1 MKS ESP32 FOC V2.0 3
2 BLDC 5010 360KV 6
3 磁気エンコーダ AS5600 6
4 ATOM Matrix 1
5 CANコントローラボード 4
6 4ピン GHコネクタケーブル 150mm 4
7 LiPoバッテリ 3セル 11.1V 1

 

3Dモデル

今回使用する追加の筐体の3Dモデルデータは以下で販売しております。
zipファイルでダウンロードされますので解凍してご利用ください。

[予算3万円でつくる BLDC 2足歩行ロボット] 第3号用 3Dモデルデータ

 

データには8個のstlファイルがあり atomCover.stl,  boardFix2.stl, 
LiPoBoard.stlは1個づつプリントし、その他は2個づつ印刷してください。

創刊号のモータギアモデルgearFix.stl、gear10.stl、M2-52.stlも2個づつ使用しますのでご用意ください。

股関節組立て

股関節を組んでいきます

body1.stlにモータやエンコーダを固定します。これを2組作ります。
M3ネジで固定するので固定穴をねじ切りします。

以下の赤丸で示す穴をM3サイズでねじ切りしてください。
下の写真の上部2か所もM3サイズでねじ切りします(スペーサ用)。

 

足の時と同様にBLDC 5010 360KVの回転軸裏面に磁気エンコーダ付属の磁石を接着します。ここでは瞬間接着剤を使用しました。

 

5010 360KV をbody1.stlにねじ止めします (M3 6mm なべネジ:4本ずつ)。

モータにはgearFix.stl (創刊号付属モデル)をねじ止めしています (M3 5mm なべネジ:4本ずつ)。

 

足の時と同様に磁気エンコーダAS5600に MKS ESP32 FOC V2.0付属の5ピンコネクタラインを加工して配線します。
MKS ESP32 FOC V2.0とAS5600が以下のようにつながるよう配線してください。
1線余るので切断なりで除去
 3.3V-VCC
 GND-GND
 SDA-SDA
 SCL-SCL

コネクタ配線した磁気エンコーダをbody1.stlにねじ止めします (M3 6mm なべネジ:4本ずつ)。

 

組んだ body1.stl 2組をM3 14mm なべネジ (4本) で合わせて両サイドから固定します。

 

上部にM3ネジ10mm高さスペーサ (4本)をはめます。

ここでは金属のスペーサを使用しました。

 

LiPoBoard.stlをスペーサにねじ止めします (M3 10mm なべネジ:4本)。

LiPoBoard.stlの4つ角の穴はM3ネジサイズでねじ切りして、25mm高さねじスペーサ (4本)をはめます。
このスペースにLiPoバッテリを配置します。

ここでは10mmと15mmのナイロンねじスペーサを使用しました。

 

boardFix2.stlをスペーサにねじ止めします (M3 14mm なべネジ:4本)。
赤丸の筒穴はM3ネジサイズでねじ切りしてください。

 

M2 12mm タッピングネジ (2本ずつ)でgear70.stlとbody3.stlをねじ止め。

 

body2.stl の突起をgear70.stlの穴に通して、body1.stlにねじ止め (M3 25mm なべネジ)。
body3 .stlの穴にM3-78を通して、body1.stlにねじ止め (M3 40mm なべネジ)。

 

次はMKS ESP32 FOC V2.0 を実装となりますが、その前にコードを書き込みます。

 

Arduinoコード

MKS ESP32 FOC V2.0 実装前に股関節用のコードを書き込みます。

今回の環境バージョンはこれまでと同様で以下の通りです。
 Arduino IDEバージョン:ver. 1.8.19
 ESP32ライブラリ:ver. 2.0.13
 SimpleFOCライブラリ:ver. 2.3.3

このコードはFOC(ベクトル制御)によってモータの回転位置を指定して制御します。
回転位置は微調整用ブラウザアプリからとCAN通信によってコントロールします。

モータの基本制御はFOC回転位置制御であり足の時とほぼ同様です。
股関節では外部からCAN通信で回転角度指定をするので足のコードとの差分となるCANのコードを中心に説明します。

L. 5 ESP32のTWAIドライバでCAN通信を実施します。

L. 44, 45 モータ駆動の電圧制限と電流制限はそれぞれ 3V, 6Aとしています。

L. 310~350 ESP32デュアルコアのcore0でCAN通信を設定・ドライバ実行します。
 通信のIOはMKS ESP32 FOC V2.0の外部コネクタの一つを使用します
  TX:IO 17、RX:IO 16とします (L. 312, 313)。

 伝送速度は 1Mbps固定 (L. 325)
 受信は角度指定値のID 0x123のみ通すようにフィルタリング (L. 327~332)

 
L. 385~394 CANで回転角度を受信(ID 0x123)
 M0、M1のモータ2個分の角度を受信して±40°で制限

 
L. 553, 554 モータ回転
 モータはCAN通信での指定 (angel)とブラウザアプリによる微調整 (angleOffset)で回転します。

 股関節のギア比は7.0なのでangelによる角度はギア比で換算しています。

 

MKS ESP32 FOC V2.0 実装

boardFix2.stlに コードを書き込んだMKS ESP32 FOC V2.0 を載せてモータとエンコーダを配線します。
下の写真のように前方を矢印の方向として、前方のモータがmotor0(M0)、後方がmotor1(M1)となるように結線します。

MKS ESP32 FOC V2.0は頭を小さくカットしたナイロンねじで固定しましたが後ほどatomCover.stlでねじ止めするので、ここでは仮止めとなります (必須ではありません)。

 

モータ配線は足と同様に左から黄色、黒、赤の順で接続します。

 

MKS ESP32 FOC V2.0の電源コネクタに安定化電源 (12V)や3セルLiPoバッテリを接続して給電するとモータの初期化動作が実行されます。

初期化動作時にチェック結果はシリアル出力されるので値を控えます。

 

Arduinoコードの初期化動作設定部 (L. 513~518)にシリアル出力で得たオフセット値と回転方向を記載しコメントアウトを解除して書き込みます。

 

これで電源印可時の初期化動作時のモータ回転はなくなります。

モータは初期位置の-π (-180°)で停止しますので、位置をわかりやすくするために以下のようにマーキングすることをおすすめします。

 

gear70.stlのアームがだいたい水平になる位置でモータのgearFix.stlにgear10.stl(創刊号付属モデル)をはめます。
この際にモータは初期位置であることをご確認ください。
body2.stl穴にM2-52.stl(創刊号付属モデル)を通してM2 14mm なべネジでギアを固定します。

 

水平の目安としてgear70.stlにマーキングを入れてあります。
逆三角マークの下頂点がbody2.stlの上辺にかかる点でアームが水平となります。
ここではだいたい水平にできれば問題ありません。ブラウザアプリのangleOffsetで微調整できます。

 

ブラウザアプリで微調整

ESP32のAPモードでWiFi接続してブラウザから回転位置を指定します。

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

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

angleOffset0とangleOffset1の値 [°]を変更することでモータ回転位置をそれぞれ制御できます。
アームが水平になるように微調整してください。

制御ループの角度PIDや速度PIDパラメータも調整できるのでぜひご自身で調整して動きをご確認ください (以下に演習あり)。

 

以上で概ね股関節が完成しました。

 

CAN通信

続いてCAN通信でモータを制御するための加工を進めます。

以下のようにATOM MatrixのIMUセンサによる姿勢角でモータをCAN通信で制御します。

 

CAN信号受信用のコントローラボードを加工します。
4ピン GHコネクタケーブルをMKS ESP32 FOC V2.0のコネクタに対応するようにCANコントローラボードに配線します。

 

以下の図のようにboardFix2.stlにCANコントローラボードを両面テープで固定してコネクタをMKS ESP32 FOC V2.0につけます。

 
ちなみに両面テープは以下を使用してます。

ATOM Matrix Arduinoコード

ATOM Matrixにコードを書き込みます。
IMUで傾きを検知してモータの制御角度をCANで送信します。

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

 

L. 8 受信側と同様にESP32のTWAIドライバでCAN通信を実施します。

L. 10~16 WiFi APモード用設定。SSIDやパスワード、IPを指定 (それぞれ任意)。

L. 41~47 加速度センサから傾斜角を取得する関数
 ATOM Matrix内蔵のIMUセンサ(MPU6886)で検出した加速度からX軸とY軸の傾斜角を算出

 
L. 49~54 角速度取得関数
 IMUのX軸とY軸の角速度を使用

L. 57~70 CAN送信関数
 ID 0x123で2個のモータの回転位置角度を送信

L. 74~252 core0動作
 ATOM Matrix デュアルコアのcore0でLED表示と傾斜角検知、CAN送信を実行します。

 慣性センサMPU6886のフルスケールレンジ指定 (L. 79, 80)
 ・加速度:16bit ±2 g
 ・ジャイロ(角速度):16bit ±250 deg/sec

 WiFiとブラウザアプリ用のハンドラを設定 (L. 89~107)

 CAN通信を設定・ドライバ実行 (L. 110~137)。
  TX:IO 19、RX:IO 22
  伝送速度は 1Mbps固定 

 ATOM のX軸とY軸の角度を以下の通りLEDインジケータ表示しています (L. 142~219)。
 ・±1°以下:中心で緑表示
 ・±20°以上:赤表示
 ・その他:青表示

 カルマンフィルタライブラリの関数を用いてセンサの姿勢角と角速度を算出 (L. 222~238)

 ATOMのY軸 (機体ロール軸)の角度と角速度のPD制御でモータ制御角度算出してCAN通信で送信 (L. 247, 248)

L. 254~388 ブラウザアプリ表示設定
 APモード接続時の各パラメータ設定用の表示を記述しています。 

L. 390~413 setup関数
 アプリで設定した各オフセット値はPreferences機能でフラッシュに記録します。
 電源起動時にフラッシュに記録されたオフセット値を読み出します (L. 398~402)

L. 417~419 loop関数
 ATOM Matrix デュアルコアのcore1 今回は未使用

書き込み

ボードはESP32ライブラリの”M5Stack-ATOM”を選択して書き込み

動作

コードを書き込むとIMUによる角度に準じてLEDマトリクスにインジケータが表示されます。

ブラウザアプリ

ATOMのAPモードでWiFi接続してブラウザからパラメータ調整できます。

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

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

Kp, KdでIMUのロール角からのモータ駆動角度制御パラメータを調整

offsetでIMUの初期角度調整が可能です。
ATOM MatrixのIMUセンサ値に大きな誤差オフセットがみられる場合は調整してください。

ATOM実装

ATOM MatrixはMKS ESP32 FOC V2.0の外部コネクタの3.3Vピンから給電します。
さらにモータ角度送信用のCANコントローラボードも接続します。

ここでは下の図のように ATOM Mate を使用して配線しました。

 
CANコントローラボードとATOMは以下のように配線します。
 3.3V - 3V3
 GND - G
 RX - IO 22
 TX - IO 19

4ピン GHコネクタケーブルを加工してMKS ESP32 FOC V2.0の外部コネクタの3.3VピンとGNDピンからATOMに給電します。

 

ATOM MatrixをATOM Mate に載せてatomCover.stlに固定します。
atomCover.stlは下の図の赤丸をあらかじめM3ネジサイズでねじ切りしときます。

 

atomCover.stlにATOMをねじ止め (M3 6mm なべネジ:2本)
CANコントローラボードは両面テープで固定

 

atomCover.stlを股関節ユニットにねじ止め (M3 30mm なべネジ:4本)
ATOMの電源コネクタをMKS ESP32 FOC V2.0の外部コネクタに接続

 

CANコントローラボードのCANH, CANLピン同士を配線接続します。

 

以上で股関節完成です。

 

動作

傾けることで連動してアームが動きます。

 

演習問題

パラメータ調整

ブラウザアプリやコードを修正するなどしてMKS ESP32 FOC V2.0の各PIDパラメータやATOMのIMU角度PDパラメータ値を変更して動作にどう影響するのか体験してみよう。

過制動などで動作が制御不能となり過電流が流れることもございますのでご注意ください。

 

おわりに

本号では股関節ユニットを完成させて、機体傾きによる制御を楽しみました。
IMU搭載のATOM Matrixで傾きを検知してCAN通信でBLDCコントローラ側に回転角度をデータ送信しました。

次回は足と股関節を組み合わせてロボットを完成させ、基本動作を楽しみたいと思います。

コメントはこちらから

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

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