Space ROSをUbuntu 22.04にネイティブインストールする方法

# Space ROSをUbuntu 22.04にネイティブインストールする方法

## はじめに

[Space ROS](https://github.com/space-ros/space-ros)は、NASAと米国商務省の国立標準技術研究所（NIST）が支援するプロジェクトで、オープンソースのロボティクスソフトウェアであるROS 2を宇宙用途に対応させるための取り組みです。

Space ROSはROS 2 Humbleをベースとしており、主にDockerコンテナでの使用が前提とされていますが、本記事ではDockerを使わずにネイティブなUbuntu 22.04環境にSpace ROSをインストールする方法を解説します。

※現在の最新のリポジトリではUbuntu24.04, ROS2 Jazzyをベースとしたものに更新されました。しかしデモ関係のパッケージがまだ更新されていないため、”安定版”としてきょうｙします。

## 前提条件

- Ubuntu 22.04 LTS（Jammy Jellyfish）

## 1. 基本環境のセットアップ

まず、必要なシステムパッケージをインストールします。

```bash
# システムのアップデート
sudo apt update
sudo apt upgrade -y

# 基本的な依存関係のインストール
sudo apt install -y curl gnupg lsb-release software-properties-common

# ロケールの設定
sudo apt install -y locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

# ROSリポジトリの追加
sudo add-apt-repository universe
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /tmp/ros.key
sudo mv /tmp/ros.key /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 開発ツールとROSツールのインストール
sudo apt update
sudo apt install -y \
  bison \
  build-essential \
  cmake \
  git \
  python3-colcon-common-extensions \
  python3-flake8 \
  python3-flake8-blind-except \
  python3-flake8-builtins \
  python3-flake8-class-newline \
  python3-flake8-comprehensions \
  python3-flake8-deprecated \
  python3-flake8-docstrings \
  python3-flake8-import-order \
  python3-flake8-quotes \
  python3-pip \
  python3-pytest \
  python3-pytest-cov \
  python3-pytest-repeat \
  python3-pytest-rerunfailures \
  python3-rosdep \
  python3-rosinstall-generator \
  python3-setuptools \
  python3-vcstool \
  wget \
  vim

# OpenGLのバージョン更新
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade -y
```

## 2. Space ROSディレクトリの設定

Space ROSのインストールディレクトリを設定します。公式Dockerイメージと同様の構成にするため、`/opt/spaceros`を使用します。

```bash
# 環境変数の設定
export SPACEROS_DIR=/opt/spaceros

# Space ROSディレクトリの作成
sudo mkdir -p ${SPACEROS_DIR}
sudo chown $USER:$USER ${SPACEROS_DIR}
sudo chmod 755 ${SPACEROS_DIR}
```

## 3. 公式リポジトリのクローンとスクリプトの準備

Space ROS公式リポジトリをクローンして、必要なスクリプトファイルを取得します。

```bash
# 一時ディレクトリを作成
mkdir -p ~/space-ros-temp
cd ~/space-ros-temp

# Space ROSリポジトリをクローン
git clone -b humble-2024.10.0 https://github.com/space-ros/space-ros.git
cd space-ros

# 必要なスクリプトをコピー
mkdir -p ${SPACEROS_DIR}/scripts
cp docker/scripts/generate-repos.sh ${SPACEROS_DIR}/scripts/
cp docker/scripts/merge-repos.py ${SPACEROS_DIR}/scripts/
chmod +x ${SPACEROS_DIR}/scripts/generate-repos.sh
chmod +x ${SPACEROS_DIR}/scripts/merge-repos.py

# 他の必要なファイルもコピー
cp excluded-pkgs.txt ${SPACEROS_DIR}/
cp spaceros-pkgs.txt ${SPACEROS_DIR}/
cp spaceros.repos ${SPACEROS_DIR}/
```

## 4. ros2.reposファイルの生成

ROS2パッケージと依存関係をダウンロードするためのreposファイルを生成します。

```bash
cd ${SPACEROS_DIR}
./scripts/generate-repos.sh \
  --outfile ros2.repos \
  --packages spaceros-pkgs.txt \
  --excluded-packages excluded-pkgs.txt \
  --exclude-installed false \
  --rosdistro humble

python3 scripts/merge-repos.py ros2.repos spaceros.repos -o output.repos
mv output.repos ros2.repos
```

## 5. ソースコードの取得とビルド

生成したreposファイルを使用して、ソースコードをダウンロードしビルドします。

```bash
cd ${SPACEROS_DIR}
mkdir -p src
vcs import --shallow --retry 3 --input ros2.repos src
vcs export --exact src > exact.repos

# rosdepを初期化して依存関係をインストール
sudo rosdep init || true  # すでに初期化されている場合は無視
rosdep update
rosdep install -y \
  --from-paths ${SPACEROS_DIR}/src --ignore-src \
  --rosdistro humble \
  --skip-keys "$(cat ${SPACEROS_DIR}/excluded-pkgs.txt | tr '\n' ' ') urdfdom_headers ikos"
```

### IKOSのインストール

Space ROSでは静的解析ツールとしてIKOSを使用しています。これをビルドしてインストールします。

```bash
# IKOSの依存関係をインストール
sudo apt update
sudo apt install -y \
  gcc \
  g++ \
  cmake \
  libgmp-dev \
  libboost-dev \
  libboost-filesystem-dev \
  libboost-thread-dev \
  libboost-test-dev \
  libsqlite3-dev \
  libtbb-dev \
  libz-dev \
  libedit-dev \
  python3 \
  python3-pip \
  python3-venv \
  llvm-14 \
  llvm-14-dev \
  llvm-14-tools \
  clang-14

# IKOSのソースをダウンロードしてビルド
cd ${SPACEROS_DIR}
git clone -b v3.2 --depth 1 https://github.com/NASA-SW-VnV/ikos.git
cd ikos
mkdir build
cd build
cmake \
  -DCMAKE_INSTALL_PREFIX="/opt/ikos" \
  -DCMAKE_BUILD_TYPE="Debug" \
  -DLLVM_CONFIG_EXECUTABLE="/usr/lib/llvm-14/bin/llvm-config" \
  ..
make
sudo make install
export PATH="/opt/ikos/bin/:$PATH"
cd ${SPACEROS_DIR}
sudo rm -rf ikos/
```

### Space ROSのビルド

最後に、Space ROSのソースコードをビルドします。

```bash
# Space ROSのビルド
cd ${SPACEROS_DIR}
colcon build \
  --cmake-args \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
  --no-warn-unused-cli

# exact.reposファイルをインストールディレクトリにコピー
cp exact.repos install/exact.repos
```

## 6. 環境設定の追加

Space ROS環境を使用するための設定をセットアップします。

```bash
# Space ROS環境設定スクリプトの作成
cat << EOF | sudo tee /etc/profile.d/spaceros.sh
#!/bin/bash
source ${SPACEROS_DIR}/install/setup.bash
export IKOS_SCAN_NOTIFIER_FILES="" # IKOSが.ikosbinファイルを生成するように設定
EOF

# スクリプトに実行権限を付与
sudo chmod +x /etc/profile.d/spaceros.sh

# ユーザーの.bashrcに環境設定を追加
echo "source /etc/profile.d/spaceros.sh" >> ${HOME}/.bashrc

rm -rf ~/space-ros-temp/
```

## 7. 検証

最後に、インストールが正常に完了したことを確認します。

```bash
# 新しいシェルで環境を読み込み
source ${SPACEROS_DIR}/install/setup.bash

# ROS2コマンドが使用可能かテスト
ros2 --help

# Space ROSバージョン情報の確認
cat ${SPACEROS_DIR}/install/exact.repos
```


## まとめ

以上の手順で、Space ROSをUbuntu 22.04にネイティブインストールすることができます。この方法は公式のDockerイメージの構築方法を参考にしており、同等の環境をローカルに構築します。

Space ROSは宇宙ミッション向けのロボティクスソフトウェアとして開発されていますが、高信頼性・高安全性が求められる地上のシステムにも応用できる技術です。ぜひSpace ROSを使って、ロボティクスの新たな可能性を探求してみてください。

## 参考リンク

- [Space ROS GitHub](https://github.com/space-ros/space-ros)
- [Space ROS ドキュメント](https://space.ros.org)
- [ROS 2 Humble ドキュメント](https://docs.ros.org/en/humble/index.html)
- [NASA JPL Open Source Rover](https://github.com/nasa-jpl/open-source-rover)