GithubHelp home page GithubHelp logo

arkedge / c2a-core Goto Github PK

View Code? Open in Web Editor NEW
12.0 2.0 2.0 6.92 MB

Satellite Flight Software: Command-Centric Architecture

License: MIT License

CMake 0.95% C 84.46% Perl 0.68% Python 8.87% Batchfile 0.10% Shell 2.97% Rust 1.98%
c2a

c2a-core's Introduction

Core of Command Centric Architecture

C2A

  • Command Centric Architecture
  • OBC 搭載フライトソフトウェアフレームワーク
  • 本リポジトリは, ArkEdge Space Inc. による C2A の先行開発のため,ut-issl/c2a-core v3.10.0 から fork したもの
  • v3 系列の開発は ut-issl/c2a-core で引き続き行われる

C2A core

  • 各 C2A で共通利用される C2A の中核部のコード
  • 基本的には,各々の C2A user repository (サンプル: TBW) にて, git submodule で参照される.
  • core 開発のための最小限の user 部は examples にあり,これを用いてビルドし,検証する.

ドキュメント

開発

セットアップ

  1. clone 後, setup.bat or setup.sh を実行

Kanban (開発マイルストーンなど)

SILS (Software-In-the-Loop-Simulation) 環境

  • C2A は,フライトソフトウェアがそのまま実行できる SILS 環境を構築できる.
  • つまり,ターゲットの OBC 上で動くソフトウェアが, PC などの上で,そのままエミュレートできる.
  • C2A の SILS runtime として,以下のような実装が存在する.
    • c2a-dev-runtime
      • 開発用の SILS runtime.これが導入済みの C2A user は基本的に cargo run すれば動作する.
      • ドキュメント: docs/sils/c2a_dev_runtime.md
    • S2E
      • 宇宙環境シミュレータ.元々の SILS runtime 実装であり,姿勢制御モジュールなど,宇宙環境模擬が必要な C2A user についてはこちらを用いて検証を行う.
      • 最小限の SILS-S2E は S2E User for C2A Core で実行可能.
  • examples の C2A user は c2a-dev-runtimeS2E User for C2A Core での模擬に対応.
  • examples/mobc(MOBC: Main OBC) と examples/subobc(非 MOBC)を SILS 環境で動作させて接続させることで,C2A 間通信の模擬・検証も行うことができる.

テスト

  • 特定の user を仮定しないと,各種パラメタが確定しないため, examples/mobc でテストする.
  • C2A 間通信に関連する部分のテストのみは examples/subobc を用いる.
  • 詳細は test 参照.

