概要
Space ROSをDockerイメージとしてビルドしないで、ネイティブ環境にインストールした。
(I installed Space ROS in a native environment, rather than building it as a Docker image.)
Space ROSは公式でDockerイメージの使用を推奨している。これは確かSpace ROS自体の設計思想にかかわるお勧めだったように思う(要確認)。
公式ドキュメントでは、ソースからビルドしてネイティブにインストールをする手順の紹介はまだTODOとなっている。
今回はWSL2上に環境を構築したかったので、公式リポジトリのDockerfileを参考にSpace ROSのインストールを実施した。その手順を以下にメモする。
※デモプログラムがまだこのバージョンに対応していないことが分かったため、”安定版”の方を以下の記事にまとめました
環境とインストール方針
- Ubuntu 24.04
- ROS2 Jazzy
(Space ROSは2025/2/1のコミットから、Ubuntu24.04ベースになった) - Dockerイメージと同じように/opt/spacerosに本体を置く
インストール方法
Step 1: リポジトリのクローン
# Space ROSのリポジトリをクローン
mkdir -p ~/space-ros-build
cd ~/space-ros-build
git clone https://github.com/space-ros/space-ros.git
cd space-ros
Step 2: 基本的な依存関係のインストール
# システムをアップデート
sudo apt update
sudo apt upgrade -y
# ロケール関連パッケージのインストール
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 2のaptリポジトリを追加
sudo apt install -y curl gnupg lsb-release software-properties-common
sudo add-apt-repository universe
# GPG鍵を再取得する(オプション:実施時点ではエラーが出たため)
sudo rm -f /usr/share/keyrings/ros-archive-keyring.gpg
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo gpg --dearmor -o /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の更新(オプションだが、Earthfileに含まれているため)
sudo add-apt-repository ppa:kisak/kisak-mesa
sudo apt update
sudo apt upgrade -y
# rosinstall_generatorのインストール
sudo apt install python3-rosinstall-generator
Step 3: Space ROS用ディレクトリの作成
# Space ROSをインストールするディレクトリを作成(Dockerイメージと同じ場所)
sudo mkdir -p /opt/spaceros
sudo chown $USER:$USER /opt/spaceros
cd /opt/spaceros
Step 4: リポジトリファイルの生成とマージ
# リポジトリ内の既存ファイルを使用
cd /opt/spaceros
cp ~/space-ros-build/space-ros/excluded-pkgs.txt .
cp ~/space-ros-build/space-ros/spaceros-pkgs.txt .
cp ~/space-ros-build/space-ros/spaceros.repos .
cp ~/space-ros-build/space-ros/docker/scripts/merge-repos.py .
chmod +x merge-repos.py
# ROS 2リポジトリファイルを生成
ROS_DISTRO="jazzy"
rosinstall_generator --format repos --rosdistro ${ROS_DISTRO} --deps --upstream \
--exclude $(cat excluded-pkgs.txt) \
-- $(cat spaceros-pkgs.txt) > ros2.repos
# Space ROSのリポジトリとROS 2のリポジトリをマージ
python3 merge-repos.py ros2.repos spaceros.repos -o output.repos
Step 5: リポジトリのクローン
# すべてのリポジトリをクローン
mkdir -p src
vcs import --shallow --retry 3 --input output.repos src
# 再現性のために正確なバージョンをエクスポート(オプション)
vcs export --exact src > exact.repos
Step 6: rosdepを使用して依存関係をインストール
# rosdepが初期化されていない場合は初期化
sudo rosdep init
rosdep update
# 依存関係を確認するだけ(インストールしないので、rosdep-commands.shを作成するように変更。-sオプション消せばそのまま行ける?)
rosdep install -s -y \
--from-paths src --ignore-src \
--rosdistro ${ROS_DISTRO} \
--skip-keys "$(cat excluded-pkgs.txt) urdfdom_headers ikos" --simulate > rosdep-commands.txt
# 実際にインストールするコマンドを作成
echo '#!/bin/bash' > rosdep-commands.sh
grep "apt-get install" rosdep-commands.txt | sed 's/^/sudo -H /' >> rosdep-commands.sh
# ファイルに実行権限を付与
chmod u+x rosdep-commands.sh
# 依存関係をインストール
./rosdep-commands.sh
Step 7: IKOS(Space ROSで使用される静的解析ツール)のインストール
# 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 ~
git clone --branch v3.4 --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 -j$(nproc)
sudo make install
export PATH="/opt/ikos/bin/:$PATH"
echo 'export PATH="/opt/ikos/bin/:$PATH"' >> ~/.bashrc
cd /opt/spaceros
Step 8: Space ROSのビルド
# colconでビルド
cd /opt/spaceros
colcon build \
--cmake-args \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
--no-warn-unused-cli
Step 9: 環境のセットアップ
# セットアップスクリプトを読み込む
source /opt/spaceros/install/setup.bash
# ターミナル起動時に自動的に読み込むために ~/.bashrc に追加
echo 'source /opt/spaceros/install/setup.bash' >> ~/.bashrc
echo 'export IKOS_SCAN_NOTIFIER_FILES=""' >> ~/.bashrc # IKOSがコンパイルされたパッケージ用に.ikosbinファイルを作成するようにする
追加情報
-
デバッグシンボル付きの開発用ビルドの場合は、以下を使用すること:
colcon build \ --cmake-args \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ --no-warn-unused-cli
-
テストを実行したい場合:
source install/setup.sh colcon test \ --retest-until-pass 2 \ --packages-skip ament_lint \ --ctest-args -LE "(ikos|xfail)" \ --pytest-args -m "not xfail"
-
ビルド中に警告が表示されることがあるが、ほとんどは無視して問題ない。特に以下のような警告は、除外されたDDS実装に関連する正常な警告である:
rmw implementation 'rmw_fastrtps_cpp' not available for test 'test_generic_pub_sub'
-
ビルドが成功したことを確認するには:
$ source /opt/spaceros/install/setup.bash $ ros2 --help usage: ros2 [-h] [--use-python-default-buffering] Call `ros2 <command> -h` for more detailed usage. ... ros2 is an extensible command-line tool for ROS 2. options: -h, --help show this help message and exit --use-python-default-buffering Do not force line buffering in stdout and instead use the python default buffering, which might be affected by PYTHONUNBUFFERED/-u and depends on whatever stdout is interactive or not Commands: action Various action related sub-commands component Various component related sub-commands daemon Various daemon related sub-commands doctor Check ROS setup and other potential issues interface Show information about ROS interfaces launch Run a launch file lifecycle Various lifecycle related sub-commands multicast Various multicast related sub-commands node Various node related sub-commands param Various param related sub-commands pkg Various package related sub-commands run Run a package specific executable service Various service related sub-commands test Run a ROS2 launch test topic Various topic related sub-commands trace Trace ROS 2 nodes to get information on their execution. The main 'trace' command requires user interaction; to trace non-interactively, use the 'start'/'stop'/'pause'/'resume' sub-commands wtf Use `wtf` as alias to `doctor` Call `ros2 <command> -h` for more detailed usage.