ロケットから衛星が分離される瞬間を想像してください。バネや分離機構のわずかな偏りによって、衛星は毎秒10度、ときには数十度という速さで、どの軸のまわりにも予測不能に回り続けます。この「もんどり打った」状態を タンブリング(tumbling) と呼びます。この状態のままでは、太陽電池パネルを太陽に向けることも、通信アンテナを地上局に向けることも、そもそも姿勢を制御することすらできません。だから、衛星が最初にやるべき仕事は決まっています。まず回転を止めること です。この作業を デタンブリング(detumbling) と言います。
ところが分離直後の衛星は、姿勢がまだ分からず、リアクションホイールも回っておらず、使える情報も電力も限られています。頼れるのは、地球がもともと持っている 地磁気 と、電流を流すだけで磁石になる 磁気トルカ(マグネットトルカ) だけ、という状況が普通です。この最小限の装備で、しかも「今どちらを向いているか」すら知らないまま回転を鎮める、驚くほど頑健なアルゴリズムが B-dot制御 です。
B-dot制御は、次の2つの場面で不可欠です。
- 分離直後の初期捕捉(レートダンピング) — 打ち上げ後、ほぼ全ての小型衛星が最初に走らせる姿勢制御モード。これが成功しないと以降のミッションが始まらない。
- セーフモードからの復帰 — 何らかの異常で衛星が制御を失い再び回り始めたとき、ジャイロや姿勢が信用できない状態でも、磁力計さえ生きていれば回転を鎮められる「最後の砦」。
この記事では、磁気トルクの式 $\bm{\tau}=\bm{m}\times\bm{B}$ から出発して、制御則 $\bm{m}=-k\,\dot{\bm{B}}$ がなぜ角速度を減らすのかをリアプノフ関数(回転運動エネルギー)を使って導き、地磁気に平行な回転成分だけは止められないという可制御性の制約を説明します。最後に地磁気を時間変化させながらオイラーの運動方程式を数値積分し、高スピン状態から角速度が目標まで減衰する様子をPythonで再現します。

全体像を先に掴んでおきましょう。図のように、初期のタンブリング $\bm{\omega}$ で回る衛星に対し、磁気トルカが磁気モーメント $\bm{m}$ を作り、それが機体を貫く地磁気 $\bm{B}$ と反応してトルク $\bm{\tau}=\bm{m}\times\bm{B}$ を生みます。このトルクをうまく向けてやると、衛星の回転エネルギーが少しずつ地磁気の場に逃げていき、やがて回転が止まります。「どうやってうまく向けるか」の答えが、これから解説するB-dot則です。
本記事の内容
- デタンブリングという課題と、地磁気・磁気トルカという道具立て
- 磁気トルク $\bm{\tau}=\bm{m}\times\bm{B}$ とその幾何学的意味
- B-dot則 $\bm{m}=-k\,\dot{\bm{B}}$ の発想と導出
- 角速度が単調減衰することのリアプノフ的な証明
- 地磁気に平行な成分は止められないという可制御性の制約
- 地磁気モデルと磁力計による $\dot{\bm{B}}$ 推定の実装上の注意
- Pythonによるデタンブリングのシミュレーション
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
特に、剛体の回転を記述するオイラーの運動方程式と、外部トルクが角運動量をどう変えるかは、この記事の議論の土台になります。
デタンブリングとは
デタンブリングを一言で言えば、「回転している剛体から回転運動エネルギーを抜き取り、角速度をゼロ近くまで落とす作業」です。日常のアナロジーで言えば、勢いよく回っている回転椅子に座った人が、床に足を軽くこすりつけて少しずつ回転を止めるのに似ています。足と床の摩擦が回転エネルギーを熱に変えて逃がしているわけです。
衛星の場合、床にあたるものはありません。真空中に浮いているので摩擦は使えません。その代わりに使うのが 地磁気という「見えない床」 です。地球は巨大な磁石で、低軌道(高度数百km)でもおよそ $3\times10^{-5}\,\mathrm{T}$(3万ナノテスラ)程度の磁場が存在します。衛星がこの磁場の中でうまく磁石になれば、地磁気を相手にトルクを発生させ、回転エネルギーをじわじわ逃がせます。摩擦の代わりに磁気的な相互作用を使う、というのがデタンブリングの発想です。
厳密に言えば、デタンブリングのゴールは角速度ベクトル $\bm{\omega}$ の大きさ $|\bm{\omega}|$ を許容値以下に下げることです。分離直後の $|\bm{\omega}|$ は $10\sim20\,\mathrm{deg/s}$ に達することもありますが、これを $1\,\mathrm{deg/s}$ 以下、理想的には $0.1\,\mathrm{deg/s}$ 程度まで落とせば、次の姿勢制御モード(太陽捕捉やスピン安定化)に引き渡せます。
ここで自然な疑問が生まれます。回転エネルギーを逃がすには、そもそもどうやってトルクを作ればよいのでしょうか。次に、磁気トルカが生む磁気トルクの正体を見ていきます。
磁気トルク τ = m × B の幾何
磁気トルカは、コイルに電流を流して人工的な磁石(磁気双極子)を作る装置です。電流の大きさと向きを変えれば、衛星が持つ 磁気モーメント $\bm{m}$(単位 $\mathrm{A\cdot m^2}$)を自在に操れます。この磁石を外部磁場 $\bm{B}$ の中に置くと、方位磁針が北を向こうとするのと同じ原理でトルクが生じます。方位磁針の針を無理やり横に向けても、磁場に沿おうとして回転する——あの復元トルクの一般形が
$$ \begin{equation} \bm{\tau} = \bm{m} \times \bm{B} \end{equation} $$
です。外積なので、生じるトルク $\bm{\tau}$ は $\bm{m}$ と $\bm{B}$ の両方に直交します。大きさは $|\bm{\tau}| = |\bm{m}|\,|\bm{B}|\sin\theta$($\theta$ は $\bm{m}$ と $\bm{B}$ のなす角)で、両者が直交するとき最大、平行なときゼロになります。

