Space ROSの「Curiosity rover」デモの実行と拡張(障害物検出と回避)

Space ROSの「Curiosity rover」デモの実行と拡張(障害物検出と回避)

概要

本記事では、宇宙機・宇宙ロボットへの活用を想定した開発中のフレームワーク「Space ROS」の火星探査用ローバーのデモを拡張し、障害物検知機能と回避機能を追加してみます。

Space ROS とは?

Space ROS

ROS2から派生したオープンソースのフレームワークで、NASAとBlue Originの共同合意のもと始まったプロジェクトです。2021年から開発が続いており、3か月ごとに大きなアップデートが行われています。
すでに大規模なコミュニティが存在しているROS2を基盤とすることで、近年問題になっているソースコード難読化による開発コストの増大の抑制や、宇宙機・宇宙ロボット開発への参入障壁の低下などが期待されています。
また、いくつかのツールを統合することによって、宇宙用の機器に求められるような信頼性を担保することを目指しています。
Space ROSは現在も開発中のフレームワークですが、すでにユーザーが手元で動かせるデモがいくつか用意されています。 たとえば、ISS(国際宇宙ステーション)で部品の運搬や船外活動を行うクルーの支援に使われている「Canadarm2」や、 現在も火星の地表を走行し続けている探査ローバー「Curiosity」などがその一例です。 NASAが公開している3Dモデルを活用し、シミュレーション環境で動作するデモが整備されています。

本記事で行うこと

初めにSpace ROSのリポジトリで提供されている火星探査用ローバー「Curiosity」のシミュレーション上でのデモを実際に動かします。
その後、

  • 障害物を検知する機能
  • 障害物を回避する機能

を追加し、火星表面の3Dモデルに障害物を配置したワールドを実際に走らせてみたいと思います。

環境

今回の内容は以下の環境において動作確認を行っています。

ホスト環境

  • Ubuntu 24.04 LTS
  • Docker 28.3.3 build 980b856

Dockerのインストールはこちらが参考になります。

Install Docker Engine

デモを動かしてみる

本項では、Space ROSのリポジトリで提供されている”Curiosity”のデモを実際に動かしてみます。

docker container上のGazeboで動作するので、Ubuntu機で実行するユーザはGUI転送のための以下のコマンドをホストで実行しておく必要があります。

xhost +local:docker

まず、Space ROSのリポジトリから”Curiosity”のデモが含まれる部分をクローンします。

git clone https://github.com/space-ros/demos.git -b jazzy-2025.07.0
cd ./demos/curiosity_rover

デモは用意されたdocker container上で動かします。

./build.sh
./run.sh

以上を実行することで、containerが二つ立ちあがります。
一つはrover本体の機能に関連するNodeを起動しているcontainerで、もう一方はgazeboなどのGUI関連の機能を扱うためのcontainerです。
rover本体の機能を担当しているcontainerに入り、デモの機能の一つとして用意されている「直進する指令を送る」ros2 serviceをcallしてみます。

docker exec -it curiosity_rover-curiosity_demo-1 /bin/bash
ros2 service call /move_forward std_srvs/srv/Empty
Space ROS 参考ムービー1

▲ 画像をクリックすると動画が開きます。

roverがゆっくりと直進するのを確認できます。
その他にも、左に曲がるためのserviceや、カメラがついているmastを回転させるserviceなども用意されています。

構成

上記で実行したデモの、走行機能に関わる部分の構成は以下のようになっています。

デモの走行機能に関わる部分の構成

走行機能自体はデモとしてすでに実装されており、公式ドキュメントの手順に従った場合、”run_demo”というROS2 nodeに対してserviceをterminalなどからコマンドを用いて直接callすることで、roverが走行します。
今回は、このデモに対して「障害物検出」と「障害物回避」の機能をプラグインのような形で追加するROS2Nodeを作成します。構成はこのように変更されます。

変更後の構成

本機能追加により、走行の妨げとなる障害物が存在した場合には、ユーザーが手動でコマンドを送信せずとも自律的に避けてくれるようになります。

既存のデモで使用されているワールドは(実際の火星表面の3Dモデルではありますが)障害物がないため、新たにこちらのリポジトリのスクリプトを用いて、障害物が配置されたワールドを作成しました。

変更前

変更前イメージ

変更後

変更後イメージ

実行

上記の概念図に従って機能開発をし、実際に動かしてみました。

Space ROSの「Curiosity rover」デモの実行と拡張(障害物検出と回避)ー 参考ムービー2

▲ 画像をクリックすると動画が開きます。

良い感じに回避できています!

終わりに

本記事では、宇宙版ROS2ともいえるSpace ROSについて、簡単な説明&デモの実行と拡張を行ってみました。将来宇宙用のシステムやロボットのソフトウェア開発に採用される日が楽しみです。