SatNOGS decoderを作成している人。Kaitai Structでテレメトリを扱っている人に向けて、想定外のRSP-03送信データをSatNOGS側で受信したことにより発生したことへの対処を残します.
1. 背景
RSP-03のGMSKビーコンでは、打ち上げ初期に一部のパラメータが未設定の状態で送信されました.
その値は「0xFFFFFFFF」でした。これは通信エラーではなく、未設定値を示す正常な値です.
しかしSatNOGSのデコード結果では、この値の扱いに問題が発生し、その観測データそのものが取り込まれない状況となりました.
2.データ取り込みを検証して判明した問題
- Python decoderで0xFF系の値が欠損扱いになる.
- JSONではNaNが扱えない.
- InfluxDB登録時にそのデータが欠損扱い.
- GrafanaでNo data表示になる.
結果として - データが存在するのに表示されない.
- 他の正常値も巻き込んで欠損になる.
という状態になっていました。
2. 対応方針
SatNOGS内で議論いただき、この処理に落ち着きました.
今回は decoder側(Kaitai)で未定義値を除外 する方法を採用しました.
つまりksyファイルに「値が0xFFFFFFFFなら出力しない」を追加しました.
3. 実装方法(ksy修正)
修正前は単純に値を読み出していました.
修正前(例)
seq:
- id: imu1_x_axis_acceleration
type: u4
修正後
instanceを使って条件付き出力に変更しました.
instances:
imu1_x_axis_acceleration:
if: imu1_x_axis_acceleration_raw != 0xffffffff
value: imu1_x_axis_acceleration_raw
ポイント
Kaitaiでは
- seq は必ず読み込む.
- instances は条件付きで値を生成できる.
ため、未定義値を除外できます.
4. 適用例
同様の処理を以下のようなフィールドに適用しました.
- IMU系データ
- MTQ関連
- AOBC設定値
5. 結果
Grafanaでその後、No dataが無くなったことから結果、正常値のみプロットされるようになったと思われます.
6. まとめ
衛星設計時に「決められたデータ以外を出力しない、打ち上げ前に十分に確認すべき」だが、
慌てずに、SatNOGSコミュニティに相談することで解決策を得ました.
SatNOGSは大変暖かく、新しく取り組む方にも優しい組織です.
私の対処したことは、以下のことになります.
- Kaitai Structではinstanceを使うことで未定義値を簡単に除外できる.
-
- SatNOGS decoderを作る場合、Ksy記述の際に、欠損値をどこで処理するかを考えて置く.