図で外積の向きを確認しておきましょう。磁気モーメント $\bm{m}$(赤)と地磁気 $\bm{B}$(青)が張る平面に対して、トルク $\bm{\tau}$(緑)は垂直に立ち上がります。向きは右ねじの法則、大きさは2ベクトルが作る平行四辺形の面積に等しくなります。ここから決定的に重要な事実が読み取れます。トルクは常に $\bm{B}$ に直交する ——つまり、磁気トルカは $\bm{B}$ の方向まわりの回転だけは絶対に作れないのです。この制約は後で「可制御性」として効いてきます。
制御の観点で言えば、私たちが自由に決められるのは磁気モーメント $\bm{m}$ だけです。地磁気 $\bm{B}$ は天から与えられる条件で、こちらの都合では変えられません。したがってデタンブリングの問題は「今この瞬間、回転を減らすには $\bm{m}$ をどの向き・大きさにすればよいか」という一点に集約されます。次に、その答えを与えるB-dot則の発想を見ていきましょう。
B-dot則の発想 — 磁場の変化率が角速度を映す
回転を止めたいなら、角速度 $\bm{\omega}$ を知りたくなります。しかしデタンブリング局面では、ジャイロ(角速度センサ)が使えなかったり、精度が足りなかったりします。ここでB-dot則の巧妙な発想が登場します。磁力計が測る磁場の「時間変化率」を見れば、角速度の情報が間接的に手に入る のです。
ポイントは、地磁気 $\bm{B}$ そのものは(軌道スケールでゆっくりとしか変わらない)ほぼ一定なのに、衛星が回転していると、機体に固定した座標系(機体系)から見た磁場は激しく揺れて見える ことです。回転する観覧車から外の景色を見ると、景色自体は静止しているのに、自分から見ると流れていく——あの相対運動と同じです。
数式で確かめましょう。慣性系での磁場を $\bm{B}_I$、機体系での磁場を $\bm{B}_b$ とすると、両者は座標変換で結ばれています。ベクトルの時間微分を機体系と慣性系で結ぶ「輸送定理(コリオリの関係)」より、機体系で観測される磁場の変化率は
$$ \begin{equation} \left.\frac{d\bm{B}_b}{dt}\right|_{\text{機体系}} = \left.\frac{d\bm{B}_I}{dt}\right|_{\text{慣性系}} – \bm{\omega}\times\bm{B}_b \end{equation} $$
と書けます。右辺第1項は「地磁気が慣性系でどれだけ変化するか」で、これは衛星が軌道上を移動することによる変化です。軌道1周は約90分ですから、この項は非常にゆっくりしています。一方、第2項 $-\bm{\omega}\times\bm{B}_b$ は衛星の自転による見かけの変化で、タンブリング中は毎秒10度以上で回るので、圧倒的にこちらが大きくなります。
そこで、自転が軌道運動よりずっと速い という条件のもとで第1項を無視すると、機体系での磁場変化率は角速度で近似的に書けます。
$$ \begin{equation} \dot{\bm{B}}_b \approx -\,\bm{\omega}\times\bm{B}_b \end{equation} $$
これがB-dot則の心臓部です。磁力計で $\dot{\bm{B}}_b$ を測れば、それは角速度 $\bm{\omega}$ と磁場 $\bm{B}_b$ の外積を(符号反転して)映したものになっている、というわけです。

