5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最終回:Cubliは大地に立ったのか? 筐体組立と「土下座」のグランドフィナーレ

Posted at

1. Merry Christmas! そして運命の結果発表

メリークリスマス!
25日間にわたり、3次元倒立振子(Cubli)の製作記録(アドベントカレンダー)にお付き合いいただきありがとうございました。

PyBulletによるシミュレーション、STM32でのFOCドライバ自作、EKFによる姿勢推定、そして昨日のCLIツール……。
私はこの25日間で、現代制御と組込み技術の粋(すい)を集めた「最強の頭脳」と「最強の心臓」を一人で作り上げました。あとは、3Dプリンタで作った「肉体」にこれらを宿すだけ。

それでは、ご覧ください。
私の技術の全てを結集し、大地に立ったCubliの姿を!!

...

...

image.png

ごめんなさい!! 間に合いませんでした!!!!

「時間が足りない」
エンジニアが最も恐れる言葉が、クリスマスの朝に現実のものとなりました。
今日の記事は、輝かしい成功報告ではなく、「なぜハードウェアは難しいのか」 という屍(しかばね)を越えていくための、愛と反省の組立記録となります。

2. 25日間の軌跡:狂気のフルスタック開発(ソロ)

image.png

言い訳をする前に、私が駆け抜けたこの25日間を振り返らせてください。ただ作っただけではありません。「シミュレーションから実機への実装(Sim2Real)」 を見据えた、技術的な深掘りの記録です。

Phase 1 (Sim): 物理エンジン上でのロボット構築と学習

すべてはPCの中の仮想空間から始まりました。

  • モデリング: Fusion 360で筐体をパラメトリック設計し、URDFとしてエクスポート。
  • 制御理論の比較: PyBullet上で「PID制御」と「LQR(最適レギュレータ)」を実装し、さらに「深層強化学習(Deep RL)」による姿勢制御を行いました。
  • Sim2Realへの布石: ノイズあり/なし環境での学習比較を行い、実機投入に向けたロバスト性を検証。
  • 推論器の埋め込み: PyTorchの学習モデルを計算グラフを維持したまま ONNX形式 へ変換し、STマイクロの X-CUBE-AI を用いてマイコン上で動作する軽量かつ高速なCコードへ変換するフローを確立しました。

Phase 2 (HW): STM32G4による回路設計

シミュレーション上の脳波を受け止めるための、強靭な神経系を設計しました。

  • MCU選定: 数学演算ユニット(CORDIC/FMAC)を持つ STM32G474 を採用し、計算負荷の高い制御演算に備えました。
  • 基板設計: 3つのブラシレスモータを駆動するため、ノイズ対策を考慮した高密度なインバータ回路を設計・実装しました。

Phase 3 (Motor): 数学で回すFOC(ベクトル制御)

既存のライブラリを使わず、制御の根本から理解するためにドライバを自作しました。

  • FOC実装: クラーク・パーク変換、SVPWM(空間ベクトル変調)をC言語で実装。
  • 電流フィードバック: モータの電流値を100μs以下の周期でフィードバック制御し、指令通りのトルクを出力する「電子バネ」のような挙動を実現しました。

Phase 4 (Algo): 姿勢を知るためのEKF

ロボットが自分の傾きを知るための「三半規管」を作りました。

  • センサフュージョン: 高性能IMU (ICM-42688) をSPI駆動し、加速度とジャイロの値を統合。
  • 拡張カルマンフィルタ(EKF): 非線形な姿勢変化に対応するため、クォータニオンベースのEKFを実装し、ドリフトのない正確な角度推定を実現しました。

Phase 5 (Tools): 開発効率の魔改造

「コンパイル待ち時間」を撲滅するための環境構築です。

  • デジタルツイン: Processingと連携し、実機の姿勢をPC画面上にリアルタイム同期。
  • オレオレCLI: USB CDCによる高速通信を確立し、稼働中のマイコンに対してPIDゲイン等のパラメータを動的に書き換えるツールを自作しました。

ソフトとエレキの基礎は、間違いなく完成しました。
しかし、最後の**「メカ(筐体)」** と**「統合(インテグレーション)」** の壁が高かったのです。

3. 筐体組立:メカトロニクスの密度

それでは、昨日から徹夜で挑んだ組み立ての様子をご覧ください。

詰め込まれた「内臓」たち

3Dプリンタで出力したフレームに、モータドライバ基板とブラシレスモータを配置していきます。
PXL_20251224_023056033.jpg

どうですか、この密度!
FOCドライバ基板を3枚、立体的に配置する設計です。配線がスパゲッティになるのを防ぐため、最短経路で結線しています。ここから筐体の設計ミスが発覚していきます… ねじがうまくはまらない…

完成した姿(外観)

