ROS GUI on macOS

macOSでROSのturtlesimやrqtを実行できるDockerイメージを紹介します1
Dockerイメージはここで公開しています.
noeticはubuntu:20.04,melodicはubuntu:18.04のDockerイメージから作成しています.

環境構築

HomebrewやDockerが既にインストールされている環境を想定しています.

1. Socatのインストール

Homebrewを使ってインストールします.

brew install socat

2. XQuartzのインストール

こちらもHomebrewを使ってインストールします2

brew cask install xquartz

3. XQuartzの設定変更

XQuartzを以下のコマンドで起動した後に,環境設定を開いて「セキュリティ」タブの「ネットワーク・クライアントからの接続を許可」にチェックを入れてください3

open -a XQuartz

使い方

ターミナルを複数開いてturtlesimを実行します.

1つ目のターミナル

XQuartzでturtlesimが表示されるように準備します.

1. ホストのIPアドレスを確認

ifconfig en0 | grep inet | awk '$1=="inet" {print $2}'

2. XQuartzが接続を受け入れるコンピュータのリストにホスト名を追加する

xhost +xxx.xxx.x.x

3. Socatでポートを起動4

socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"

2つ目のターミナル

Dockerイメージからコンテナを作成して,roscoreによってROSマスターとパラメータサーバーを起動します.

XQuartzを起動

open -a XQuartz

Dockerコンテナを作成

docker run -it -e DISPLAY="xxx.xxx.x.x:0" nha6ki/ros-gui:noetic

roscoreを実行

root@xxxxxxx:/# roscore

3つ目のターミナル

作成したDockerコンテナに入り,turtlesimを起動します.

Dockerコンテナに入る

docker ps
docker exec -it xxxxxxxx bash

turtlesimを起動

root@xxxxxxx:/# rosrun turtlesim turtlesim_node

4つ目のターミナル

turtlesimの亀を動かすROSノードを起動します.

turtle_teleop_keyを起動

docker exec -it xxxxxxxx bash
root@xxxxxxx:/# rosrun turtlesim turtle_teleop_key

5つ目のターミナル

rqt_graphを使って,ノードとトピックの接続状態を可視化します.

rqt_graphを起動

docker exec -it xxxxxxxx bash
root@xxxxxxx:/# rosrun rqt_graph rqt_graph

最後に

最終的にこうなります.

f:id:nha6ki:20201029170801p:plain


  1. rvizやGazeboは実行できません.

  2. エラーが出るときは,以下のコマンドを実行してください.
    brew update-reset && brew update

  3. 「入力」タブの「3 ボタンマウスをエミュレート」にチェックを入れると,Option + クリック でペーストできるようになります.

  4. “Address already in use"と出力されたときは,プロセスを終了させてから実行してください.
    lsof -n -i | grep 6000
    kill -9 xxxx