図で直感を掴みましょう。青い線が機体系で見た磁場のある成分、赤い破線がその時間微分です。自転している間、機体系の磁場は正弦的に振動し、その変化率(傾き)は角速度が大きいほど大きく振れます。回転が止まれば磁場は機体系でも一定になり、変化率はゼロに近づきます。つまり $\dot{\bm{B}}_b$ は「まだどれだけ回っているか」のバロメータなのです。この信号を使えば、角速度そのものを測らなくても回転を鎮める指令が作れます。では、その指令の形を導きましょう。
制御則 m = −k dB/dt の導出
B-dot則の制御指令は拍子抜けするほど単純です。磁場の変化率に比例した磁気モーメントを、変化を打ち消す向きに与える だけです。
$$ \begin{equation} \bm{m} = -\,k\,\dot{\bm{B}}_b, \qquad k>0 \end{equation} $$
ここで $k$ は正の制御ゲインです。なぜこの形が回転を止めるのか、まずトルクの向きを見て直感を作りましょう。この $\bm{m}$ を磁気トルクの式に代入すると、
$$ \begin{equation} \bm{\tau} = \bm{m}\times\bm{B}_b = -k\,\dot{\bm{B}}_b\times\bm{B}_b \end{equation} $$
となります。ここに先ほどの近似 $\dot{\bm{B}}_b \approx -\bm{\omega}\times\bm{B}_b$ を代入すると、
$$ \begin{equation} \bm{\tau} \approx -k\,(-\bm{\omega}\times\bm{B}_b)\times\bm{B}_b = k\,(\bm{\omega}\times\bm{B}_b)\times\bm{B}_b \end{equation} $$
を得ます。ここでベクトル三重積の公式 $(\bm{a}\times\bm{b})\times\bm{c} = (\bm{a}\cdot\bm{c})\,\bm{b} – (\bm{b}\cdot\bm{c})\,\bm{a}$ を $\bm{a}=\bm{\omega},\ \bm{b}=\bm{B}_b,\ \bm{c}=\bm{B}_b$ として使います。$\bm{B}_b\cdot\bm{B}_b = |\bm{B}_b|^2$ に注意すると、
$$ \begin{equation} \bm{\tau} \approx k\Big[(\bm{\omega}\cdot\bm{B}_b)\,\bm{B}_b – |\bm{B}_b|^2\,\bm{\omega}\Big] \end{equation} $$
と整理できます。この式の第2項 $-k|\bm{B}_b|^2\bm{\omega}$ に注目してください。これは 角速度 $\bm{\omega}$ と真逆を向く項 で、まさに回転にブレーキをかける「粘性摩擦」のように働きます。第1項 $k(\bm{\omega}\cdot\bm{B}_b)\bm{B}_b$ は磁場方向のトルクで、これは回転を減らしも増やしもしません(後述)。つまりB-dot則は、地磁気を相手にした人工的な回転ダンパを衛星に取り付けたことに相当します。

