omicro Flux:姿勢制御球体型ロボット
BLDC Roller485 と 9 軸 IMU を中核に、姿勢推定・方位制御・走行中の姿勢制限・停止時の制振を組み合わせた多層制御で動作する、omicro の後継機。
The article body is in Japanese only. See the header above for the English summary, or switch to for the full text.
1. はじめに
omicro Fluxは、従来のomicroの後継機として開発した姿勢制御球体型ロボットです。名前の”Flux”は、磁束のほか、センサデータや状態の変化・流動といった連続的な動きを表現しています。最大の特徴は、従来のDCモーターからM5Stack製BLDC Roller485に変更することで、大幅な精度向上を実現したことです。
BLDCモーター、IMU、自作制御基板による構成で、内部ロボットが自重で起き上がる球体構造を前提に、姿勢制御で進行方向を保ちながら移動する仕組みとなっており、XRプロジェクト「Boundary Blur」のような高度なインタラクション体験の実現を可能にしています。
2. 開発背景
omicro Fluxの開発には明確な背景があります。これまで「omicro」という球型ロボットを「Boundary Blur」というXRプロジェクトで動かしていました。
Boundary Blurとは
Boundary Blurは、物理世界とデジタル世界の境界を曖昧にするというコンセプトのマルチエージェントシステムです。現実空間に存在する球体型ロボットomicroと仮想空間上のAIエージェントが連携してタスクを遂行することを目指すプロジェクトで、複合現実(Mixed Reality)技術を活用しています。
システム構成としては、iPad ProのLiDARセンサーとARFoundationを用いて現実空間をスキャン・メッシュ化し、その上にデジタルツインの世界を構築します。OpenCVによる画像認識で現実のomicroの位置を追跡し、AR空間上にロボットのデジタルツインを配置します。このデジタルツインは物理法則に従って仮想空間内のオブジェクトやAIエージェントと相互作用し、その結果が現実のomicroにフィードバックされます。つまり、現実のロボットが仮想空間のオブジェクトに「衝突」すると実際に停止し、仮想のAIエージェントがロボットを「追跡」すると現実のロボットが回避行動を取るという、物理世界と仮想世界が相互に影響し合うシステムとなっています。
技術的課題の顕在化
しかし、Boundary Blurでの展示体験を重ねるごとに、omicroの技術的な限界が明らかになりました。従来のomicroはDCモーターを用いて制御を行っていましたが、DCモーターは特性上、低速での回転量制御が困難であり、球体型ロボットという構造上、接地面が少ないため停止制御も非常に難しい課題でした。omicro単体で動かす分には精密な制御を必要としないため大きな問題にはなりませんでしたが、Boundary BlurシステムでロボットをxRでの操作やインタラクションに合わせて正確に動かそうとすると、この制御精度の限界が顕著に現れました。
さらに、従来のomicroは地磁気センサーを用いて方位を取得していましたが、地磁気は周囲の金属物や電子機器の影響を受けやすく、展示会場のような環境では安定した方位検出が困難でした。XRアプリでのインタラクションを高精度化するにあたり、これらの根本的な問題が解決されないと、Boundary Blurでより高度なインタラクション体験を実装することは不可能だと判断し、omicroの後継機として開発されたのがomicro Fluxです。
群制御システムへの布石
omicro Fluxの開発においてもう一つ重要な動機となったのは、将来的な群制御システムの実現に向けた技術基盤の構築です。単体ロボットの制御精度向上は、複数のロボットが協調動作する際の前提条件となります。個々のロボットが正確な位置制御と安定した通信を実現できなければ、群として機能することは不可能です。
特に、複数の球体型ロボットを「新しい車輪」として機能させるためには、従来のDCモーター制御では到底達成できない精密さが必要でした。各ロボットが僅かな誤差なく協調動作し、動的に役割を変更できる制御システムの確立が不可欠でした。omicro Fluxで実現した高精度制御技術は、このビジョンへの第一歩になっています。
3. システム構成
omicro Fluxの動作には、ハードウェアとソフトウェアの連携による以下の手順が必要です:
3.0 システムセットアップ手順
3.1 球体型ロボット
omicro Fluxは、従来のomicroと同様に外側の球体とその中で動くロボットの二部分から構成されていますが、内部システムに大幅な改良が加えられています。