ブランチ

  • main: リリース版(詳細
  • feature/* : 開発ブランチ
  • hotfix/* : 重大バグ修正用ブランチ

採用実績・動作実績

C2A Core の採用実績のある衛星 OBC や動作実績のあるボードの情報をまとめる.

Name Satellite    Lead Institution    Launch / Deploy CPU    Clock              ROM                     RAM                   NVRAM                 Storage                   Interface           Reference
OBC (2U) MAGNARO (Tigris) Inamori Lab. at Nagoya University 2022/10/12 STMicroelectronics STM32F4 90 MHz 2 MiB internal ROM 384 KiB internal RAM, 500 KiB external SRAM 524 KiB MRAM, 131 KiB EEPROM 16 GB SD card UART, SPI, I2C, GPIO, ADC, DCMI 1
OBC (1U) MAGNARO (Piscis) Inamori Lab. at Nagoya University 2022/10/12 STMicroelectronics STM32F4 45 MHz 2 MiB internal ROM 384 KiB internal RAM, 500 KiB external SRAM 524 KiB MRAM, 131 KiB EEPROM 16 GB SD card UART, SPI, I2C, GPIO, ADC, DCMI 1
MOBC SPHERE-1 EYE Sony Group Corporation, ISSL at the University of Tokyo 2023/01/03 Renesas Electronics SH-2A 200 MHz 2.5 MiB internal ROM 128 KiB internal RAM, 8 MiB external SRAM 2 MiB MRAM 2 GiB NAND flash memory UART (RS422, LVTTL), CCSDS (LVTTL), GPIO (LVTTL), ADC
AOBC SPHERE-1 EYE Sony Group Corporation, ISSL at the University of Tokyo 2023/01/03 Microchip Technology PIC32MX7 80 MHz 512 KiB internal ROM 128 KiB internal RAM 512 KiB FRAM None UART (RS422, RS485, LVTTL), SPI, I2C, GPIO (LVTTL), ADC
TOBC SPHERE-1 EYE Sony Group Corporation, ISSL at the University of Tokyo 2023/01/03 Microchip Technology PIC32MX7 30 MHz 512 KiB internal ROM 128 KiB internal RAM None None UART (LVTTL), I2C, GPIO (LVTTL), ADC
AOBC OPTIMAL-1 ArkEdge Space Inc. 2023/01/06
MOBC ONGLAISAT ISSL at the University of Tokyo - Renesas Electronics SH-2A 200 MHz 2.5 MiB internal ROM 128 KiB internal RAM, 8 MiB external SRAM 2 MiB MRAM 2 GiB NAND flash memory UART (RS422, LVTTL), CCSDS (LVTTL), GPIO (LVTTL), ADC 1
AOBC ONGLAISAT ISSL at the University of Tokyo - Microchip Technology PIC32MX7 80 MHz 512 KiB internal ROM 128 KiB internal RAM 512 KiB FRAM None UART (RS422, RS485, LVTTL), SPI, I2C, GPIO (LVTTL), ADC 1
TOBC ONGLAISAT ISSL at the University of Tokyo - Microchip Technology PIC32MX7 30 MHz 512 KiB internal ROM 128 KiB internal RAM None None UART (LVTTL), I2C, GPIO (LVTTL), ADC 1

関連リンク

C2A 関連ツール

User 実装例

関連 crate

Footnotes

  1. Ryo Suzumoto, et al. Improvement of C2A (Command-Centric Architecture) Reusability for Multiple Types of OBCs and Development of Continuous Integration Environment for Reliability of Flight Software. 33rd International Symposium on Space Technology and Science, 2022-f-58, 2022. 2 3 4 5

c2a-core's People

Contributors

200km avatar chutaro avatar gpioblink avatar hender14 avatar hoshika-mas avatar koba789 avatar meltingrabbit avatar renovate-bot avatar renovate[bot] avatar sksat avatar suzuki-toshihir0 avatar tarotene avatar toshiaki64 avatar yngyu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

mitsut keizo042

c2a-core's Issues

歪なディレクトリ構造を修正する

  • あくまで「とりあえず今おかしいモノを修正/マシにする」というモチベーション( #8 と同じ)
  • 現状の設計に対応していないディレクトリ構造を修正するにとどめる(ファイルの分割などはしない)
  • コード上の構造(アーキテクチャ)を変更するわけではないが,字面的にも人間にとっても breaking であり,#8 との関連性も強いため,v4 でやるのが適切
  • 見た目上の作業及び受け取り方としては異なるので別 Issue とするが,#8 とモチベーションは同一であり,不可分なところも多い
    • 例えば,Driver などは一つの語が複数の責務を抱え込んでしまっているため,現状のアーキテクチャに即した rename のみをするとしても Drivers/Super のようなディレクトリ構造は消える可能性が高い(hoge/super にするうまみは無い)

詳細

  • System
    • 全部フラットに top dir にいてもいいかもしれない
    • ディレクトリ構造を変えるのではなく,単に kernel とかに rename するのでもアリ
  • Library
    • Library という区切りに意味がなさすぎるので,top dir にあってよい
    • 存在と命名が歪なだけなので,一旦 utils とかに rename するのでもアリ
  • Script
    • Script/CI とか要らない(そもそも手元で回してもいいはずで,目的が CI なのではない)
  • C2A service(Application)に載ったモノの整理
    • C2A service という枠組みに載っている(目的が大幅に異なる)モノがとても多いので,枠組みに載ったモノすべてを突っ込むディレクトリを切るのは関心事項に対して不当にディレクトリ構造が煩雑になるだけ
    • 枠組みに載っていることを明示するとしても,component_service のように,ディレクトリ構造ではなく名前の一部として示す
    • 関心事項と枠組みに載っているかどうかは別軸の評価なので,木構造で表現するのは無理があるし,前者の方が重要なのでそれに即したディレクトリ構造にする
  • Drivers
    • driver(super)は名前から何も伝わらないし,Drivers/SuperDrivers/Protocol はあまり並列していない

Tasks

  1. enhancement tools
    sksat
  2. enhancement priority::high tools
    sksat
  3. enhancement priority::high tools
    sksat
  4. priority::high tools
    sksat
  5. enhancement priority::medium tools
    sksat

rename & refactor: IF list -> DS handler registry

#21 の rename によって src_user/IfWrapper/if_list.c の歪さが表出する.そもそもこの存在をどうにかしたいというのはありつつ,実態に即した場所と名前は src_user/Settings/DriverSuper/handler_registry.h などなので,これも変更する必要がある.

テレコマDBのパスを変えて標準化する

現在,テレコマDBのパスは以下のようになっている.

  • C2A user
    • src
      • src_user
        • Settings
          • tlm_cmd
            • data_base
              • CMDFILE
              • CMD_DB
              • TLM_DB
                • calced_data

パッと見てわかるように,これは階層が深すぎる.

テレコマDBは衛星毎・対向 OBC 毎に用意し,C2A のコード生成に用いられるため,たしかに単にいち C2A user だけから見ると設定の一種のように見えるが,これは他の OBC(FSW)・他の C2A user との間のインターフェースを記述するためのスキーマであり,システム全体からの視点で C2A user のテレコマDBを見ると,これはいち C2A user そのものが C2A user の外に対して提供する API であり,単なる設定ではない.
また,実務上でも,C2A user のコードそのものを開発しない人でも,テレコマDBを閲覧・編集することは多い.

そのため,テレコマDBが非常に深い階層にあるのは不適切であると考えられる.

APID enum の命名規則を変えたい

概要

APID enum の命名規則を変えたい

詳細

https://github.com/ut-issl/c2a-core/blob/041feb6d931ec46faa1dd622f9a0e5d08712dda0/Examples/2nd_obc_user/src/src_user/Settings/TlmCmd/Ccsds/apid_define.h#L16-L27

これ

現在,TLM,CMDともに,受信先,送信元がGSであることを暗に仮定しているためそうなっているが,今後,MOBC発コンポA向け,といったものも出てきて,FROM,TOを識別したくなってくる.

そうすると,CMD,TLMは頭につけたくなってくる?

たとえば

APID_CMD_TO_MOBC     (APID_CMD_TO_MOBC_FROM_GS の短縮)
APID_CMD_TO_A_FROM_B
APID_TLM_FROM_AOBC     (APID_CMD_TO_GS_FROM_AOBC の短縮)
APID_TLM_TO_B_FROM_A

close条件

考えたら

関連

C2A HAL のもうつかわないだろう,というファイルを消す

詳細

close条件

けしたら

コマンドの関数の宣言をするヘッダを分割したい

概要

詳細

理由としては以下のようなものがある

  • 公開関数の宣言とコマンド関数の宣言は意味合いが異なるので,明示したい
    • 現状でも prefix が違うので見た目こそ違う(ex: TMGR_, Cmd_)が,異なるレイヤに対する公開なので,もっと明示的にやりたい
    • 例えば,System/TimeManager/obc_time.h はコマンドを含まず,System/TimeManager/time_manager.h はコマンドを含んでいるが,なんらかのモジュールを見に行った時に,どの実装が実際にコマンドを提供しているかが明示できる(例: #585 )
  • ヘッダの依存関係の整理のため
    • 現状だとあらゆるヘッダで TlmCmd/common_cmd_packet.h が雑に include されているが,大抵の場合はそのモジュールが要求しているのではなく,「そのモジュールのコマンドを定義するため」に使っているものなので,その依存ツリーをファイルとして表現したい
    • このメリットの1つとして,c2a-core の多くのヘッダの user 部への依存を分割することができる
      • 例: #583
    • これにより,ヘッダを解析して Rust から扱う,といったことが行いやすくなるというメリットもある
  • コマンドに関する自動的な処理が行いやすくなる
    • TlmCmd DB からのプロトタイプ宣言の自動生成などができる

close条件

  • 少なくとも c2a-core 全体でヘッダを分割した
  • コーディング規約的なものとして明示した

v4.1.0 リリース

詳細

かならずやりたい

  1. documentation enhancement
    meltingrabbit sksat
  2. Gaia priority::high
    meltingrabbit
  3. priority::high
    meltingrabbit
  4. enhancement priority::high
    meltingrabbit
  5. enhancement priority::high
    meltingrabbit

できればやりたい

備考

  • 前回 #2

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Location: renovate.json
Error type: Invalid JSON (parsing failed)
Message: Syntax error near ],

C2A 用語のリネーム: v4.0.0 まで

詳細 (v4.0.0まで)

C2A 用語がわかりにくいので,一般的な CS 用語に変換していく
これに伴い,ディレクトリ構造も変更する

  • IF Wrapper -> HAL: #21
  • Driver -> Component Driver: CDRV: #146
  • Driver Inctance -> Component Service: CS: #143
  • #148

詳細 (v4.0.0以降)

close条件

上のチェックリストが完了したら

備考

過去の議論: ut-issl/c2a-core#454

minimum_user, 2nd_obc_user の rename

詳細

  • わかりにくい
  • 2nd のように,先頭数字は使いにくい

close条件

  • ディレクトリやドキュメントのリネーム
  • 各所接頭語などのりネーム

v4.0.0-alpha のリリース

  • v3 -> v4 の変更はほとんどが migration script による移行が可能(主目的が rename であり,v4.0.0 での変更はそれに徹するため)
  • しかし, #18, #19 に関してはそうではない
  • そのため,実際に C2A user で v4 系への core update を行う際,通常の c2a-core update のような作業と migration script + α の作業が発生してしまう.この作業を分割したい(そうでないとレビューも行いにくい).
  • そこで,後出しではあるが #19 のマージ時点でバージョンを切りたい

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Repository problems

These problems occurred while renovating this repository. View logs.

  • WARN: File contents are invalid JSON but parse using JSON5. Support for this will be removed in a future release so please change to a support .json5 file name or ensure correct JSON syntax.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

cargo
Cargo.toml
  • semver 1.0.22
  • clang 2.0.0
  • c2a-bind-utils 4.0.0-beta.0
dev-runtime/Cargo.toml
  • c2a-core 4
hal/i2c-noop/Cargo.toml
  • c2a-core 4
hal/spi-noop/Cargo.toml
  • c2a-core 4
hal/uart-kble/Cargo.toml
  • c2a-core 4
  • once_cell 1
  • futures 0.3
  • kble-socket 0.3.0
  • tokio 1
  • axum 0.6
  • anyhow 1
  • c2a-core 4
hal/uart-noop/Cargo.toml
  • c2a-core 4
hal/wdt-noop/Cargo.toml
  • c2a-core 4
library/bind-utils/Cargo.toml
  • bindgen 0.69.4
  • doxygen-rs 0.4.2
github-actions
.github/workflows/actionlint.yml
  • actions/checkout v4.1.7
  • reviewdog/action-actionlint v1
.github/workflows/build.yml
  • arkedge/workflows-c2a v5.2.0
.github/workflows/build_as_cxx.yml
  • actions/checkout v4.1.7
.github/workflows/build_with_s2e.yml
  • actions/checkout v4.1.7
  • actions/checkout v4.1.7
  • actions/checkout v4.1.7
  • ilammy/msvc-dev-cmd v1
  • actions/cache v4.0.2
  • windows 2022
.github/workflows/check_code_generation.yml
  • actions/checkout v4.1.7
.github/workflows/check_coding_rule.yml
  • arkedge/workflows-c2a v5.2.0
.github/workflows/check_encoding.yml
  • actions/checkout v4.1.7
  • actions/setup-python v5.1.1
.github/workflows/deploy-reference.yml
  • actions/checkout v4.1.7
  • actions/upload-pages-artifact v3.0.1
  • actions/deploy-pages v4.0.5
  • ubuntu 22.04
  • ubuntu 22.04
.github/workflows/labeler.yml
  • actions/checkout v4.1.7
  • crazy-max/ghaction-github-labeler v5.0.0
.github/workflows/pytest.yml
  • actions/checkout v4.1.7
  • pnpm/action-setup v4.0.0
  • actions/setup-node v4.0.3
  • actions/cache v4.0.2
  • Swatinem/rust-cache v2.7.3
  • arduino/setup-protoc v1
  • sksat/setup-rye v0.26.0
.github/workflows/python_check_format.yml
  • actions/checkout v4.1.7
  • reviewdog/action-black v3
.github/workflows/python_lint.yml
  • actions/checkout v4.1.7
  • actions/setup-python v5.1.1
  • reviewdog/action-flake8 v3
.github/workflows/rust.yml
  • actions/checkout v4.1.7
  • dtolnay/rust-toolchain v1
  • Swatinem/rust-cache v2.7.3
  • sksat/action-clippy v1.0.0
.github/workflows/validate-renovate.yml
  • actions/checkout v4.1.7
  • pnpm/action-setup v4.0.0
  • actions/setup-node v4.0.3
pyenv
.github/workflows/.python-version
  • python 3.12
regex
.github/workflows/build_with_s2e.yml
  • ut-issl/s2e-core v7.2.7

  • Check this box to trigger a request for Renovate to run again on this repository

リリースフローをどうにかする

  • 現在のリリースルールでは,中途半端な Git flow のような状態になっている
    • main, develop のブランチが存在するが,main の更新は必ず develop からのマージで行われることを想定したルールになっている
    • つまり,通常のリリースだけ Git flow 的な形式を有しているが,hotfix が存在しない

修整案は以下

  • 真に git-flow をやるための hotfix のためのルールを追加する
  • main ブランチ(の役割を持つもの)を消す
    • 実際には,今の developmain に rename して,main で開発もリリースもする,かも
    • 現在のリリース体制では main ブランチには存在価値が無い
  • main ブランチ(の役割を持つもの)を消した上で,過去のバージョンをメンテするためのブランチ・ルールを追加する
    • stable-4.1 のようなブランチを生やして過去のバージョンのメンテ(patch update)を可能にする
    • これまで c2a-core で hotfix / patch update が行われないがちだったのは,そもそも not breaking な対応が行いにくい構造であるのが半分,過去のバージョンをメンテする仕組みがなかったのが半分

Broken install jrsonnet 0.5.0-pre9

詳細

詳細症状

examples user で C2A Boom のセットアップのためのnpm install 内で呼ばれる cargo install --debug --root . jrsonnet --version 0.5.0-pre9 がコケる.

   Compiling jrsonnet v0.5.0-pre9
error[E0432]: unresolved import `jrsonnet_evaluator::throw`
  --> /home/sksat/.cargo/registry/src/index.crates.io-6f17d22bba15001f/jrsonnet-0.5.0-pre9/src/main.rs:12:2
   |
12 |     throw, ResultExt, State, Val,
   |     ^^^^^ no `throw` in the root

error: cannot determine resolution for the macro `throw`
   --> /home/sksat/.cargo/registry/src/index.crates.io-6f17d22bba15001f/jrsonnet-0.5.0-pre9/src/main.rs:194:4
    |
194 | ...   throw!("value should be object for --multi manifest...
    |       ^^^^^
    |
    = note: import resolution is stuck, try simplifying macro imports

For more information about this error, try `rustc --explain E0432`.
error: could not compile `jrsonnet` (bin "jrsonnet") due to 2 previous errors
error: failed to compile `jrsonnet v0.5.0-pre9`

発生条件

C2A の事情には関係なく,jrsonnet 0.5.0-pre9 自体が壊れている.
内部でのバージョン付け・参照に不備があり,lock せずにビルドしようとすると内部で jrsonnet-evaluator v0.5.0-pre95 が使用されてしまう.

追加資料

あればリンクなどを貼る

必要な作業

  • jrsonnet は lockfile を使ってインストールするようにする

影響範囲

example user の C2A Boom

CommandDispatcher の統一的なテレメをCoreが提供する

詳細

  • AE の MOBC では,GS CDIS,AOBC CDIS 以外にもたくさんの CDIS がある
  • 一方で,それぞれで CDIS 構造体のテレメをつくるのはめんどくさいし,管理が大変
  • コマンドで対象 CDIS を指定したら,そのテレメが降りてくるようなテレメをつくる

close条件

つくったら

備考

  • Driver Super についても同様のしくみが必要そう

c2a-enum-loader を吸収合併する

c2a-enum-loader リポジトリを c2a-core リポジトリに吸収合併したい.

詳細

c2a-enum-loader は c2a-core の構造に密接に関連しており,実質的に c2a-core とリリースサイクルが同じツールである.そのため,リポジトリを分割していても無駄にリリース手順が複雑になるだけであるため,c2a-core リポジトリに吸収合併したい.

close条件

リポジトリを併合したい

備考

ISSL に要連絡

CHANGELOG ほしい

詳細

  • 現状,c2a-core に対する変更はリリースの間の Pull Request を眺めてユーザ側で何が起きたかを察する運用になっている
    • 実際の C2A user への変更は examples/mobc の diff を見て察している
    • これは「対応する項目の一覧」としては機能するが,大変すぎる
  • 単に diff だけを見ていて何のために何をどう入れたのかという議論まで追われず,曖昧な対応がされていることもしばしばある
  • c2a-core 内部の変更(これが現状では少ないというのもあるが)と C2A user まで含んだ変更を区別し,ユーザに対して明示したい

close条件

CHANGELOG を用意したら

CMake option を整理したい

詳細

  • C2A_ prefix に揃えたい
  • USE_32BIT_COMPILER が分かりにくすぎるので rename する
  • C2A_USE_SCI_COM_WINGS を default OFF にする

close条件

どうなったらcloseできるか

備考

なにかあれば

ディレクトリ名の CamelCase をやめたい

詳細

  • #7 (comment) ででた
    • これはファイル名・ディレクトリ名で大文字か小文字かにあまり意味を持たせたくない(し、Win だとこれは実際機能してなかった)半分、Rust の慣習に寄せたい半分です。
  • 影響範囲が大きいので,精査してやる

close条件

できたら

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.