制御の流れを図で整理しました。磁力計が機体系磁場 $\bm{B}_b$ を測り、それを時間微分して $\dot{\bm{B}}_b$ を推定し、制御則 $\bm{m}=-k\dot{\bm{B}}_b$ で磁気モーメントを決め、トルカが $\bm{\tau}=\bm{m}\times\bm{B}$ を発生させる。その結果、衛星の回転が少し変わり、次の測定へ戻る——このフィードバックループが回るたびに角速度が削られていきます。注目すべきは、このループのどこにも「姿勢」や「角速度そのもの」が要らないことです。磁力計の測定値と、その微分だけで閉じています。だからこそB-dotは、姿勢が全く分からない分離直後でも動くのです。
ここまでで「なぜブレーキになりそうか」の直感はできました。しかし、本当に必ず回転が減るのでしょうか。第1項が悪さをして、たまたまエネルギーが増える瞬間はないのでしょうか。これを厳密に保証するのが、次のリアプノフ的な議論です。
角速度が単調減衰することの証明(リアプノフ的考察)
制御が本当に働くことを示すには、「衛星の回転エネルギーが時間とともに必ず減る」ことを証明すればよいでしょう。制御理論では、こうした「必ず減る量」を リアプノフ関数 と呼びます。デタンブリングでは、リアプノフ関数として最も素直な候補、回転運動エネルギー を使います。
$$ \begin{equation} V = \frac{1}{2}\,\bm{\omega}^{\top} \bm{J}\,\bm{\omega} \end{equation} $$
ここで $\bm{J}$ は衛星の慣性テンソル(対称正定値)です。$V$ は $\bm{\omega}=\bm{0}$ のときだけゼロで、それ以外は必ず正の量です。もし $V$ が単調に減り続けてゼロに近づくなら、角速度もゼロに近づく——つまりデタンブリングが成功する、と言えます。そこで $V$ の時間微分を調べます。
まず $V$ を微分すると、$\bm{J}$ が定数の対称行列であることから
$$ \begin{equation} \dot{V} = \bm{\omega}^{\top}\bm{J}\,\dot{\bm{\omega}} \end{equation} $$
です。ここに剛体のオイラーの運動方程式 $\bm{J}\dot{\bm{\omega}} = -\,\bm{\omega}\times(\bm{J}\bm{\omega}) + \bm{\tau}$ を代入します。すると
$$ \begin{equation} \dot{V} = \bm{\omega}^{\top}\big[-\bm{\omega}\times(\bm{J}\bm{\omega})\big] + \bm{\omega}^{\top}\bm{\tau} \end{equation} $$
となります。ここで第1項に注目します。$\bm{\omega}\times(\bm{J}\bm{\omega})$ は必ず $\bm{\omega}$ に直交するベクトルなので、$\bm{\omega}$ との内積はゼロです($\bm{\omega}\cdot(\bm{\omega}\times\text{任意})=0$)。つまりジャイロ項はエネルギーの収支に一切効きません。これは物理的には「トルクがなければ回転エネルギーは保存する」という当たり前の事実を表しています。残るのは制御トルクの寄与だけです。
$$ \begin{equation} \dot{V} = \bm{\omega}^{\top}\bm{\tau} \end{equation} $$
ここに、前節で求めた制御トルク $\bm{\tau} \approx k[(\bm{\omega}\cdot\bm{B}_b)\bm{B}_b – |\bm{B}_b|^2\bm{\omega}]$ を代入します。$\bm{\omega}^{\top}\bm{B}_b = \bm{\omega}\cdot\bm{B}_b$ に注意して展開すると、
$$ \begin{equation} \dot{V} \approx k\Big[(\bm{\omega}\cdot\bm{B}_b)^2 – |\bm{B}_b|^2\,|\bm{\omega}|^2\Big] \end{equation} $$
を得ます。ここで コーシー・シュワルツの不等式 $(\bm{\omega}\cdot\bm{B}_b)^2 \le |\bm{\omega}|^2\,|\bm{B}_b|^2$ を思い出してください。この不等式より、角括弧の中身は常に $0$ 以下です。したがって $k>0$ なら
$$ \begin{equation} \dot{V} \le 0 \end{equation} $$
が常に成り立ちます。これでB-dot則が回転運動エネルギーを決して増やさない、つまり角速度を単調に減衰させることが証明できました。第1項がどう暴れても、コーシー・シュワルツが第2項に必ず負けるので、全体として必ずブレーキがかかるわけです。