そして組み上がった姿がこちらです。
PXL_20251224_213523423.jpg

見た目は完全にCubliです。今にも起き上がりそうな風格があります。
しかし、この中には 「動かない理由」 が詰まっていました。

4. 発生した不具合:なぜ動かせないのか

組み立てて初めて分かる設計ミスが次々と露見しました。

① 「見えないネジ」問題

CAD上では完璧でも、現実には「ドライバー(工具)」が入るスペースが必要です。
私が設計した配置では、モータを固定するためのネジ穴に対し、他のパーツが邪魔をしてドライバーが物理的に入らない箇所がありました。
結果、一部のモータ固定が甘くなり、振動の原因となってしまいました。

② フレームとホイールの「擦れ」問題

これが致命的でした。
外枠のガードフレームを取り付けたところ、黄色のリアクションホイールとのクリアランス(隙間)が足りず、「シュルシュル」と擦れてしまいました。

FOC制御において、予期せぬ摩擦は天敵です。微細なトルク制御でバランスを取ろうとしているのに、物理的なブレーキがかかっていては制御不能です。
ヤスリで削って抵抗しましたが、スムーズに回転させるまでには至りませんでした。

③ 統合制御への時間不足

基板の基礎設計や、モータ単体のドライブ、センシングといった個別の「部品」は完成しています。
しかし、それらを複合させた 「統合制御システム」 として安定動作させるまでのチューニング時間が、どうしても足りませんでした。

5. 成功した点:慣性モーメント増大機構

もちろん、失敗ばかりではありません。会心の出来だったのがリアクションホイールの設計です。

倒立振子において、ホイールは「重ければいい」わけではなく、「回転中心から遠い場所に重さがある(慣性モーメントが大きい)」 ことが重要です。

そこで、3Dプリントした軽量なホイールの外周部に、六角ナットの形の穴を設計し、そこに金属製のナットとネジを埋め込みました。
PXL_20251224_104736031.jpg

これにより、プラスチックの軽さを保ちつつ、外周部に質量を集中させることに成功しました。手で回すと「ズッシリ」とした手応えがあり、強力な反作用トルクを生み出せそうです。

この「埋め込みウェイト機構」は、確実に機能しています。

6. 私の戦いはこれからだ! 〜Sim2Realへの道〜

というわけで、アドベントカレンダー最終日のCubliは**「物理的には存在しているが、まだ産声を上げていない」**状態となりました。

しかし、ここで終わるわけにはいきません。
なぜなら、私の本当のゴールは「ただ立たせること」ではないからです。

「Phase 1で作った機械学習モデルで、実機を制御する」

Day 7でPyBulletの中で育てた「転ばないAI」。彼をこの現実世界(Real)の筐体に宿すことこそが、このプロジェクトの真の終着点です。
そのために、ONNX変換やX-CUBE-AIのフローを確立し、あえてハイスペックなSTM32を選んできたのです。すべては、AIを受け入れるための「最強の肉体」を作るための布石でした。

  • 回路設計: ノイズ耐性を強化し、AIの計算を邪魔しないクリーンな信号へ。
  • 筐体設計: メンテナンス性を高め、何度でも実験できる構造へ。

これらを修正し、まずはPIDで立たせ、そして最終的にはニューラルネットワークによる制御で、このCubliを大地に立たせてみせます。

アドベントカレンダーは完結しますが、開発は続きます!
今後の進捗(リベンジとSim2Realへの道)は、引き続きQiitaで記事としてアップしていく予定です。
いつか必ず、「AIが実機で立ったぞーー!!」という報告記事を書きますので、その時まで待っていてください。

25日間、本当にありがとうございました!
Sim2Real(シミュレーションから現実へ) を成し遂げるその日まで、私の戦いはこれからだ!!

(Fin... and to be continued to Sim2Real!)

あとがき:25日間を走り抜けて

最後に、個人的な振り返りを少しだけ。

正直なところ、この25日間は毎日の進捗と記事更新に追われる、まさに 「自転車操業」 の日々でした(笑)。
予定通りにいかないことの方が多く、毎晩冷や汗をかきながらキーボードを叩いていました。

しかし、そのプレッシャーがあったからこそ、毎日必死に手を動かし、新しい知識を吸収し続けることができました。これほど濃密に、そして「がっつり」とモノづくりに没頭したのは久しぶりで、心から 「開発って楽しい!」 と感じられる1ヶ月でした。

未完成のCubliですが、ここまでの試行錯誤の記録(ログ)が、同じように制御やロボット制作に挑む誰かの役に、少しでも立てば幸いです。

ここまで読んでいただき、本当にありがとうございました!


アドベントカレンダー参加中
STM32×AIで「3軸倒立振子」を作る25日間(ひとりアドカレ)Advent Calendar 2025

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?