🎉

はじめてのROS2:環境構築

に公開

はじめに

データソリューション事業部の武道です。

今年の9月からラボチームの取り組みの一環でロボティクスの勉強を始めました。
(ラボチームについてはこちらをご覧ください!→ラボチームを紹介します!
その中でロボット用のミドルウェアであるROS2について学んでいるので、アプトプットとして記事を執筆しました。
今回はROS2の概要を説明し、WSLgを活用したDockerコンテナによる環境構築を行います。
※今後もROS2関連の記事を増やしていきたいと思います。

本記事はDAL Tech Blog Advent Calendar 2025として投稿しました。全ての記事は以下からご確認いただけます。

https://adventar.org/calendars/12288

ROS2とは

ROS2とは、Robot Operating System2の略で、ロボットアプリケーションの構築を支援するソフトウェアライブラリとツールの集まり、とされています。
ロボットには画像認識、音声認識、ナビゲーションとプランニングといった多種多様な機能がありますが、ROS2ではこれらの機能ごとにソフトウェアが分割(モジュール化)されており、ソフトウェア(ROSではノードと呼ぶ)間で通信によりデータをやりとりしながらロボットを動かすことができます。
このように機能ごとに分割することで、効率的で拡張性の高いロボット開発が可能になります。

なお「2」について当初開発されていたROSには、

  • リアルタイム制御に対応していない
  • 安全性や信頼性の問題
  • Windowsに対応していない

などの問題を解決するために、ROS2が開発されたという経緯があります。


ディストリビューション

ROSには「ディストリビューション」と呼ばれるリリースがあり、それぞれ特定のUbuntuのバージョンに対応しています。そのため、ROSを使う際には、使用しているUbuntuのバージョンに対応したディストリビューションを選ぶ必要があります。
2025年11月時点でサポートされているディストリビューションには以下のものがありました。

ここでは直近にリリースされており、かつサポート期間が最も長いROS 2 Jazzy Jaliscoを選ぶことにします。

DockerとWSLgによるROS2環境構築

ROS2を学ぶにあたって最初につまずくのが環境構築とされており、初学者の私も例に漏れず非常に苦戦しました。
そこでなるべく環境構築に手間をかけないようにするという方針のもと、ROS公式が配布しているROS2のDockerコンテナを利用しました。
またGUIについてもWSLg(Windows Subsystem for Linux GUI)と呼ばれる、WSLでLinuxのGUIアプリケーションをWindows上で直接実行できるようにする機能を使って、GUIアプリケーションをWindows上で表示させるようにしました。Dockerコマンドの引数に指定するだけで使えるので非常に簡単にGUI設定ができます。

また本来であればDockerfileとdocker-compose.yamlを使って構築するのが一般的ですが、勉強の意味も込めて1つずつコマンドを実行する方式で行います。

Dockerコンテナの作成

Dockerコンテナ内のGUIアプリケーションをWSLgを利用して表示するには、以下のディレクトリをマウントして、環境変数を設定する必要があります。

サーバ マウント 環境変数
X11 /tmp/.X11-unix DISPLAY
Wayland /mnt/wslg WAYLAND_DISPLAY && XDG_RUNTIME_DIR

それを踏まえ以下のDockerコマンドを実行してコンテナを作成・起動します。
なお -v {任意のWindowsのフォルダパス}:/mnt/host についてはホストとコンテナ間でファイルを共有するためのマウントですので、必要に応じて設定してください。

docker run --name ros2 \
  --net=host \
  --ipc=host \
  -e DISPLAY=${DISPLAY} \
  -e WAYLAND_DISPLAY=${WAYLAND_DISPLAY} \
  -e XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} \
  -v /mnt/wslg:/mnt/wslg \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v {任意のWindowsのフォルダパス}:/mnt/host \
  -it ros:jazzy-perception

ros2コマンドを有効化する

ROS2はros2コマンドと呼ばれるCUIアプリを使います。
コンテナが起動できたらコンテナ内に入り、以下のコマンドを実行し、ros2コマンドを有効化します。

# 設定ファイルの実行
source /opt/ros/jazzy/setup.bash

これでros2コマンドが使えるようになりますが、このままだとコンテナに入るたびに上記コマンドを毎回実行する必要があるため、ROS2を自動的に有効化するための環境設定を下記コマンドにて行います。

# ホームディレクトリの .bashrc に source /opt/ros/jazzy/setup.bash を追記
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
# .bashrc を反映
source ~/.bashrc

それではros2コマンドが使えるようになったか以下のコマンドを実行してみます。
このコマンドはROS2環境が認識している全パッケージを表示するコマンドです。

ros2 pkg list

実行すると以下のようになり、ros2コマンドが動作していることが確認できました。

パッケージやツールをインストールする

パッケージやツールのインストールはUbuntu同様aptコマンドでインストール可能です。
ここでは3DシミュレータのGazeboをインストールしてみます。

sudo apt update
sudo apt-get install -y ros-jazzy-ros-gz

試しに以下のコマンドを実行するとGazeboのGUIが立ち上がります。
※空のシミュレーション環境が起動します。

ros2 launch ros_gz_sim gz_sim.launch.py gz_args:='-r empty.sdf'

このようにGUIが表示されれば環境構築完了です。

おわりに

今回ははじめてのROS2ということで概要の解説と環境構築を行いました。
これでようやくスタートラインに立てたので、これから本格的にROS2の機能を試したり、実際にロボットを使ってロボットアプリケーション開発を行ったりしたいと思います。

参考にしたサイト・文献

DAL Tech Blog

Discussion