$\dot{V}$ を $\bm{\omega}$ と $\bm{B}$ のなす角の関数として描いたのがこの図です。角度が $90^\circ$($\bm{\omega}\perp\bm{B}$)のとき $\dot{V}$ は最も深く負に振れ、最も強くエネルギーが抜けます。逆に $0^\circ$ や $180^\circ$($\bm{\omega}\parallel\bm{B}$)では $\dot{V}=0$ になり、まったくエネルギーが抜けません。塗りつぶした領域が示すとおり、$\dot{V}$ は全域で $0$ 以下——決してエネルギーが増える角度は存在しないのです。この「$\dot{V}=0$ になる特別な状況」こそ、次に議論する可制御性の制約の正体です。
可制御性の制約 — B に平行な回転は止められない
証明の途中で見たとおり、$\dot{V}=0$ となるのは $\bm{\omega}$ と $\bm{B}_b$ が平行なとき、すなわちコーシー・シュワルツが等号になるときだけです。これは制御工学的に見れば「その瞬間には制御が効かない方向がある」ことを意味します。根本原因は $\bm{\tau}=\bm{m}\times\bm{B}$ が 常に $\bm{B}$ に直交する という、外積の宿命でした。磁気トルカは、地磁気の方向まわりの回転を作ることも、止めることもできないのです。
角速度を地磁気に平行な成分 $\bm{\omega}_\parallel$ と垂直な成分 $\bm{\omega}_\perp$ に分解して考えると、この制約がはっきりします。
$$ \begin{equation} \bm{\omega} = \bm{\omega}_\parallel + \bm{\omega}_\perp, \qquad \bm{\omega}_\parallel = \frac{\bm{\omega}\cdot\bm{B}}{|\bm{B}|^2}\,\bm{B} \end{equation} $$
B-dot則が減らせるのは垂直成分 $\bm{\omega}_\perp$ だけで、平行成分 $\bm{\omega}_\parallel$ にはその瞬間なんの力も及ぼしません。

