TLEの計算はおおよそ実装した。まだPC側だけど。
中断してたマイコン側の開発を進めよう。と、思って、今度はSAOの計算をPC側で実装中。マイコン側が一向に進まない。。。
衛星はダイナミックに動くので、ジンバルの動作確認用の最初のターゲットとしては扱いづらい。逆に、ある程度動くことがわかった状態であれば、10分くらいのオーダーで見てれば追尾してるのがわかりやすいんだけどね。開発中は「なんか変な方向に向いてるな?」と思ったら移動しただけだった、ということがある。バグ探してビルドして書き込む間にウインドウ終わってたりするので、都度可視の衛星を探すのが面倒。恒星だとそこまでの速さで動き回ることはないので、ポカミスを防げる。
C++のライブラリなので、constexprでパーサを書くと生データを直接突っ込んで定数を作れるので便利、と思ったんだけど、constexprでconst char*からdoubleへ変換する機能がない。シンプルな浮動小数点なら自前で変換できる場合もあるけど、指数表記とかされてると面倒。
全部きっちりデータ入ってるならsscanfとかで処理できるけど、SAOはヌルデータ(セパレータの連続)があったりして、そういうところは%dや%lfでは処理できない。あと組み込みでsscanfは割と地雷なのであんまり使わないほうが無難。scanf系は変数のビット幅に敏感なので、組み込み単体で使っても不具合出る場合もあるし、PCで作ったライブラリを組み込みに移植したりすると特に不具合が出やすい。PCだとint32_tは%dなのにマイコンだと%ldを指定する必要がある、みたいな。
とりあえず、idとRAとdecだけ読み取れば十分かな、という気がしてる。元期や固有運動はいらないはず。ジンバル側の精度そこまで無いし。
id/RA/decだと24バイトで収まるけど、元期と固有運動も含めると倍以上になる。マイコンのROMは1MiBあるのでかなり余裕だけど、書き込みに時間がかかるようになるのでデバッグがストレスフル。
しかし、ROMに余裕があっても、非constexprコンストラクタだから、RAMに展開されるのか。やっぱりROMに突っ込みたい。PCで前処理して浮動小数点リテラルの配列みたいな形に変換しておいたほうが良さそうだな。そうすればVmagでフィルタリングできるし。Vmagでソートして明るい恒星上位100個だけROMに焼いておいて、ほかはUSBメモリから読み出す、みたいな形式にしておけば、軸の校正をするときは単体で使えるし、光学系の感度の確認をしたいときはUSBメモリ突っ込んで暗い星をトラッキングする、みたいな使い方ができるはず。100個なら4KiB未満に十分収まるからROMに入れれるなら問題ない。
しかし、TLEはROMに入れれないから、結局はUSBメモリなりmicroSDなりが必須になるか。ま、PCの制御下にあるならCDC経由で送りつけてやればいいし、必要になったら考えよう。
***
ポルタII経緯台、微動ハンドルはΦ6mmのDカットっぽい。ステッピングモーターはΦ5mmなので、普通のシャフトカプラのラインナップ内。ただ、そもそもポルタIIは手で動かすようなものだから、モーターを追加する余地があまりない。
まぁ、こっちも追々考えよう。
0 件のコメント:
コメントを投稿