Dockerでお手軽にROS/ROS2を動かしてみた

スポンサーリンク

@karaage0703さんが紹介してくれていた「Docker上でGUIのROS1/ROS2を一瞬でセットアップする方法」を試したところ、とても便利でした。

Dockerでコンテナを起動して、ブラウザからアクセスするだけでROS/ROS2が使える。超お手軽。

ブラウザでアクセスできて便利なんだど、操作しにくい・・・と思ったら、5900ポートを開放するだけで、他のVNCクライアントが接続できた。
画面サイズが小さくて使いにくいな・・・と持ったら、環境変数を設定するだけで画面サイズが変わった。

サクッと試してみるには最高の環境。
Docker外のROSと接続できれば、更に最高なんだけど・・・諦めた。

使いやすいDockerイメージを公開してくれた@Tiryohさん、紹介してくれた@karaage0703さんに感謝。

f:id:sato_susumu:20201031000905p:plain

コンテナ起動(ROS Melodic)

初回の起動

$ docker run --name ros -p 6080:80 -p 5900:5900 -e RESOLUTION=1280x800 --shm-size=512m tiryoh/ros-desktop-vnc:melodic

コンテナ停止

$ docker stop ros

コンテナ停止後の起動

$ docker start ros

ブラウザで画面にアクセス

Webブラウザhttp://127.0.0.1:6080 にアクセスすれば、すぐ使える。

VNCクライアントとでアクセス

VNCクライアントで http://127.0.0.1:5900 にアクセスすれば、すぐ使える。
Real VNC Viewerで接続を確認。

コンテナのシェルに入る

$ docker exec -it ros bash

bashよりも/bin/bashの方が正確だけど、楽なのでbashで。

コンテナのシェルからGUI起動

コンテナのシェルに入ってから環境変数DISPLAYを設定すれば、VNCで表示中の画面に対してGUIを起動できる。

例: コンテナのシェルに入ってから、VNCの画面でrqt起動

$ docker exec -it ros bash
# export DISPLAY=:1
# rqt

コンテナ内にパッケージを追加するときの注意点

初回のみ apt update を実行しないとインストールに失敗する。

例:ネットワーク関連パッケージの追加。コンテナのシェルに入ってから実行。

$ apt update
$ apt install iputils-ping net-tools tcpdump traceroute

ROS 2 Dashingの場合の起動例

$ docker run --name ros -p 6080:80 -p 5900:5900 -e RESOLUTION=1280x800 --shm-size=512m tiryoh/ros2-desktop-vnc:dashing

メモ

docker-ubuntu-vnc-desktopの中では、仮想フレームバッファ Xvfb が使われている。
ブラウザだけでアクセスできるVNCの名称は noVNC。

リンク

Docker上でGUIのROS1/ROS2を一瞬でセットアップする方法
ROS/ROS2のGUIをWebブラウザ経由でお手軽に試せるDockerfileを公開しました
GitHub:docker_ros-desktop-vnc
GitHub:docker_ros2-desktop-vnc
GitHub:docker-ubuntu-vnc-desktop
docker_ros-desktop-vncのベースイメージ。docker runで渡すと便利な引数が記載されている。

Windows + Docker + VS Code でROS 開発

Docker + ROS(kinetic)でチュートリアル
ROS1の複数コンテナ間で通信が便利そう。まだ試してない。

ROS複数Docker通信
ROS1/ROS2混在のコンテナ間で通信したい場合は便利そう。まだ試してない。

Docker-docs-jaドキュメント(Docker for Mac)
Docker Official Images:ROS