図のように、角速度 $\bm{\omega}$ を $\bm{B}$ 方向(緑, $\bm{\omega}_\parallel$)とそれに垂直な方向(赤, $\bm{\omega}_\perp$)に分けると、赤い成分だけが削られ、緑の成分はその瞬間そのまま残ります。もし地磁気の向きが永遠に固定されていたら、衛星は最終的に「$\bm{B}$ 軸のまわりだけ回り続ける」状態で止まってしまい、完全なデタンブリングはできません。
ではなぜ実際にはうまくいくのでしょうか。救いは 地磁気の向きが軌道に沿って変わっていく ことにあります。傾斜のある軌道では、衛星が地球を1周する間に地磁気ベクトルの向きが大きく回転します。ある瞬間に「止められない軸」だったものが、少し時間が経つと別の向きになる。だから、ある瞬間に取り残された $\bm{\omega}_\parallel$ も、しばらくすれば「止められる方向」に変わり、じわじわ削られていきます。結果として、軌道を数周する時間スケールで見れば、全ての回転成分が減衰する のです。これがB-dot制御が実運用で成立する理由であり、同時に「地磁気がほぼ一定方向に見える赤道軌道では効きが悪い」という弱点の理由でもあります。
ここまでで理論は完成しました。しかし実機で動かすには、地磁気をどうモデル化し、$\dot{\bm{B}}$ をどう推定するかという現実的な問題があります。次にその実装上の注意を押さえましょう。
地磁気モデルと dB/dt 推定の実装上の注意
理論では $\bm{B}$ も $\dot{\bm{B}}$ も既知として扱いましたが、実機ではどちらも「測る・作る」必要があります。ここでつまずくと、せっかくの頑健なアルゴリズムが動きません。
(1)地磁気モデル。 B-dot則そのものは磁力計の生の測定値だけで閉じるので、原理的には地磁気モデルは不要です。これがB-dotの最大の長所です。ただし、シミュレーションで事前検証したり、他の姿勢決定アルゴリズムと組み合わせたりするときには、地磁気の予測モデルが要ります。標準は IGRF(国際標準地球磁場) で、地球磁場を球面調和関数で展開したモデルです。低次までなら、地球を1本の傾いた棒磁石とみなす 傾斜双極子近似 でも、デタンブリングの検討には十分な精度が得られます。低軌道では磁場の大きさはおよそ $2.5\times10^{-5}\sim 5\times10^{-5}\,\mathrm{T}$ の範囲で、極域で強く赤道で弱くなります。
(2)$\dot{\bm{B}}$ の推定。 実機では磁場の微分を直接測ることはできず、連続する2回の磁力計サンプルの差分で近似します。
$$ \begin{equation} \dot{\bm{B}}_b(t_k) \approx \frac{\bm{B}_b(t_k) – \bm{B}_b(t_{k-1})}{\Delta t} \end{equation} $$
この単純な差分には落とし穴があります。差分は 高周波ノイズを増幅する のです。磁力計のノイズや、衛星自身の電子機器・トルカ電流が作る磁気ノイズが $\bm{B}_b$ に乗っていると、差分でそれが拡大され、$\dot{\bm{B}}_b$ が暴れて制御が不安定になります。対策として、(a) 磁場測定にローパスフィルタをかけてから差分する、(b) サンプル周期 $\Delta t$ を大きくしすぎず小さくしすぎず適切に選ぶ、(c) そもそも $\dot{\bm{B}}_b\approx -\bm{\omega}\times\bm{B}_b$ の関係を逆用し、別途推定した角速度から $\dot{\bm{B}}_b$ を作る、といった工夫が使われます。
(3)トルカと磁力計の干渉。 磁気トルカが電流を流して磁場を作ると、その磁場を同じ衛星に載った磁力計が拾ってしまいます。自分が作った磁場を「地磁気」と勘違いしては制御が破綻します。実機では、トルカを一瞬止めてから磁力計を読む 時分割(デューティ制御) がよく使われます。
(4)飽和。 磁気トルカが出せる磁気モーメントには上限 $m_{\max}$ があります(小型衛星で $0.1\sim0.5\,\mathrm{A\cdot m^2}$ 程度)。分離直後の高スピン時は $\dot{\bm{B}}_b$ が大きいので、制御則が要求する $\bm{m}$ はすぐ飽和します。飽和中はゲイン $k$ の値によらず最大出力で回転を削るので、初期の減衰速度は主にトルカの能力で決まります。回転が落ちてくると要求 $\bm{m}$ も小さくなり、飽和から抜けて滑らかな制御に移行します。
これらを踏まえると、B-dot制御は「地磁気モデルすら要らず、磁力計と磁気トルカだけで動く」という驚くほど軽量なアルゴリズムでありながら、ノイズと飽和という現実的な壁とうまく付き合う必要がある、と分かります。では、この振る舞いを実際に数値実験で確かめましょう。
Pythonでのシミュレーション
地磁気を時間変化させながら、剛体のオイラーの運動方程式に磁気トルクを組み込み、高スピン状態から角速度が減衰する様子を再現します。設定は小型衛星を想定し、慣性テンソル $\bm{J}=\mathrm{diag}(0.033,0.042,0.050)\,\mathrm{kg\,m^2}$、初期角速度 $\bm{\omega}_0=(11,-8,12)\,\mathrm{deg/s}$(ノルム約 $18\,\mathrm{deg/s}$)、軌道周期 $90$ 分、地磁気の大きさ $3\times10^{-5}\,\mathrm{T}$、トルカ飽和 $m_{\max}=0.2\,\mathrm{A\cdot m^2}$ とします。地磁気は軌道進行に伴い向きが1周期で回転するモデルにして、可制御性の議論を検証できるようにしています。
まず、姿勢を四元数で表し、地磁気を機体系に変換して磁力計の測定値を作る部分です。
import numpy as np
def quat_mul(q, r):
w0, x0, y0, z0 = q
w1, x1, y1, z1 = r
return np.array([
w0*w1 - x0*x1 - y0*y1 - z0*z1,
w0*x1 + x0*w1 + y0*z1 - z0*y1,
w0*y1 - x0*z1 + y0*w1 + z0*x1,
w0*z1 + x0*y1 - y0*x1 + z0*w1,
])
def dcm_inertial_to_body(q):
# q は 機体->慣性 の回転。その転置が 慣性->機体
w, x, y, z = q
R_ib = np.array([
[1-2*(y*y+z*z), 2*(x*y-z*w), 2*(x*z+y*w)],
[2*(x*y+z*w), 1-2*(x*x+z*z), 2*(y*z-x*w)],
[2*(x*z-y*w), 2*(y*z+x*w), 1-2*(x*x+y*y)],
])
return R_ib.T
def B_inertial(t, n_orb, B0):
# 軌道進行に伴い向きが回転する簡易傾斜双極子モデル
u = n_orb * t
v = np.array([np.sin(u), -0.4, 2.0*np.cos(u)])
return B0 * v / np.linalg.norm(np.array([1.0, 0.4, 2.0]))
四元数から機体系への変換行列を作り、慣性系の地磁気 B_inertial に掛けることで、磁力計が測る機体系磁場 $\bm{B}_b$ を得ます。地磁気モデルは向きが軌道1周でひとまわりするようにしてあり、可制御性の議論どおり「止められない軸」が時間とともに移っていく効果を再現できます。
次に、B-dot則で磁気モーメントを決め、磁気トルクをオイラー方程式に入れて時間発展させるメインループです。$\dot{\bm{B}}_b$ は実機に合わせて有限差分で推定し、トルカ飽和も入れています。
J = np.diag([0.033, 0.042, 0.050]) # 慣性テンソル
Jinv = np.linalg.inv(J)
T_orb = 5400.0 # 軌道周期 [s]
n_orb = 2*np.pi/T_orb
B0, m_max, k_gain = 3.0e-5, 0.2, 8.0e4
dt, N = 0.5, int(3*T_orb/0.5)
omega = np.deg2rad(np.array([11.0, -8.0, 12.0])) # 初期タンブリング
q = np.array([1.0, 0.0, 0.0, 0.0])
Bb_prev, log = None, []
for i in range(N):
t = i*dt
Bb = dcm_inertial_to_body(q) @ B_inertial(t, n_orb, B0)
Bdot = np.zeros(3) if Bb_prev is None else (Bb - Bb_prev)/dt # 有限差分
Bb_prev = Bb.copy()
m = np.clip(-k_gain*Bdot, -m_max, m_max) # B-dot則 + 飽和
tau = np.cross(m, Bb) # 磁気トルク tau = m x B
# オイラー方程式 + 四元数キネマティクス (簡易オイラー積分)
domega = Jinv @ (tau - np.cross(omega, J @ omega))
dq = 0.5*quat_mul(q, np.array([0.0, *omega]))
omega = omega + dt*domega
q = (q + dt*dq); q = q/np.linalg.norm(q)
log.append(np.rad2deg(np.linalg.norm(omega)))
制御則の実装はまさに1行 m = np.clip(-k_gain*Bdot, -m_max, m_max) に集約されています。角速度や姿勢を一切参照せず、磁場の差分だけから磁気モーメントを決めている点に注目してください。これがB-dot制御の「軽さ」です(記事の図は精度確保のためRK4で積分していますが、考え方は同じです)。
シミュレーション結果を順に見ていきます。まず角速度の3成分の推移です。

