【概要#3】Space ROSとROS 2の違い

著者：@YukiIkeda_robot、@TheJuniorTheSenior、@tainirigel

# はじめに
本記事は、Space ROS Advent Calendar 2024の１つです。

Space ROS Advent Calendar 2024の概要については、下記の記事をご参照ください。

https://qiita.com/YukiIkeda_robot/items/876fbfe976ab71c9a53e

- [Space ROS Advent Calendar 2024について]( https://qiita.com/YukiIkeda_robot/items/876fbfe976ab71c9a53e)

また、宇宙向けのROSであるSpace ROSの説明については、同じくSpace ROS Advent Calendar 2024の記事である下記をご参照ください。

- [【概要#1】宇宙ロボットの背景を概観してみる](https://qiita.com/yuyuqq/items/ca7879b3c2df5244f836)
- [【概要#2】Space ROSの目的](https://qiita.com/yuyuqq/items/cbe07bfe8e8767c095f7)

本記事では、このSpace ROSとROS 2との違いについてまとめていきます。

# Space ROSとROS 2の違い
Space ROSは、ROS 2を基盤にして、宇宙ミッションに特化したリアルタイム性と信頼性の強化を目指して設計されています。

特に、宇宙空間という厳しい環境での使用を想定し、ハードウェアやソフトウェアの障害に耐えうる設計や、リアルタイムなデータ処理、堅牢性の高い通信プロトコルなどを強化しています。

現在までの開発では、宇宙でROSを使えるようにするための、Space ROSの基盤を確立することに重点が置かれており、主に以下の4つの点がROS 2と異なります。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922460/6cd0311c-6615-4f48-1d08-a3bbdfb84354.png)

特に、この中でも、皆さんが一番気になるであろう「宇宙特有の機能」が、宇宙ロボットにおいてはROSではなく、Space ROSをもちいていきたい理由にもなってきます。

下記では、それぞれについてより詳しくまとめていきます。

# ビルドとインフラ
Space ROSでは、開発者が効率的に作業を進められるよう、独自のビルドシステムとインフラが整備されています。

これにより、信頼性の高いビルド環境や情報提供が可能となり、開発プロセスをサポートします。

以下は、Space ROSに関連する主なインフラ要素です。

### 1. [Dockerイメージ](https://hub.docker.com/r/osrf/space-ros)
Space ROSでは、Space ROS用のビルド済みDockerイメージが提供されています。

このイメージを利用することで、環境構築の手間を軽減し、すぐにSpace ROSの利用を開始できます。

こちらの環境を初めて利用する場合は、準備や設定が必要です。詳しいインストール方法や初期設定は、2日後に公開予定のSpace ROS Advent Calendar 2024の記事で、詳しく説明していきますので、楽しみにしていてください！

- [【概要#5】Space ROSのMars Roverデモ](https://qiita.com/YukiIkeda_robot/items/510e5073cfb66937eae5)

### 2. [Earthly builds](https://earthly.dev/)
Space ROSは、効率的なCI/CD (継続的インテグレーション／デプロイメント) を可能にするため、Earthlyをビルドツールとして採用しています。

Earthlyを利用することで、再現性の高いビルド環境が確保でき、複雑なビルドプロセスを簡素化できます。

開発者にとって、複数のプラットフォームでの一貫したビルドが容易になります。

### 3. [GitHub](https://github.com/space-ros)
Space ROSのソースコードや関連リソースは、独自のGitHub Organization上で公開されています。

GitHubでは、最新のコード、Issue(問題)トラッキングなどが確認できます。

また、Space ROSの開発に参加したい方やソースコードをカスタマイズしたいユーザにとっての貴重な情報が揃っています。

GitHubのパッケージ構成についての説明は、下記のSpace ROS Advent Calendar 2024の記事で、詳しく説明していますので、ぜひご参照ください。

- [【概要#4】Space ROSのパッケージ構成](https://qiita.com/YukiIkeda_robot/items/a308615180a198979daa)

### 4. [公式ウェブサイト](https://space.ros.org/)
Space ROSでは、Space ROS独自の公式ウェブサイトを用意しています。

Space ROSの公式ウェブサイトには、Space ROSに関する情報や関連記事等が掲載されています。

ここでは、Space ROSの概要や最新ニュース、開発者向けの情報やイベント告知、関連する記事や動画へのリンク集などが確認できます。

### 5. [ドキュメント](https://space-ros.github.io/docs/rolling/index.html)
Space ROSでは、Space ROS専用のドキュメントを整備しています。

こちらは、ROS 2のドキュメントとは異なる、Space ROS独自の情報が記載されています。

Space ROSはROS 2をベースに開発しているので、ROS 2が扱える前提でデモ等が進んでいきます。

そのため、ROS 2に触れたことがない方は、事前にROS 2に調べておくのが良いと思います。

ROS 2の基本的な情報については、[ROS 2の公式ドキュメント](https://docs.ros.org/en/humble/index.html)を参照してください。

# コード解析ツール
宇宙ミッションで使用されるソフトウェアは、航空宇宙品質の高い信頼性が求められるため、様々な解析ツールが用いられています。

Space ROSでは、この航空宇宙の品質に準拠するために、プログラムを実行せずにコードの構造や構文を解析して、エラーや脆弱性を検出するソフトウェアである静的解析ツールが用意されています。

静的解析ツールは、NPR 7150.2[^1]やDO-178C[^2]などの様々な規格で推奨されています。

[^1]: NASAが規定する、宇宙関連ソフトウェア開発における標準。詳しくは[アドベントカレンダー３日目の記事](https://qiita.com/yuyuqq/items/cbe07bfe8e8767c095f7)をご覧ください。

[^2]: 航空関連ソフトウェア開発における標準。

ROSを宇宙向けにするために、最初に考えたのが、ソースコードの品質と、認証をサポートするために必要な成果物を作成することでした。

この目的のため、ROS 2で利用可能なコアセット以外にもコード解析ツールを追加しています。

また、後述する標準規格のSARIFファイル形式を使用するようにツールの出力を更新し、ツールの出力を表示するためのダッシュボードインターフェースを搭載しています。

### 1. [Cobra 静的解析ツール](https://spinroot.com/cobra/)
Cobraは、2015年にNASAのジェット推進研究所 (JPL) で開発された静的解析ツールになります。Space ROSには、このCobraが組み込まれています。

コード解析のルールセットであるP10やCWE(Common Weakness Enumeration)を含むサポートをしています。

豊富なクエリスクリプト言語を使用して、最大数百万行のコードベースのインタラクティブな解析を実行できるのが特徴です。

数百万行のコードを持つプロジェクトに存在する、潜在的な問題の検出や、品質の向上に用いられます。

### 2. [IKOS 静的解析ツール](https://software.nasa.gov/software/ARC-16789-1)
IKOSは、抽象的解釈の理論に基づいたNASAの静的解析ツールです。Space ROSには、このIKOSが組み込まれています。

IKOSは、大規模で複雑なコンピュータプログラムにも拡張可能な解析ツールになっています。

また、プログラムの検証に対する健全なアプローチを提示することができます。要するに、プログラムの問題に対して、アドバイスしてくれるわけです。

特に、宇宙関連システムの検証に最適化された設計で、ソフトウェアのバグや欠陥を健全に解析することができるのが特徴です。

安全性と信頼性が求められる宇宙探査機のソフトウェア検証に用いられます。

IKOSの詳しいインストール方法や使い方は、Space ROS Advent Calendar 2024の記事にまとめる予定ですので、ぜひ楽しみにしていてください！

- [【コア#4】 IKOS（基本編）](https://qiita.com/LuckyCat/items/b8188ffd5efa5aa4bbbf)
- [【コア#5】 IKOS（実践編）](https://qiita.com/LuckyCat/items/98c502d7a44b803a746b)

### 3. [MC/DC テストツール](https://gtd-gmbh.gitlab.io/mcdc-checker/mcdc-checker/_downloads/bde6b1b30b75c07c02f00abd96208cfa/MCDC_for_Space_DASIA_2021.pdf)
Modified Condition/Decision Coverage (MC/DC) は、航空機搭載ソフトウェアの安全性を確保するための開発・認証ガイドラインであるDO-178Cや、NASAのソフトウェアエンジニアリング要求を定めた基準文書であるNPR 7150.2で要求される網羅的な指標になっています。ここでは、様々なセーフティクリティカルな規格が要求されています。

Space ROSには、オープンソースのMC/DCカバレッジ(網羅的な)解析が組み込まれています。

条件・意思決定のすべての組み合わせが少なくとも1回は実行されることを保証するのが特徴です。

ロケット制御システムや自動運転機能の検証に用いられます。

### 4. [SARIF形式](http://docs.oasis-open.org/sarif/sarif/v2.0/csprd01/sarif-v2.0-csprd01.html)での出力
SARIF (Static Analysis Results Interchange Format) は、静的解析ツールの出力の標準規格であるJSONベースのファイル形式です。

Space ROSでは、すべての静的解析ツールが、このSARIF形式で出力するようになっています。

これにより、異なるツールの出力を統一して管理でき、開発プロセスにおける効率的な解析結果の共有が可能になります。

### 5. SARIFバンドル
SARIFバンドルは、Space ROSでの複数の静的解析ツールの結果を、1つのアーカイブとしてまとめる機能になっています。

Space ROSで作成されたソースコードに対して、静的解析ツールを実行した後、Space ROSのビルドシステムでは、解析ツールによって生成されたSARIFファイルを、1つのアーカイブファイルにまとめます。

このアーカイブには、オリジナルのSARIFファイル、冗長な出力が削除された処理済みのSARIFファイル、アーカイブのメタデータが含まれています。

開発チーム全体での一元的な問題追跡や成果物管理などに用いられます。

### 6. コード解析ダッシュボード
コード分析ダッシュボードは、Visual Studio Codeのプラグインとして、SARIFファイルを解析し、静的解析ツールで検出された問題を視覚化することができます。Space ROSには、このコード分析ダッシュボードが組み込まれています。

また、グラフやチャートを活用して、問題対応の進捗を把握することができたり、異なるビルド間の解析結果を比較して、品質の向上を確認することができたりします。

問題を迅速に把握し、その問題への対応の効率化で活用されています。

# 要件ツールとプロセス
航空宇宙業界では、要件が全システムレベルで一貫していることを示すトレーサビリティが重要視されます。

特に、ハイレベルな設計等の要件から、ローレベルのコード等の成果物までの完全な要件トレーサビリティ(追跡)が不可欠になってきます。

Space ROSでは、航空宇宙業界で求められる品質基準に適合するため、以下のような要件取得から追跡までを支援するツールとプロセスを取り入れています。

- 要件の階層化
    - ハイレベル要件から派生する下位要件まで、すべてが明確にリンクする機能。
- バージョン管理
    - 要件の変更履歴を追跡し、開発プロセス全体で透明性を確保する機能。
- 成果物の統合
    - 要件トレーサビリティをソースコードやテストケースと関連付ける機能。

これにより、システム全体の信頼性向上と、要件レベルでの検証作業を効率化しています。

### 1. [Doorstop](https://doorstop.readthedocs.io/en/latest/)
Doorstopは、ソースコードのバージョン管理システムと一緒に、テキスト形式の要件を保存することができる要件管理ツールです。

Space ROSには、このDoorstopが組み込まれています。

テキスト形式で要件を記録・追跡でき、Gitなどと一緒に利用することで、要件管理を開発フローに自然に組みこむことができます。

要件を階層的に整理し、各レベルでのトレーサビリティを確保したり、要件のバージョン管理が可能です。

また、要件をPDFやHTMLなど複数のフォーマット形式で公開する機能も持っています。

宇宙機の動作要件を階層化 (例：システム要件 → サブシステム要件 → コンポーネント要件) し、設計・実装と整合性を保ちながら管理するようなケースで用いられたりします。

### 2. [FRET](https://software.nasa.gov/software/ARC-18066-1)
FRET (Formal Requirements Elicitation Tool) は、NASAが開発した要件引き出し・形式化ツールです。

Space ROSには、このFRETが組み込まれています。

自然言語で記述した要件を、形式的な表現に変換し、曖昧さの排除やレビューを支援することができます。

自然言語で要件を記述し、それを形式論理やタイムライン図などに変換したり、要件の一貫性や階層構造について解析できたりします。

また、他の解析ツールに対応する形式 (例：SimulinkやModel Checkingツール用形式) でエクスポートすることもできます。

ロボットの制御におけるシステムの要件 (例：ロボットは10ms以内に障害物を検出する必要がある) を形式論理に変換し、シミュレーション環境で検証するようなケースで用いられます。

# 宇宙特有の機能
きっと皆さんお待ちかねの宇宙特有の機能についてです。この機能が、わかりやすくSpace ROSの宇宙らしさになるかと思います。(これまで説明してきた機能は、開発のプロセスという感じなので。。。)

Space ROSでは、宇宙機のフライトソフトウェアシステムから、テレメトリ (遠隔地からデータを収集・受信する技術やそのデータ) をサポートするパッケージなど、宇宙ミッション特有の要件を満たすために設計された機能を提供しています。

これにより、宇宙環境におけるリアルタイム性や信頼性が強化され、宇宙機のフライトソフトウェアとのスムーズな統合が可能になります。

### 1. C++ PMR メモリアロケータ
Space ROSでは、C++標準のPMR (Polymorphic Memory Resource) メモリアロケータ(メモリに割り当て機能)を活用した、柔軟なメモリ管理が可能になっています。

ユーザーが独自のアロケータを提供でき、それをSpace ROSのコアモジュールで使用できるようになっています。

これにより、非決定的な(リアルタイムでない)動作の回避や、リアルタイムシステム向けの最適化を実現できます。

宇宙ロボットで、メモリ不足によるクラッシュを防ぐために専用アロケータを設計し、リアルタイム動作を保証するようなケースで用いられます。

### 2. イベント＆テレメトリーサブシステム (ETS)
イベント＆テレメトリシステム (ETS) は、宇宙機のフライトソフトウェアのイベントレポートとテレメトリ監視を実現するための堅牢なシステムです。

センサーやシステムログからのデータを効率的に収集・記録したり、異常検知やトラブルシューティングをサポートすることができます。

一般的な宇宙機にも用いられる機能で、Space ROSにも組み込まれています。

宇宙機の状態を地上管制でモニタリングすることができ、これにより問題発生時に迅速に対処などが可能になります。

### 3. [デモアプリケーション](https://space-ros.github.io/docs/rolling/Demos.html)
Space ROSでは、火星探査ローバーのCuriosityや、ISSに搭載されたマニピュレータのCanadarmなどの、GazeboシミュレータとSpace ROSを統合したデモアプリケーションを提供しています。

Space ROSの入門として、実用的なユースケースを示し、活用方法をユーザに提供することを目指しています。

特に、火星探査ローバーのCuriosityのデモは、2日後に公開予定のSpace ROS Advent Calendar 2024の記事で、詳しく説明していきますので、楽しみにしていてください！

- [【概要#5】Space ROSのMars Roverデモ](https://qiita.com/YukiIkeda_robot/items/510e5073cfb66937eae5)

### 4. [シミュレーション](https://github.com/space-ros/simulation)
Space ROSのGitHub Organizationには、宇宙関連のシミュレーションに必要な資産を集約するリポジトリがあります。

このリポジトリには、これまで述べてきたような全てのシミュレーション資産が保管されており、時間の経過とともにシミュレーション資産を追加し続けられるよう、拡張性を備えた構成になっています。

### 5. [RTEMS](https://www.rtems.org/)
RTEMSは、宇宙探査や組み込み機器で広く利用されているオープンソースのリアルタイムオペレーティングシステム(RTOS)です。(ここでいうリアルタイムとはコンピュータの命令が決定的であるということを指しています)

オープンスタンダードのAPI (Application Programming Interface) であるPOSIX等をサポートしており、宇宙飛行、医療、ネットワーク、その他多くの組み込み機器で使用されています。

宇宙機のフライトソフトウェアにおいては、リアルタイム性を最大限に引き出すことができる設計になっています。

Space ROSでは、よりフライトソフトウェアシステムに特化したサポートとしてROS 2がRTEMSで動く環境と、デモアプリケーションの提供を目指しています。

これにより、衛星のフライトソフトウェアをSpace ROSと統合し、ROSを用いたリアルタイムでの動作を実現できます。

RTEMSを含むRTOSに関する詳しい話は、Space ROS Advent Calendar 2024の期間中の記事にまとめる予定ですので、ぜひ楽しみにしていてください！

- [【コア#1】 RTEMS(RTOS)概論](https://qiita.com/akira_hirota/items/fe9c40fd6d1537f29620)
- [【コア#2】RealTimeOSでなきゃいけないの？](https://qiita.com/yuyuqq/items/b8baa23e28cbb0ca0aba)


### 6. cFS/ROS 2ブリッジ
Space ROSでは、NASAが開発したオープンソースのフライトソフトウェアであるcFS (core Flight System)との統合を可能にするツールを導入しています。

cFSは、NASAを中心とした様々な宇宙機に搭載された実績があるソフトウェアです。

ROSとフライトソフトウェアの相互運用性のためのツールとして，JAXAが開発するRACS (ROS and cFS System) や、BRASH統合ツールキットという活発なプロジェクトを、Space ROSに統合することを目指しています。

現状のROSには、宇宙機のフライトソフトウェアとしての機能を有したソフトウェアリソースはないため、このような宇宙機への搭載実績のあるソフトウェアとの連携が大切になってきます。

cFS、RACS、BRASHの詳しい話は、Space ROS Advent Calendar 2024の記事にまとめる予定ですので、ぜひ楽しみにしていてください！

- [【ツール#1】cFS](https://qiita.com/ttsto/items/bea14d8820544a2d42b7)
- [【ツール#2】RACS2の要求仕様](https://qiita.com/yuyuqq/items/cc597b550642c9c2672d)
- [【ツール#3】RACS2デモ (Example、MarsRoverデモ)](https://qiita.com/yuyuqq/items/eecf6ad59792bcd048e8)
- [【ツール#4】BRASH](https://qiita.com/LuckyCat/items/13f1cfa5189af8aca5db)
- [【ツール#5】Space ROSを用いたTurtleBotのデモ](https://qiita.com/YukiIkeda_robot/items/a97f11340c0ac4cb8a0c)

### 7. その他 宇宙特有の機能に関するパッケージ群
Space ROSでは、上記以外にも宇宙特有の機能を持ったパッケージ群などが考えられています。

現時点では、宇宙でROSを動かすことに特化した機能が多く、これらのパッケージの姿形はありませんが、例えば無重力空間でのマニピュレーション用パッケージ、姿勢制御パッケージ、月面や火星などの特徴点が少ない環境下での自律移動パッケージなど、宇宙ならではの技術パッケージの開発も進めていきたいところです。

その他の宇宙特有の機能に関するパッケージ群の詳しい話は、Space ROS Advent Calendar 202の記事にまとめる予定ですので、ぜひ楽しみにしていてください！

- [【ライブラリ#1】 Nav2](https://qiita.com/erina_mori/items/65c137670c6ed3ab8e41)
- [【ライブラリ#2】 SpaceNav構想](https://qiita.com/tainirigel/items/f4126350e2170e34403b)
- [【ライブラリ#4】Moveit Pro Spaceについて書いてみる](https://qiita.com/ttsto/items/d64dc31e860f95ad0492)
- [【ライブラリ#5】ロボットの意思決定：Behavior Tree](https://qiita.com/ramuda25/items/651281e0ace86b29f12e)
- 【関連記事#1】物理シミュレータ・センサエミュレータ/SILS/HILS (Coming Soon)
- [【関連記事#2】宇宙機の姿勢制御パッケージ](https://qiita.com/akira_hirota/items/bb39e192025a54ff3497)

# まとめ
Space ROSは、ROS 2を基盤にして、宇宙ミッションに特化したリアルタイム性と信頼性の強化を目指して設計されています。

実際の宇宙機・宇宙ロボットで動作することを考えると、RTOS上での動作や、実績のあるフライトソフトウェアであるcFSとの連携、IKOSなどの静的解析による、信頼性と安全性の高いミドルウェアを提供できるかが焦点となってきます。

そのため、信頼性と安全性に関する機能が、特に多い感じになっています。

現時点では、ROSを宇宙でも使えるようにするということを優先に、既にNASAやJAXAが開発してきた宇宙機向けのソフトウェアを取り込みながら、Space ROSとしての形を作っているような印象です。

# 最後に
…と、Space ROSは宇宙機に求められる非常に高い信頼性を満たしつつ、ROSの特徴を持ち込もうとするものです。これらの開発が進み、実際の宇宙でROSを動かせるようになれば、大盛況間違いなしです！

現時点では、Mars Rover やCanadarm のシミュレーションなどが利用可能になっているものの、未だ開発段階であり、実際の宇宙機・宇宙ロボットで使用できるソフトウェアは存在していません。NASAやJAXAなどの宇宙機関は、この実証機会に向けて開発を進めているので、今後のSpace ROSのアップデートにも期待です！

宇宙機・宇宙ロボットで求められる、信頼性と安全性は、自動車、航空機、産業用ロボット、災害救助ロボット、医療ロボット、サービスロボットなど、地上の技術にも求められるものであり、本質的には地上でも考えられる課題です。宇宙だけではなく、地上でも宇宙機並みの品質が求められるシステムに適用できると考えています。

そのため、宇宙開発に関係する方々も、宇宙開発に関係しない方々も、Space ROSに興味を持っていただけると嬉しくおもいます。ぜひ一緒にSpace ROSを盛り上げていきましょう！！

Space ROS Advent Calendar 2024の投稿・購読もお願いします！！