3軸姿勢制御モジュール SHISEIGYO-3 Roller の製法

Home > 電子工作 > 3軸姿勢制御モジュール SHISEIGYO-3 Roller の製法
すき 0
うんこ 0

はじめに

SHISEIGYO-3 Roller はRoller485 Lite ユニットを用いた3軸姿勢制御モジュールです。
コントローラとしてIMU内蔵のATOM Matrixを使用し点倒立を実現します。

マイコン内蔵のRoller485 Lite ユニットを用いることで構成が非常にシンプルになり姿勢制御モジュールの構築が容易となります。

ダウンロードファイル

筐体3DmodelとArduinoコードを以下よりダウンロードできます。zipファイルがダウンロードされます。
 SHISEIGYO-3 Roller用DLファイル

部品

ここで使用した部品は以下のとおりです。
購入先はあくまで参考です。

 
使用したネジは以下のとおりです。

  • M2×4mmネジ:1本 (ATOMと台固定用) 
  • タッピングなべネジ 2×10mm:3本 (ATOM台と筐体固定用)
  • M3×5mmネジとナット:72セット (フライホイール重り用)
  • M3×6mmネジ:12本 (ホイールとモータ固定用)

3Dモデル

ダウンロードファイルに同梱されております。

ここではPLAフィラメントで出力しました。強度が求められるwheel.stlは充填密度100%で印刷し、残りのモデルは25%としました。

製作

SHISEIGYO-3 Roller を組み立てます。非常に簡単です。

まずは3Dプリントした筐体のサポートを外して いざ!

モータ実装

筐体 body1.stl のモータ固定M3ネジ穴をタップでねじ切り(計12か所)。

 

筐体にRoller485 Lite ユニットをはめ込んで同梱の6角穴M3 12mmネジで固定します。

 

Roller485はI2C通信モードでIDは以下のように、前方のモータを0x64、左右をそれぞれ0x65、0x66としました。

 

Roller485 Lite ユニット単体の使用法は以下を参照ください。

配線

モータ電源と4ピンコネクタラインを接続します。

モータ電源はRS485用オレンジコネクタの電源部にLiPoバッテリ用配線コネクタをつなげて3個のモータが並列につながるよう結線しました。

I2C通信用4ピンコネクタラインはATOM Matrixと3つのモータがつながるようにはんだ付け加工しました。
4ピンコネクタ用のハブユニットを使用すればハンダ加工は必要なく楽です。

 

結線も容易であっという間に電源・通信システム完成。

マイコン、バッテリ実装

body2.stlにATOM Matrix をM2×4mmネジで固定。

 

2セルLiPoバッテリを底面に両面テープで固定。

 

コチラを筐体 body1.stl にタッピングなべネジ 2×10mmで固定します (3か所)。

 

フライホイール実装

ホイールフレーム (wheel.stl) の穴に重りとして M3×5mmネジとナットを取り付けます。
ここではホイール1個の総重量は約26gになりました。ネジ長やナットの数を変えてホイール重量の調整も可能です。

 

ホイールをモータにM3×6mmネジで固定します。

Arduinoコード

倒立動作用のコードです。ダウンロードファイルに同梱されております。
ATOMライブラリとRoller485のI2Cライブラリの共存がうまく出来なかったのでM5StickCのMPU6886ライブラリをATOM用にカスタマイズして使用しています。

使用ライブラリ

ここでは以下のバージョンを使用しています。各自の環境に合わせて適宜カスタマイズください。

・Arduino IDEバージョン:1.8.19
・ESP32ボードマネージャ:2.0.17
FastLED :3.4.0
Kalman Filter Library:1.0.2
Roller485

書き込みの設定は以下の通りです。

コード

 

コード説明

L. 10 Roller485モータのオブジェクト生成。
 ここでは真ん中のモータをRollerI2C0、左をRollerI2C1、右をRollerI2C2としました。

L. 19~25 WiFi設定 SSID、パスワード、IPアドレスは適宜変えてください。

L. 31~37 パラメータ値指定
 これらを調整して点倒立動作を実現させる。後述のブラウザアプリでも変更できます。

L. 59~65 傾斜計算
 加速度センサからX軸とY軸の傾斜角を算出する関数
 コードやアプリで各軸のオフセット調整 (offsetX, offsetY)が可能です。

 
L. 67~72 角速度取得関数
 X軸とY軸の角速度を検出

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