3成分とも、振動しながら徐々にゼロへ収束していきます。単調にまっすぐ落ちるのではなく、地磁気の向きが変わるのに合わせて「削られやすい時期」と「取り残される時期」を繰り返しながら、全体として小さくなっていくのが見て取れます。これは可制御性の議論そのものです。特定の軸だけがいつまでも残らないのは、地磁気ベクトルが軌道に沿って回転しているおかげです。
次に、最も重要な角速度ノルム $|\bm{\omega}|$ の推移です。

青い線がB-dot制御ありで、初期の約 $18\,\mathrm{deg/s}$ から出発し、約 $3.6$ 時間(軌道 $2.4$ 周ぶん)で目標の $1\,\mathrm{deg/s}$ を切り、最終的には $0.59\,\mathrm{deg/s}$ まで落ちました。比較のため制御なし(赤破線)を重ねると、こちらは $18\,\mathrm{deg/s}$ のまま一切減衰しません。トルクを与えなければ回転エネルギーは保存されるので、これは当然の結果です。地磁気と磁気トルカだけで、姿勢も角速度も知らずに、確かに回転を鎮められたことが数値でも確認できました。
回転運動エネルギー(リアプノフ関数 $V$)の推移も見ておきましょう。

縦軸を対数にすると、エネルギーがほぼ一貫して減少し続けていることが分かります。初期の $2.1\times10^{-3}\,\mathrm{J}$ から最終的に $2.7\times10^{-6}\,\mathrm{J}$ まで、およそ $1/770$($0.13\%$)まで落ちました。理論で証明した $\dot{V}\le 0$ が、実際のシミュレーションでも破られていないわけです。局所的にほぼ平らになる区間があるのは、その時期に $\bm{\omega}$ が瞬間的に地磁気とほぼ平行になり、$\dot{V}$ がゼロに近づいているためです。
制御信号である磁気モーメント $\bm{m}$ の様子も確認します。

