【ROS】RMF Demoをコンテナ環境で動作させる

ROS

この記事の内容

RMF(Robot Middleware Framework)のdemoをDockerを使って起動させる方法を解説します。

前提

  • Ubuntu 22.04.2 LTS
  • Dockerインストール済み

手順

まずは、以下に記載の通りにDockerイメージを取得してタグ付けします。

GitHub - open-rmf/rmf: Root repository for the RMF software
Root repository for the RMF software. Contribute to open-rmf/rmf development by creating an account on GitHub.
docker pull ghcr.io/open-rmf/rmf/rmf_demos:latest
docker tag ghcr.io/open-rmf/rmf/rmf_demos:latest rmf:latest

以下のコマンドで起動します。

docker run -it --network host rmf:latest bash -c "export ROS_DOMAIN_ID=9; ros2 launch rmf_demos_gz office.launch.xml headless:=1"

headlessモード(GUIなしで)起動しているため、確認やタスク投入はrmf-panelという簡易なWebページで行います。以下から開きます。

RMF Panel

こんな感じで表示されるかと思います。Robots > REFRESHのボタンを押すとロボットの一覧が表示されます。

このままタスクを投入しても良いですが、headlessなのでどう動いているのかいまいちわかりません。そこで、GazeboやRVizを表示したいという人向けに、rockerを使う方法を記載していきます。rockerの使用手順はここでは省きますが、rockerを使うことで簡単にx11でホストとコンテナ内をつなぎ、GazeboやRVizの表示をすることができます。以下のコマンドで、コンテナを起動します。(NVIDIAのGPUを使う場合の設定になっていますので環境に合わせて指定してください。)

rocker --nvidia --x11 --user --network host --privileged --nocleanup --name rmf_demos rmf:latest

コンテナ内にシェルでアタッチします。VS Codeであれば、対象コンテナを指定してAttach Shell。

このまま起動すると、simple_api_serverのログ出力でエラーになるので、以下を実施。

sudo touch web_server.log
sudo chmod 666 web_server.log

パスを通して起動します。するとRVizとGazeboが起動するかと思います。
modelのダウンロードなどで表示されるまで少し時間がかかります。

source /ros_entrypoint.sh
ros2 launch rmf_demos_gz office.launch.xml headless:=0

この状態でrmf-panelよりタスクを投入すると動きます。

コメント