坂井 真一郎 宇宙航空研究開発機構 宇宙科学研究所 (JAXA/ISAS) e-mail: [email protected]
人工衛星姿勢制御ソフトウェアの
状態遷移表ベース設計事例
ZIPCユーザーカンファレンス 2011自己紹介(宇宙科学研究所) • JAXA所属、宇宙科学の遂行と、そのための人工 衛星・探査機・ロケットの研究開発を役割とし ている。 • ルーツは、東京大学で「ペンシルロケット」を 開発した糸川博士の研究室。日本初の人工衛星 「おおすみ」の打ち上げなど。 • 宇宙科学・宇宙工学の専門家が混在 • 伝統的に二足のわらじを履いている – 科学衛星・探査機などの企画立案と、そのプロ ジェクトマネージメント – その礎となる科学や技術の基礎研究・開発。大学 共同利用研究機関としての側面
衛星開発への問題意識(1) • 宇宙科学の発展、探査機の到達範囲の拡大に伴い、 宇宙ミッションは高度化・大規模化の一途を辿っ ている。 – プロジェクト予算の拡大(数10億→数100億規模) – 開発年数の増大(5年規模→10年規模) • その負の側面のひとつとして、宇宙科学分野での 衛星・探査機打ち上げ頻度が低下する傾向にある。 – かつて :2年前後に一度の打ち上げ – 近い将来 :4-5年に一度の打ち上げ?
• それでは、どうするべきか? – 大規模プロジェクトと相補的な、機動力のある中 規模プロジェクトを!→500kg級の小型科学衛 星”SPRINT”シリーズを開発中 • 開発期間の短縮へ向けて – 重要な点は、科学衛星や探査機は常に”新しい”点。 – 従って、毎回目的や要求の全く異なる衛星を、い かに効率よく開発できるかが、が問われている。 衛星開発への問題意識(2) その搭載ソフトウェア開発において、状態遷移表設計手法はひ とつの有用な手法と感じている。以下ではその具体的な事例を 紹介したい(小型衛星「れいめい」衛星での例)
50kg級小型衛星「れいめい(1) • 50kg級の超小型科学衛星 • オーロラ観測と工学技術実証を目的 • 教育などを目的としたインハウス開発 – 若手スタッフ中心、学生も参加 • 2000年頃から設計開始、2005年夏に 打ち上げ成功。現在も運用中 • 50kg級衛星としては優れ た姿勢制御性能を実現 (オーロラ観測のため)
50kg級小型衛星「れいめい」(2)
• 衛星を作るのは初めてという若手スタッフが中 心(筆者も)、インハウス開発でもあり、新し い試みもいろいろ行われた
50kg級小型衛星「れいめい」(3)
• 開発線表
FY00 FY01 FY02 FY03 FY04 FY05
CMD-DEC PM FM OBC BBM PM FM IOP 基本設計 PM* PM** FM 1 次 噛 み 合 わ せ 試 験 ← 温 度 試 験 総 合 試 験 ← 単 体 振 動 / 衝 撃 試 OBCソフト 基本設計 設計/開発/試験 2004.夏~秋 ロケット決定 2005.8打ち上げ! PM : Prototype Model FM : Flight Model
50kg級小型衛星「れいめい」(4) • バイコヌール宇宙基地から打ち上げ(2005年) ロケットは元ICBM. 地下サイロから発射 砂漠の宇宙基地 衛星最終チェックを終えて
打ち上げ
γ
2005/8/23 21:9:59(UTC)
655km×609km, i =97.83°
50kg級小型衛星「れいめい」(6)
初期運用は、鹿児島・内之浦にて。打ち上げ成功はロシアからの電 話で知る(左上)。数時間後、緊張の第一可視。
「れいめい」衛星への状態遷移表設計適用 • 筆者自身の専門は制御工学や、宇宙機の姿勢制御。 ソフトウェアは専門ではないが、「れいめい」衛 星では、搭載姿勢制御ソフトウェアもイチから設 計・実装するはめに • 姿勢制御本来の設計に集中したいが、ソフトウェ ア設計・実装としてはむしろ、状態の管理やエ ラーチェック、ソフトウェア構造設計など、それ 以外の部分の負担が大きいことに気づく • 制御本来の機能以外の部分を、極力テンプレート 化できないか? → “状態遷移表設計”を導入し てみることに(恐らく2002~3年頃)
姿勢制御機能と、状態遷移表との親和性 • 宇宙機の姿勢制御においては、元々、地上から のコマンド指示や衛星自身の自律的判断により、 時々刻々“制御モード”や“内部状態”が遷移して いく構造を持っている。 • 衛星関係者からもしばしば「分かりにくい」と 言われる姿勢制御系の挙動。ダイナミクスと密 接に関連することが一因だが、その連続的でア ナログな姿勢制御系の挙動を、いわば離散的に 切り取るツールとして、状態遷移表は適してい る。
「れいめい」姿勢制御系における状態遷移表(1) • 「れいめい」姿勢制御機能は、「モジュール」と 呼ばれる関数の接続により実現されている • 各モジュールそれぞれには、下図の信号の流れと は別に、”動作指示値”と呼ばれる値が渡されてい る。 フィードバック 制御部 磁気トルク 制御部 ホイール (モータ) 制御部 制御指令値 演算部
「れいめい」姿勢制御系における状態遷移表(2)
• 姿勢制御動作全体の状態を管理する状態遷移表
Shin-ichiro Sakai, ISAS/JAXA
イベント:地上からのコマンドなどに対応 状態 : オーロラ観測用の 制御モードなどに対応 (ポインティング、磁力線 追尾など) … Pointing Rotation … SUNACQ … HALT HALT … POINT … POINT ROTATE … SUNPT … HALT HALT … MTRACK … HALT CTRL … EANGX … FINE HALT …
… … … … …
状態
動作指示値
1:TimeUp 4:ToPointing 5:ToRotation 6:ToMagTrack … SunPoint (処理:SunPoint) 遷移:Pointing 遷移:Rotation (処理:SunPoint) … SunPointZ (処理:SunPointZ) 遷移:Pointing 遷移:Rotation (処理:SunPointZ) … Pointing (処理:Pointing) (処理:Pointing) 遷移:Rotation 遷移:MagTrack … Rotation 表遷移:SPIN 遷移:Pointing (処理:Rotation) (処理:Rotation) …
MagTrack 表遷移:SPIN 遷移:Pointing (処理:MagTrack) (処理:MagTrack) …
Event
状態が決まると、各モジュールへの動作 指示値がテーブルから読み出される
「れいめい」姿勢制御系における状態遷移表(3) • 各モジュールも、それぞれ状態遷移表を内包する。 前述の“動作指示値”や周辺機器の状態、モジュー ル内部の状態等によって駆動されている。 • 状態遷移表を駆動する関数はモジュール間で共通。 状態遷移表も、モジュール間で共通な部分と固有 な部分とに分けられている。 • 2階層の状態遷移表が接続されており、また機 器状態(モータ回転数など)や衛星ダイナミク ス等で状態がそれぞれの状態が遷移していくシ ステム。シミュレータやツールがないと、挙動 の理解が難しい(開発時の苦労)
得られたメリット(1) • 仕様の漏れ抜け、見える化 – 姿勢制御系全体の状態については、従来は主に状 態遷移図で管理されていた。これを状態遷移表表 現にすることで、より漏れや抜けのない設計が行 える。 • 試験すべき内容の整理がしやすい – 姿勢制御系全体の動作にせよ、各モジュール単体 の動作にせよ、試験すべき項目をリストアップし やすい(まずは全ての状態遷移を起こすところか ら考え始められる)
得られたメリット(2) • ソフトウェア単体試験の一部を、自動化可能 – 状態遷移表定義と、実際にコーディングされたソ フトウェア挙動とを比較する試験用コードを実装、 状態遷移表実装および処理部の試験自動化を試み た。 – 試験としては有意義だったが、“正解値”の用意が 面倒で、思ったより手間がかかった • 制御ソフトウェアはダイナミクスを扱うため、状態の 時間的変化が重要になる。ところが、これは状態遷移 表を静的に眺めても、理解が難しい(人間にも、ソフ トウェアにも)
得られたメリット(3-1) • 2011.2, 「れいめい」衛星搭載の姿勢制御セン サ(ジャイロセンサ)が故障、現在これに対応し たソフトウェアの改修作業を実施中だが、奇しく もここでも状態遷移表設計の利点を実感 – 5年以上前の仕様は(自分で作ったにも関わら ず)かなり忘れているが、とりあえず状態遷移表 をみれば理解可能 – 必要な設計変更のうち、ある範囲については状態 遷移表定義の変更だけで対応可能 • 表自身の変更については、データだけコマンド送信す ればよい。 • イベント発生条件については、コード変更&パッチ送 信で対応の必要あり。
得られたメリット(3-2)
• 新旧状態遷移表の比較
0:NoEvent 1:TimeUp 2:ToSunPoint 3:ToSunPointZ 4:ToPointing 5:ToRotation 6:ToMagTrack 7:ToSunAcq 8:Complete 9:Error
SunPoint (処理:SunPoint) (処理:SunPoint) (処理:SunPoint) 遷移:SunPoi ntZ 遷移:Poi nti ng 遷移:R ota ti on (処理:SunPoint) 表遷移:SPIN (処理:SunPoint) 表遷移:SPIN
SunPointZ (処理:SunPointZ) (処理:SunPointZ) 遷移:SunPoi nt (処理:SunPointZ) 遷移:Poi nti ng 遷移:R ota ti on (処理:SunPointZ) 表遷移:SPIN (処理:SunPointZ) 表遷移:SPIN
Pointing (処理:Pointing) (処理:Pointing) 遷移:SunPoi nt 遷移:SunPoi ntZ (処理:Pointing) 遷移:R ota ti on 遷移:Ma g Tra ck 表遷移:SPIN (処理:Pointing) 表遷移:SPIN
Rotation (処理:Rotation) 表遷移:SPIN 遷移:SunPoi nt 遷移:SunPoi ntZ 遷移:Poi nti ng (処理:Rotation) (処理:Rotation) 表遷移:SPIN 遷移:SunPoi nt ( *2)表遷移:SPIN
MagTrack (処理:MagTrack) 表遷移:SPIN 遷移:SunPoi nt 遷移:SunPoi ntZ 遷移:Poi nti ng (処理:MagTrack) (処理:MagTrack) 表遷移:SPIN (処理:MagTrack) 表遷移:SPIN
Event (Event番号が小さいものから優先的に処理される。ただし例外的に0は最も優先度が低い)
st
at
e
0:NoEvent 1:TimeUp 2:ToSunPoint 3:ToSunPointZ 4:ToPointing 5:ToRotation 6:ToMagTrack 7:ToSunAcq 8:Complete 9:Error 10:Singular
SunPoint (処理:SunPoint) (処理:SunPoint) (処理:SunPoint) 遷移:SunPoi ntZ 遷移:Poi nti ng 遷移:R ota ti on (処理:SunPoint) 表遷移:SPIN (処理:SunPoint) 表遷移:SPIN 遷移:Si ng ul ar
SunPointZ (処理:SunPointZ) (処理:SunPointZ) 遷移:SunPoi nt (処理:SunPointZ) 遷移:Poi nti ng 遷移:R ota ti on (処理:SunPointZ) 表遷移:SPIN (処理:SunPointZ) 表遷移:SPIN 遷移:Si ng ul ar
Pointing (処理:Pointing) (処理:Pointing) 遷移:SunPoi nt 遷移:SunPoi ntZ (処理:Pointing) 遷移:R ota ti on 遷移:Ma g Tra ck 表遷移:SPIN (処理:Pointing) 表遷移:SPIN 遷移:Si ng ul ar
Rotation (処理:Rotation) 表遷移:SPIN 遷移:SunPoi nt 遷移:SunPoi ntZ 遷移:Poi nti ng (処理:Rotation) (処理:Rotation) 表遷移:SPIN 遷移:SunPoi nt ( *2)表遷移:SPIN 遷移:Poi nti ng
MagTrack (処理:MagTrack) 表遷移:SPIN 遷移:SunPoi nt 遷移:SunPoi ntZ 遷移:Poi nti ng (処理:MagTrack) (処理:MagTrack) 表遷移:SPIN (処理:MagTrack) 表遷移:SPIN 遷移:Poi nti ng
Singular 遷移:Back(*3) 表遷移:SPIN 遷移:SunPoi nt 遷移:SunPoi ntZ 遷移:Poi nti ng 遷移:R ota ti on 遷移:Ma g Tra ck 表遷移:SPIN (処理:Singular) 表遷移:SPIN ( 処理:Si ng ul ar)
Eclipse 遷移:Back(*3) 表遷移:SPIN 遷移:SunPoi nt 遷移:SunPoi ntZ 遷移:Poi nti ng 遷移:R ota ti on 遷移:Ma g Tra ck 表遷移:SPIN (処理:Eclipse) 表遷移:SPIN 遷移:Si ng ul ar
Event (Event番号が小さいものから優先的に処理される。ただし例外的に0は最も優先度が低い) st at e 状態遷移表サイズは大きめに確保していたので、余地へ拡 張して新しい状態定義を追加。 必要な関数はパッチで追加(地上からコマンド送信、 1kbps以下)
ここまでの試みを踏まえて • 「れいめい」衛星での経験から、「毎回仕様の違 う宇宙機をいかに効率よく開発するか」いう問題 に対して、状態遷移表ベース設計の適用はメリッ トがあると考えている。 • そのために、衛星メーカへの普及を働きかけるべ きではないか、と考え始める。 • 但しソフトウェア単体試験の自動化などで苦労し た経験からも、なんらかの使いやすいツールの利 用が必要と考えていた。 – “ZIPC”にたどり着く
ZIPCとの出会い • 2010.12~2011.3にかけて、「れいめい」衛星 姿勢制御系の状態遷移表をZIPCで再現できるか、 という試行検討を行った。 • 全体の状態遷移とそれに 従った各モジュール内部の 状態遷移、特に時間推移に 伴う状態遷移まで含めて 一通りの状態遷移挙動が 再現できている (実質作業:2-3ヶ月)
main Master (Steady/Spin)
SunAcq 共通部 Point 共通部 Sunpt 共通部 SunAcq 固有部 Point 固有部 Sunpt 固有部 ・ ・ ・
ZIPCにより再現された「れいめい」状態遷移 ESEC2011での展示 ダイナミクス系 (理論モデル) シミュレーション 状態遷移系 (実装モデル) シミュレーション ダイナミクス系で求めた 理論値の妥当性を 状態遷移系の 実装モデルで検証する 時間パラメータの設定 衛星の状態 各コンポーネントの状態
今後の活動 • これまでの活動・成果を踏まえて衛星・宇宙メー カへ向けたデモンストレーションを行い、メーカ 視点でみた有用性や課題の整理などを経て、宇宙 開発の実際の現場への普及を働きかけていきたい と考えている。 • 目指しているのは、その度に要求・仕様の異なる 衛星・宇宙機の開発効率化。具体的には、よりス ムーズな設計の理解、設計と対応したブレのない 効率的な実装、試験の部分自動化、打ち上げ後の 衛星運用支援への適用など。