序盤は角速度が大きく $\dot{\bm{B}}_b$ も大きいので、要求される $\bm{m}$ が飽和限界 $\pm 0.2\,\mathrm{A\cdot m^2}$ に張りつく時間帯が多いことが分かります。回転が鎮まるにつれて要求値が下がり、飽和から抜けて小さな値で細かく制御するようになります。実機で「初期の減衰速度はゲインよりトルカ能力で決まる」と述べた飽和の効果が、そのまま現れています。
最後に、磁力計が実際に測る機体系磁場 $\bm{B}_b$ の推移です。

序盤は自転が速いため、機体系磁場が激しく(高い周波数で)振動しています。この速い振動の傾きこそがB-dot則の入力 $\dot{\bm{B}}_b$ です。デタンブリングが進むと振動はゆっくりになり、終盤では軌道運動によるゆるやかな変化だけが残ります。振動の速さがそのまま「まだどれだけ回っているか」を表しており、B-dot則がこの信号から回転量を読み取っている様子が視覚的に理解できます。
まとめ
本記事では、分離直後の衛星の回転を地磁気と磁気トルカだけで鎮めるデタンブリングと、その定番アルゴリズムであるB-dot制御を、原理から実装まで解説しました。
- 磁気トルク $\bm{\tau}=\bm{m}\times\bm{B}$ は常に $\bm{B}$ に直交する。制御で自由に決められるのは磁気モーメント $\bm{m}$ だけ。
- B-dot則 は $\dot{\bm{B}}_b\approx -\bm{\omega}\times\bm{B}_b$ という関係を利用し、磁場変化率に比例した磁気モーメント $\bm{m}=-k\dot{\bm{B}}_b$ を与える。姿勢も角速度も要らず、磁力計だけで閉じる。
- リアプノフ的な証明: 回転運動エネルギー $V=\frac12\bm{\omega}^\top\bm{J}\bm{\omega}$ の微分は $\dot{V}\approx k[(\bm{\omega}\cdot\bm{B})^2-|\bm{B}|^2|\bm{\omega}|^2]\le 0$(コーシー・シュワルツ)で、必ず単調減衰する。
- 可制御性の制約: 地磁気に平行な回転成分 $\bm{\omega}_\parallel$ はその瞬間止められない。地磁気の向きが軌道に沿って変わるおかげで、数周かけて全成分が減衰する。
- 実装上の注意: 差分によるノイズ増幅、トルカと磁力計の干渉、飽和に留意する。
- シミュレーション: 約 $18\,\mathrm{deg/s}$ の高スピンが軌道 $2.4$ 周で $1\,\mathrm{deg/s}$ を切り、回転エネルギーは $0.13\%$ まで減衰することを確認した。
B-dot制御でレートを落とした後は、太陽捕捉やスピン安定化、さらにはリアクションホイールを使った3軸姿勢制御へと引き継いでいきます。姿勢制御の全体像を理解するために、以下の記事も参考にしてください。