AvionicsクラスについてはCLASSDOCUMENT.mdでより詳しく解説してます。
AvionicsBaseクラスを基底クラスとし、このクラスを継承したクラスとしてAvionicsクラスを作成していきます。
Avionicsクラスにプラットフォーム依存の動作を記述します。
最後にREADME.mdで書いたように、main.cppで各種動作条件や動作を記述します。
作ってから思いましたがマイコン用にしては相当贅沢にリソース使ってるプログラムになってしまいました。その代わり見通しはいいかなと思います。動作が不安定であったり速度が足りないようでしたらその都度書き換えてください。
-
AvionicsBase
製作するロケットによって仕様が全然違う!といったことがないように、CSVファイルのフォーマットや、「準備中→発射待機→飛行中→機構作動→着陸」の流れ、テレメトリのコマンドや送信データのフォーマットを定義しています。
-
Avionics
タイマーやセンサ類の初期化、読み書きなどプラットフォーム依存の動作を記述しています。
取得したデータは全てAvionicsBaseで定義されたdatas構造体に格納する必要があります。
かなり雑な感じのコードになってます。もはやいらないかもしれない。
-
ModuleWrapper: ライブラリによって異なる実装をなるべく統一した形で記述できるようにするための抽象クラスです。
-
○○Wrapper: 各ライブラリなどをラップしたクラスです。元となるライブラリと、ModuleWrapperを継承しています。
time, pressure, temperatureなどをまとめた構造体です。
accel, gyro, magnで毎回.xとかするのが面倒なので作りました。パフォーマンスを求めるならまずこれを消すのがいいと思います。
Mbedではstd::string, arduinoではStringを使わなければならないため、PlatformDefinition.hの内容によってどちらを使用するか切り替えるための型です。to_string系は全てto_XStringを使用してください。引数はintとfloatだけ対応してますが、追加するのは楽だと思います。
パフォーマンスを求めるならここも削るべきだと思いますが、個人的にstring使わないと死んでしまうので作りました。
どこかで使う関数たちをまとめてます。
XStringと同様に、Mbedとarduinoで使うべき関数が違うのでそれの切り替えもしてます。
9軸用フィルタです。Madgwickのみ実装(サードパーティ製)済み。
その名の通りです。