外側の球体
外側の球体は、クリアなプラスチックを使用しており、材質はスチロール樹脂です。表面には硬化ガラスコーティング剤が塗装されており、耐久性と視認性を高めています。この点は従来のomicroと同様の構造です。
内部のロボット
omicro Fluxの最大の特徴は、制御システムの大幅な変更です。従来のDCモーターからM5Stack製BLDC Roller485に切り替えることで、精密な制御が可能になりました。
Roller485は、BLDCモーターだけでなく、角度センサーやディスプレイなどが一体化された統合型ブラシレスDCモーターモーションコントロールキットです。
DCモーターからRoller485への変更により、以下の大幅な改善が実現されました:
- BLDCによる高トルク制御:ブラシレスDCモーターの採用により、従来のDCモーターでは困難だった低速域での精密な制御が可能になりました
- 故障要因の減少:ブラシ接触がないBLDC特有の特性により、機械的な摩耗による故障リスクが大幅に軽減されました
- 正確な移動量制御:内蔵された角度センサーにより、回転量を正確に測定・制御できるようになり、PID制御の実装も可能になりました
さらに、M5Stack Unit Proを新たに追加することで、9軸IMU(3軸ジャイロスコープ、3軸加速度センサー、3軸磁気センサー)による高精度な姿勢推定が実現されました。この9軸IMUにより、従来の地磁気センサー単体では困難だった安定した方位検出と姿勢制御が可能になっています。
また、従来のマトリックスLEDからUnit Puzzleに変更することで、カラーを用いた表現豊かな目の表現も可能になり、ロボットとしての親しみやすさも向上しています。
この一体型デザインにより、従来のシステムで必要だった複数の部品を統合し、配線の簡素化と制御精度の向上を実現しています。制御基板は自作のものを使用し、これらの高精度センサー群と組み合わせることで、球体内での姿勢制御を実現しています。
主要コンポーネント
| コンポーネント | 数量 | 役割 |
|---|---|---|
| M5Stack StampS3 | 1 | メインコントローラー(BLE 通信・制御ループ) |
| M5Stack Unit Roller485 | 2 | BLDC ドライブ(左右の駆動輪) |
| M5Stack Unit Mini IMU-Pro | 1 | 9 軸 IMU(3 軸ジャイロ + 3 軸加速度 + 3 軸磁気) |
| M5Stack UnitPuzzle | 2 | カラー LED マトリクスによる「目」の表現 |
| Adafruit NeoPixel Ring (WS2812 5050) | 1 | 周辺発光リング |
姿勢制御
omicro Flux は、球体内部のロボットが自重で起き上がる構造になっています。重心が下側にあるため、姿勢を保つためにモーターを動かし続ける必要はなく、移動指示がなければモーターは止まったままです。
制御の考え方 ―― 必要な場面に、確実な制御を
この安定した構造のおかげで、姿勢を保つこと自体に特別な制御は要りません。omicro Flux にとって制御が必要になるのは「動かす・止める・向ける」ときだけです。
そこで omicro Flux は、あらゆる場面につねに同じ制御を効かせ続けるのではなく、必要な場面に、目的に合った制御を絞って当てる方針をとっています。高度な制御をやみくもに足すのではなく、実機で検証して効果が確かめられた制御から順に積み上げます。出力には必ず上限を設け、うまく収束しないときも安全側に止める ―― うまくいかないときに「暴れる」より「鈍くなる」側へ倒すことを大事にした設計です。
場面ごとに制御を切り替える(全体像)
omicro Flux の姿勢制御は、ひとつの万能な制御で全部をこなしているわけではありません。進む・曲がる・向ける・止まるで、目的に合った別々の制御方式に切り替えています。共通の入力は 9 軸センサーをまとめて推定した姿勢角(前後・左右の傾き)と方位角で、これを各サブシステムが受け取って役割分担します。
flowchart TD
IMU["9軸IMU<br/>センサ融合で姿勢角・方位角を推定"] --> OP{"操作の場面"}
OP -->|前進・後退| F["閾値制御<br/>傾きが大きい時だけ速度を絞る"]
OP -->|その場回転| R["開ループ<br/>左右輪を逆向きに回してその場で回る"]
OP -->|方位を指定| H["位置制御+測り直し<br/>回す→止めて測る→補正"]
OP -->|停止| S["PID制御<br/>止まる瞬間の揺り戻しを抑える"]
なぜ場面ごとに分けるのか。走行中と停止中では「やりたいこと」が正反対だからです。走行中はボールを転がしたいので、姿勢を細かく作り込むとむしろ転がりの邪魔になります。逆に止めるときは慣性の揺り戻しを積極的に抑えたい。ひとつの制御で両立させるより、場面ごとに最適な方式を当てるほうが、シンプルで安全に作れます。以下、各制御を「何をしているか」と「なぜその方式か」をあわせて説明します。
姿勢推定(9 軸センサ融合)
なぜ複数センサーを融合するのか。 1 つのセンサーだけでは、それぞれ弱点があって姿勢を正確に出せないからです。
- 加速度センサーだけ → 重力の向きから傾きが分かるが、走行中は揺れや加速の力が混ざって一瞬大きく狂う。
- ジャイロだけ → 短時間の回転は正確だが、時間とともに少しずつ誤差(ドリフト)が積み重なる。
- 地磁気だけ → 方位は分かるが傾きは分からず、会場の金属や電子機器の影響も受けやすい。
そこで 3 種類を混ぜ合わせて、「揺れに強く・ドリフトもしない・方位も分かる」姿勢を作ります。混ぜ合わせには Madgwick フィルタ(複数センサーの値を混ぜて姿勢を割り出す定番の方法)を使い、前後の傾き(ピッチ)・左右の傾き(ロール)・方位を常に推定し続けます。地磁気は会場ごとにキャリブレーションして周囲の金属や電子機器による磁気の乱れを補正し、その補正値はアプリから設定します。こうして得た方位は、コンパスと同じ向き(北を基準)に直して、アプリの方位表示や方位指定の回転に使います。
方位制御
「この方位を向いて」という指令は、一定時間モーターを回すだけの方式ではありません。少し回す → いったん止めて落ち着いた状態で方位を測る → ズレぶんだけ補正する、という手順を必要なだけ繰り返して目標方位へ寄せていきます。
flowchart LR
W["待機"] -->|目標方位を受信| M["移動<br/>超低速で目標位置まで回す"]
M --> ST["静止確認<br/>ジャイロで止まったか見る"]
ST --> ME["計測<br/>方位を測って誤差を見る"]
ME -->|誤差が許容内| D["完了"]
ME -->|誤差が大きい| M
なぜ「回しっぱなし」や「走りながら方位で連続補正」にしないのか。 地磁気の方位は瞬間ごとの値にノイズが乗りやすく、速く回しながら直そうとすると目標を通り過ぎて戻る・左右にふらつく、といった暴れが出やすいためです。また機械的な遊びやタイヤのスリップがあるので、一定時間回すだけでは一発で目標方位には乗りません。そこで「止めて落ち着いてから測る」を挟むことで、確実に目標へ追い込めるようにしています。
走行中の姿勢制限
前進・後退は、内部の車両が球の内壁を駆け上がり、その反動でボールを転がして進みます。このとき急に大きな速度を入れると車両が前のめりに立ち上がりすぎ、ボールが「ウィリー」して浮き上がり、転覆や進行不良につながります。そこで傾きを監視し、浮き上がりが始まる手前から速度を自動で絞って、危ない角度に近いほど強く落とします。
なぜここは PID で常時追従させないのか。 走行中は車両が壁を駆け上がる特性上、傾きを伴うのが正常な状態です。ピッチを 0 に保とうとする PID を当てると、進むための傾きまで打ち消してしまい前に進めません。必要なのは「普段は自由に転がしつつ、危ない角度に近づいたときだけ介入する」ことなので、「ある角度を超えたら効かせる」閾値制御にしています。急な速度変化はなめらかにし、減速はやや速めに効かせて、姿勢が崩れかけたら早めに戻します。これにより、アプリから大きな速度指令が突然入ってもボールは姿勢を保ったまま追従します。
停止時の制振と「止まり方」の選択
走って止まるとき、球体ロボットは接地点が少ないので、急にモーターを止めると慣性で前後にゆさゆさと揺り戻します。普段は転がって移動し、止まるこの一瞬だけ、傾きを読みながら車体を立て直す PID 制御を働かせて、揺り戻しを抑え素早くピタッと止めます。
sequenceDiagram
participant App as iOSアプリ
participant FW as firmware
participant Motor as 左右モーター
App->>FW: 停止コマンド
FW->>Motor: 脱励磁(力を抜いてコースト)
Note over FW,Motor: 短い待ち:コースト中に大きな揺れを減衰させる
FW->>FW: 9軸センサで前後の傾きを推定
loop PID制御で立て直し
FW->>Motor: 傾きを戻す向きへ駆動
end
Note over FW: 傾きがほぼ垂直に収まれば停止
FW->>Motor: 脱励磁で完全停止
FW-->>App: 停止ステータスを通知
停止コマンドが来ても即座にモーターは切りません。まず力を抜いて(脱励磁)コーストさせ、短い間を置いてから、推定した前後の傾きをもとにした立て直し制御で揺り戻しを能動的に抑え、ほぼ垂直に収まったらまた力を抜いて完全に停止します。機械ブレーキは持たず、最後は必ず力を抜いて止めます。万一収まらない場合も一定時間で必ず止めるフェイルセーフを備え、センサ異常を検出したときは強制停止して状態をアプリへ通知します。
ここで工夫しているのは、止めた直後にすぐ立て直しを効かせない点です。止めた直後は揺れが一番大きく、そこへいきなり強く効かせると制御が過剰に反応して暴れやすくなります。そこでいったん力を抜いて大きな揺れを減衰させてから、仕上げの立て直しに入り、傾きが十分小さくなったら力を抜いて完全に止めます。
止まり方は 生(なま) / ソフト / クイック の 3 スタイルから選べます(iOS アプリから切り替え、firmware 側もこの 3 択に再設計済み)。
- 生: 立て直しをせず、力を抜いて転がる勢いのまま自然に止まる。
- ソフト: 立て直し制御で穏やか・安定重視に止める(止まるまでの距離はやや長め)。
- クイック: ソフトと同じ仕組みで、よりキビキビ短く止める。
ソフトとクイックは別々の制御ではありません。同じ立て直し制御を土台に、効き具合の調整だけを変えて性格を切り替えています。穏やかにするか俊敏にするかの違いだけで、止め方の原理は同じです。
モジュール分離
各制御層は抽象インターフェース越しに利用しており、ハードウェア無しで動くスタブ実装も併設しています。CI・Mac・MuJoCo シミュレータと同じ規約で繋がるため、firmware の挙動を実機なしで再現して回せる導線を持たせています。
検証環境としての MuJoCo
姿勢制御のロジックを実機だけで検証すると、転倒や接触ミスでハードを傷めるリスクがあり、同じ条件を繰り返し再現するのも難しくなります。これを補うために、ロボティクス研究で広く使われている物理シミュレーションエンジン MuJoCo(剛体動力学・接触・摩擦などをまとめて扱える、姿勢推定・強化学習・制御研究での標準的な実装基盤)の上に、omicro Flux のシミュレータを構築しています。
環境を組んだ最大の狙いは、AI エージェント(Claude Code)と対話しながら開発サイクルを高速に回すことです。「制御コードを修正する → シミュレータで挙動を確認する → 必要なら直す」までをエージェントとのやり取りの中で回し、意図どおりに動くようになったロジックだけを実機に反映する、という流れを作るために、firmware と同じインターフェースで叩ける検証環境が必要でした。
シミュレータには外殻の球体・内部車両・駆動 2 輪・補助輪を実機の寸法と質量配置で組み込み、駆動輪が球内壁を駆け上がる挙動まで物理接触で再現しています。firmware と同じ抽象インターフェースをシミュレータ側にも用意してあるため、姿勢制御コードを書き換えずそのまま流して、姿勢制御 ON/OFF の比較や回帰テスト、新しい制御ロジックの試作を実機を起動せずに回せます。
姿勢制御は必要な局面に限定して適用しており、慣性で転がる挙動を残しつつ、操作精度が要求される場面だけ補正をかける構成です。これにより、xR でのインタラクションに必要な追従性と、球体ロボット特有の動きを両立させています。
駆動方式に2輪差動を採用した理由
球体型ロボットの内部駆動には、振り子で重心を倒して転がす方式、全方向ホイールで内壁を押す方式、車輪付き内部ユニットを走らせる方式などがあります。omicro Flux は内部ユニット方式の中でも2輪差動を採用しており、球体構造との組み合わせで以下の特性が得られます。
- 群制御を見据えたコストと運動性能の両立: 複数の球体型ロボットを同期制御で動かす想定を一貫して持っており、1 台あたりの部品点数を抑えつつ前進・後退・カーブ・超信地旋回の全運動が成立する駆動方式が要件でした。2 輪差動は動力輪 2 個で必要な運動を全部賄えるため、台数が増えてもコストと整備工数が線形にしか膨らまない利点があります。
- ヨー制御に追加機構が不要: 左右の動力輪を逆向きに等速で回すだけで超信地旋回が成立し、向き(ヨー)を変えるための追加機構が要りません。
- 直進と旋回を同じアクチュエータで合成できる: 左右の回転量の 和で前進・差で旋回 が独立に決まり、前進中の緩いカーブから停止状態の超信地旋回まで、同じ単純な式で連続的に扱える。方位を補正したい場面でも、目標と現在の向きのズレをそのまま「差」として加えるだけで済む。
- 姿勢維持の責務がない: 球体は重心が中心より下に置かれた受動安定構造のため、2輪は姿勢を保つためにモーターを常時動かす必要がない。動力輪は走行と方位制御だけに専念でき、転倒で動作が止まることもない。
- 制御モデルが2自由度に収まる: 「前進量」と「差動量」の2変数で操作系から制御系までを通せるため、iOS アプリの BLE プロトコル、firmware の PID、シミュレータ側のインターフェースを同じ抽象レベルで揃えられる。
残り8輪は無動力で、走行時に球体内壁へ接触して直進安定性・衝撃吸収・回転時の軸保持を担います。駆動系は2輪差動に閉じたまま、機構的な安定化を補助輪へ分離した構成です。
車輪と運動機構
omicro Fluxには合計10個の車輪があり、動力は下部の大きな2つの車輪にのみ繋がれています。従来のomicroでは大きなホイールによるトルク向上により消耗が激しくなったため、omicro Fluxでは表面が滑らかで低収縮・高靱性の特性を持つ「Black Resin」に変更しました。ゴムタイヤと球体が直接接触するとグリップが強すぎるため、医療用のサージカルテープを使用して摩擦を調整しています。
その他の8つの車輪は、静止時には球体の内壁に接触していませんが、走行時には内壁に触れるようになっています。これにより、「ボールの直進安定性向上」、「衝撃吸収」、「回転時の軸保持」という役割を果たしています。車輪が回転すると、内部のロボットが球体の内側の壁を駆け上がることで、ボールが前進します。ボールの方向変更は、車輪が逆方向に等速で回転することで、超信地旋回を行い、その場での回転が可能です。
フレーム設計の刷新
omicroからomicro Fluxへの作り直し過程で、Roller485やUnit Proなどの新しいコンポーネントの追加により重心バランスが全て変わったため、フレームは全て再設計し直しています。Ring LEDカバーなどの光を通す必要がある箇所には、透明で強靭かつ寸法安定性に優れた「8001 Resin」を使用し、視認性と耐久性を両立しています。
3.2 操作アプリケーション
omicro Fluxの操作には専用のiOSアプリケーションとwatchOSアプリケーションを使用しています。これらのアプリケーションの詳細な機能や操作方法については、「omicroシリーズ専用アプリケーション」を参照してください。
omicro Flux対応版の主な改良点:
- BLE による無線制御: アプリと omicro Flux は BLE でやりとりします。移動・回転・停止・止まり方の切り替え・方位の指定・キャリブレーションといった操作を送り、ロボット側からは現在の方位や状態を受け取ります。
- 触覚フィードバック対応ジョイスティック制御: ジョイスティックで操作する際に触覚フィードバックを受けながら制御できます。押し込み具合に応じて速度を変えますが、そのまま速度にすると球体は扱いにくいため、内部で操作しやすい値に変換しています。押し込み具合に応じたアナログ操作と、方向ごとの固定速度の操作を切り替えることもできます。
- 操作意図が分かる UI: ジョイスティックでは、その場回転(超信地旋回)を円形の回転矢印アイコン、直進・後進をシェブロンで示し、球体ロボット特有の動きを直感的に表します。
- 止まり方の選択 UI: 「生/ソフト/クイック」の 3 つの止まり方をアプリから選べます。ソフトとクイックは「どちらも 9 軸センサーで推定した傾き(AHRS)をもとに車体を立て直して止める同じ仕組みで、違いは穏やかさ/俊敏さの調整だけ」と、仕組みごと説明しています。
- 9 軸 IMU キャリブレーション UI: 会場の磁気環境を補正するためのキャリブレーションをアプリから実行できます。地磁気データをリアルタイムに XY グラフで可視化し、低速回転を使った回転速度の計測機能も備えます。
- Apple Watch 対応: Apple Watch の CoreMotion で手の動き(上げる/下ろすなど)を検出し、watchOS アプリから iOS アプリ経由で omicro Flux に操作を送れます。
4. 将来への展望:群制御による「新しい車輪」
omicro Fluxの開発は、単体ロボットの性能向上にとどまりません。それは、複数の球体型ロボットを群制御し、それらを協調動作する「新しい車輪」として機能させることです。
4.1 従来の車輪を超えて
従来の車輪は、固定された円盤状の物体であり、回転軸を中心とした単純な回転運動しか行えません。しかし、omicro Fluxを構成要素とした群制御システムでは、個々のロボットが知能を持ち、状況に応じて協調・適応する動的な移動システムの構築が可能になります。これは車輪という概念そのものを根本的に再定義する挑戦です。
omicro Flux自体は群制御システムを内蔵していません。omicro Fluxは、高精度な単体制御を実現する球体型ロボットとして設計されており、群制御機能はBoundary Blurのような上位システムによって補完されます。この設計により、omicro Fluxは車輪としても、マルチエージェントシステムの一部としても機能できます。
4.2 群制御による機能拡張
Boundary Blurのような上位システムが複数のomicro Fluxを制御することで、以下のような機能が可能になります:
協調移動: 複数のロボットが連携して、単体では困難な移動パターンを実現します
分散制御: システム全体の負荷を複数のロボットに分散し、効率的な動作を行います
冗長性の確保: 一部のロボットに問題が生じても、他のロボットが機能を補完します
環境適応: 各ロボットのセンサー情報を統合し、環境に応じた最適な制御を行います
4.3 技術的基盤
この構想の実現には、omicro Fluxで培われた高精度制御技術が不可欠です:
- 精密位置制御: Roller485によるBLDC制御とPID制御により、群制御に必要な正確な位置決めが可能
- リアルタイム姿勢推定: 9軸IMUによる高精度センサー情報により、個々のロボット状態の正確な把握が実現
- 安定通信: BLE通信の最適化により、複数ロボット間の協調制御が可能
- 環境認識: 各ロボットが持つセンサー情報を統合し、周囲環境の包括的な理解を構築
4.4 応用可能性
複数のomicro Fluxを車輪として統合した移動システムは、従来の固定式車輪では実現困難な適応性を移動体に与えます:
自動搬送システム: 積載物の形状や重量分布に応じて車輪位置を最適化する車両 移動ロボット: 多様な作業環境において柔軟な移動戦略を実現するロボットシステム
4.5 現在地
ここまでで実装できているのは、あくまで「単体の球体型ロボットを精度高く制御する」レイヤまでです。BLDC Roller485 と 9 軸 IMU、姿勢制御の多層スタック、MuJoCo シミュレータがそろい、単体としては再現性の高い制御と事前検証の手段ができています。
一方で 4.1〜4.4 で挙げた「群制御による新しい車輪」「協調搬送」「適応的な移動システム」は、まだ実装フェーズに入っていない構想です。これらは Boundary Blur のような上位システム側に群制御層を実装してはじめて動き始めるもので、omicro Flux 自体はその下に据える単体精度レイヤを受け持つ位置づけになっています。