L. 282~443 core0動作
 ATOM Matrix デュアルコアのcore0でLEDディスプレイ表示とIMUセンサの処理とブラウザ表示およびハンドラ処理を実行します。

 IMUセンサMPU6886のフルスケールレンジは以下で指定 (L. 290, 291)
 ・加速度:16bit ±2 g
 ・ジャイロ(角速度):16bit ±250 deg/sec

 カルマンフィルタライブラリの関数を用いてセンサの姿勢角と角速度を算出 (L. 331~347)。
 センサのオフセット確認用に算出したX軸、Y軸の角度をシリアル出力しています (L. 349~351)。

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

 delayTime  でcore0の制御ループ時間を調整します (L. 439)。
 

L. 447~487 setup関数
 Roller485 I2C設定 (L. 450~452)
 本プログラムではWire0でRoller485とWire1でIMUセンサとI2C通信します。

 ブラウザアプリで設定した各オフセット値はPreferences機能でフラッシュに記録します。
 電源起動時にフラッシュに記録されたオフセット値を読み出します (L. 455~465)

 Roller485をカレントモード (トルク指定駆動)にして起動 (L. 481~486)。

 

L. 490~529 loop関数
 センサのX軸、Y軸が共に角度±1°以下になるとモータを起動します (L. 491~493)。

 センサの角度が±20°以上になるとモータを停止させます (L. 498~505)。

 センサによるX軸とY軸の傾斜角と角速度とモータの回転速度から各軸の安定に必要なトルクを計算します (L. 508~514)。
 X軸のモータ回転速度は左右のモータの速度の平均をフィードバックしています (L. 512)。
 それぞれの値にかける係数Kp, Kd , Kwを調整して倒立を実現します。
 パラメータが極端に大きくなったり小さくなったりしないように各パラメータ値は割って正規化しております。
 またモータの回転速度をセンサ角度にフィードバックして安定性の向上を図っています(L. 509, 513)
 このフィードバックのかけ具合は係数IDRSで調整します。
 これによって機体にオフセットがあったり床が傾いてもモジュールの安定ターゲット角度が自動で調整されホイールの回転が抑制されます。
 必要ない場合はIDRS = 0.0としてください。

 

 先ほど算出したモジュールのX, Y軸の必要トルクに基づいて各モータのトルクを指定します (L. 516~522)。

 真ん中のモータM0はY軸上に配置しているのでY軸によるトルク(MY)で回転させます。
 左右のモータはセンサのX軸、Y軸に対してそれぞれ斜めに配置されているので、各軸の必要トルクを振り分けて回転デューティを算出します。
 左右モータの回転トルクは以下のように軸上に分解されて、Y軸の傾きによるトルクは左右で打ち消してX軸によるトルクにのみ寄与するように回転させます (L. 517,  518)。

 算出した各モータトルクで回転実行 (L. 520~522)。

アプリ画面

  • アプリを書き込んだATOMS3を起動して、スマホもしくはPCのWiFi接続設定でSSID ”S-3 Roller”に接続
     パスワード:password

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

パラメータは “-“、”+”をクリックして値を増減させます。
値は電源OFF後も保持されます。

動作

筐体上蓋 body3.stl はスナップフィット的にカチャっとハメて固定します。

 

4ピンコネクタをATOMにも接続し、LiPoバッテリコネクタを接続すると起動します。
私は粗野な人間なのでバッテリ直結でON/OFFしていますが当然スイッチを挿入するのがジェントルです。
Roller485 Lite ユニットに5V DCDCが内蔵されており4ピンコネクタからATOMに5V供給されるので電源系も非常にシンプルです。

 

機体を起上てX軸とY軸の傾きが共に±1°以内になるとモータが回転し始めますので直ぐに手を放してください。
LEDのインジケータが助けになります。

 

センサ自体のオフセットが大きい場合には倒立ができない場合があります。
ATOM単体を平らなところに置いて起動し、シリアル出力される角度が0に近いかご確認ください。

大きくズレがある場合にはアプリのOffsetX、offsetYで0に近い値にしてください。

おわりに

ここではRoller485 Lite ユニットを用いた3軸姿勢制御モジュールの製法を紹介いたしました。

Roller485が非常にスマートで使いやすいユニットのため機体構成はこの上なくシンプルになり製作も容易でした。

マジで世界一簡単に組める3軸姿勢制御モジュールになったのではないでしょうか?

 

スペーサとネジでステージ stage.stl を追加すれば、ちょっとした小机にもなります。

 

 

是非 点倒立の喜びを体感いただければと思います。

 
DCモータを使用した小型3軸姿勢制御モジュールの製法も以下で紹介しておりますのでよろしければご覧ください。

3軸姿勢制御モジュール SHISEIGYO-3 DC の製法

 

こちらからは以上です。

追記

SHISEIGYO-2 Roller (2024/11/5)

ホイール2個でも点倒立は可能なのでやってみた。

コメントはこちらから

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

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