【概要#4】Space ROSのパッケージ構成

著者：@YukiIkeda_robot、@TheJuniorTheSenior

# はじめに

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

Space ROS Advent Calendar 2024の概要については、下記の記事をご参照ください。
- [Space ROS Advent Calendar 2024について]( https://qiita.com/YukiIkeda_robot/items/876fbfe976ab71c9a53e)

また、Space ROSについては同じくSpace ROS Advent Calendar 2024の記事である下記をご参照ください。
- [【概要#1】宇宙ロボットの背景を概観してみる](https://qiita.com/yuyuqq/items/ca7879b3c2df5244f836)
- [【概要#2】Space ROSの目的](https://qiita.com/yuyuqq/items/cbe07bfe8e8767c095f7)
- [【概要#3】Space ROSとROS 2の違い](https://qiita.com/YukiIkeda_robot/items/227380feca2e8c7e886d)

本記事では、このSpace ROSのパッケージ構成についてまとめていきます。

# Space ROSのパッケージ構成
宇宙機・宇宙ロボット向けのROS(Robot Operating System)であるSpace ROSは、ROSとは異なるSpace ROS独自のGitHub Organization上で開発されています。Space ROSのGitHub Organizationは下記をご参照ください。

本記事では、このSpace ROSののGitHub Organization上に公開されているリポジトリおよびパッケージの構成とその役割についてお話ししていきたいと思います。

https://github.com/space-ros

:::note info
ここでいうリポジトリはGitHub上でプロジェクトのソースコードやドキュメント、開発履歴を管理・共有する場所のことを指し、パッケージはリポジトリで作成されたライブラリやバイナリなどの成果物を配布・インストールするための単位を指しています。
:::

早速ですが、Space ROSのGitHub Organization上に公開されているリポジトリは、下記の12個になります(2024/12/05時点)。

```:Space ROSのリポジトリ一覧
space-ros
 ├── space-ros
 ├── demos
 ├── simulation
 ├── docker
 ├── docs
 ├── process_sarif
 ├── spaceros.org
 ├── requirements
 ├── dashboard
 ├── ikos
 ├── check-commit-message-action
 └── github
```

こちらのリポジトリは、それぞれROS 2をベースにしたSpace ROS独自の機能を有しています。Space ROS独自の機能については、下記の記事で詳細にまとめていますので、こちらも合わせてご参照ください。

- [【概要#3】Space ROSとROS 2の違い](https://qiita.com/YukiIkeda_robot/items/227380feca2e8c7e886d)

また、Space ROSのリポジトリは、他のリポジトリのサブリポジトリのように運用されているものもあります。初めての方は、まず **docker** リポジトリ、**space-ros** リポジトリから触れてみるのがおすすめです。

# space-ros
space-rosリポジトリは、Space ROSプロジェクトの中心的なパッケージ(本体)です。ROS 2を宇宙機・宇宙ロボット向けにカスタマイズして提供しています。

space-ros内に存在する各ファイルや各ファイルやディレクトリは、ROS 2を宇宙機・宇宙ロボット向けに拡張するSpace ROSの開発、運用、管理を円滑に進めるために重要な役割を担っています。

```:space-rosのパッケージ構成
space-ros
 ├── docker
 ├── docs
 └── logos
```

# demos
demosリポジトリは、Space ROSプロジェクト内で提供されるデモンストレーション用のコードを集めたリポジトリです。ユーザはSpace ROSの使い方の理解と実装方法を学ぶことができます (いわゆるチュートリアル的なものです)。現在、Space ROS本体よりもデモの方が精力的に開発がされている印象です。

このリポジトリは、Space ROSをどのように使用するか、またその機能が実際にどのように動作するかを示すためのサンプルコードやデモが含まれています。

サンプルコードは、Space ROSの基本的な機能からより高度なシステムの動作まで、幅広いデモンストレーションが構成になっています。現時点でのデモは、火星探査ローバーのCuriosityや、ISSに搭載されたマニピュレータのCanadarmなどのシミュレータを用いた、ロボット操作、ナビゲーション、モーションプランニングや、C++ PMR メモリアロケータなどが用意されています。

:::note info
デモの実行はdockerリポジトリから行います。demoリポジトリは、dockerリポジトリのspace_robotsをビルドする際に用いられるものです。まずはデモを触ってみようという方は、dockerリポジトリをご参照ください。
:::

```:demosのパッケージ構成
demos
 ├── canadarm
 ├── canadarm_moveit_config
 ├── mars_rover
 └── space_ros_memory_allocation_demo
```

# simulation
simulationリポジトリは、Space ROSプロジェクト内で提供されているデモ用のモデルやツールが含まれているリポジトリです。

上記で説明したdemosパッケージを補足するような内容になっています。Git LFS (Large File Storage) を使って、大きな容量のファイルを参照するように管理しています。

具体的には、火星探査ローバーのCuriosityや、ISSに搭載されたマニピュレータのCanadarmなどのモデルが格納されています。

```:simulationのパッケージ構成
simulation
 ├── hooks
 └── models
```

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

- 【概要#5】Space ROSのMars Roverデモ (Coming Soon)

また、今後追加するであろうRACS2 (ROS and cFS System) のデモと、TurtleBot上でのデモもSpace ROS Advent Calendar 2024の記事にまとめる予定ですので、ぜひ楽しみにしていてください！

【ツール#3】RACS2デモ (Example、MarsRoverデモ) (Coming Soon)
【ツール#5】Space ROSを用いたTurtleBotのデモ (Coming Soon)

# docker
dockerリポジトリは、Space ROSプロジェクトにおける開発およびテスト環境を提供するためのリポジトリです。このリポジトリでは、Space ROSの各種デモ環境を実行するのに必要な環境を、Dockerコンテナを利用して簡単に構築できるようにしています。

Dockerコンテナを使うことで、ユーザーは自身のローカル環境に依存することなく、すぐにSpace ROSの開発環境をセットアップできるようになります。これにより、環境構築の手間が大幅に削減され、複数のユーザ間が同じ環境で作業できるようになります (Dockerって便利ですよね)。

```:dockerのパッケージ構成
docker
 ├── moveit2
 ├── nav2_demo
 ├── navigation2
 ├── renode_rcc
 ├── rtems
 ├── space_robots
 ├── spaceros
 └── zynq_rtems
```

Dockerコンテナを使った、火星探査ローバーのCuriosityのデモについて、明日公開予定のSpace ROS Advent Calendar 2024の記事で、詳しく説明していきますので、楽しみにしていてください！

- 【概要#5】Space ROSのMars Roverデモ (Coming Soon)

# docs
docsリポジトリには、[Space ROSドキュメント](https://space-ros.github.io/docs)のソースが格納されています。このドキュメントには、以下の項目が提供されています。

- Space ROSの使用方法
- インストール手順
- チュートリアルとサンプルコード
- 開発者向けのAPIリファレンス
- システム設計とアーキテクチャ

```:docsのパッケージ構成
docs
 ├── _static
 ├── docker
 └── source
```

# process_sarif
process_sarifリポジトリは、静的解析ツールの結果を取り扱うためのツールセットを提供しています。(静的解析ツールは、プログラムを実行せずにコードの構造や構文を解析して、エラーや脆弱性を検出するソフトウェアです)

具体的には、静的解析ツールの出力の標準規格として、SARIF (Static Analysis Results Interchange Format) データを処理・操作するためのツール群が含まれているリポジトリです。

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

```:process_sarifのパッケージ構成
process_sarif
 ├── docs
 ├── process_sarif
 ├── snap
 └── test
```

# spaceros.org
spaceros.orgリポジトリは、Space ROSプロジェクトの[公式ウェブサイト](https://space.ros.org/)を構築するためのソースコードが格納されているリポジトリです。

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

```:spaceros.orgのパッケージ構成
spaceros.org
 ├── plugins
 ├── site
 └── theme @ 10e6062
```

# requirements
requirementsリポジトリは、Space ROSのシステム要件を整理し、文書化するためのリポジトリです。

主に、宇宙システムで求められる機能や要件が定義されており、その中でETS (イベント＆テレメトリーサブシステム) に関連する要件が強調されています。このリポジトリは、要件の追跡や検証、そして規格準拠をサポートするため、の役割を担っています。

```:requirementsのパッケージ構成
requirements
 └── ets
```

# dashboard
dashboardリポジトリは、Visual Studio Codeのプラグインとして、静的解析ツールで出力されたSARIFファイルを読み込み、静的解析ツールで検出された問題を視覚化するためのリポジトリです。

```:dashboardのパッケージ構成
dashboard
 ├── demos
 ├── samples
 └── src
```

# ikos
ikosリポジトリは、Space ROSプロジェクトにおける静的解析ツールであるIKOSを取り扱うためのリポジトリです。

IKOSは抽象的解釈の理論に基づいたNASAの静的解析ツールで、Space ROSではこのIKOSを静的解析ツールの1つとして組み込んでいます。パッケージの中身としては、本家のIKOSリポジトリをフォークしたものとなっています。

```:ikosのパッケージ構成
ikos
 ├── analyzer
 ├── ar
 ├── cmake
 ├── core
 ├── doc
 ├── frontend
 ├── script
 └── test
```

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

【コア#4】 IKOS（基本編） (Coming Soon)
【コア#5】 IKOS（実践編） (Coming Soon)

# check-commit-message-action
check-commit-message-actionリポジトリは、GitHubでのコミットメッセージの一貫性をチェックするためのGitHub Actionsを提供するリポジトリです。

このツールは、プロジェクトにおけるコードのコミットメッセージが一定の規則に従っているかを自動的に確認します。

```:check-commit-message-actionのパッケージ構成
check-commit-message-action
```

# .github
.githubリポジトリは、Space ROSのGitHub OrganizationにおけるREADMEを管理するためのリポジトリです。

Space ROSのGitHub OrganizationのOverviewページに表示されているREADMEファイルが格納されています。

```:.githubのパッケージ構成
.github
 └── profile
```

# 最後に
ここまでで、ざっくりSpace ROSのパッケージ構成についてまとめてみました。これらのパッケージは、Space ROSで開発する機能の構想に基づいていますので、下記の記事も合わせてご参照ください (再掲)。

- [【概要#3】Space ROSとROS 2の違い](https://qiita.com/YukiIkeda_robot/items/227380feca2e8c7e886d)

より詳細にパッケージの中身を見ていくと、Space ROSのデモとして試せるものは色々出てきていることがわかります。NASAやJAXAなどの宇宙機関は、この実証機会に向けて開発を進めているので、今後のSpace ROSのアップデートにも期待です！これらの開発が進み、実際の宇宙でROSを動かせるようになれば、大盛況間違いなしですね！

また、宇宙機・宇宙ロボットの開発を加速させるためにも、地上ロボットの方々の宇宙ロボットの開発ハードルを下げるためにも、Space ROSを皆さんに触ってもらい、フィードバックを受けて開発を進めていくことが大切かと思います。

今後掲載予定のSpace ROS Advent Calendar 2024でこれらのデモについてもまとめていきますので、ぜひぜひ触ってみてください。ぜひ一緒にSpace ROSを盛り上げていきましょう！！

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