0⃣ Windows Docker Desktopを起動
1⃣ コンテナの作成準備
- Windows Power Shellを開き、Dockerコンテナを作成したいディレクトリに移動する。
- 新規のコンテナを、ホストPCが内臓しているGPUを付属した状態で起動する。GPUをつけないとコンテナ内でGUIアプリケーションを動かした際に負荷がかかってPCがフリーズする可能性が高まってしまう。
以下はubuntu20.04で起動した例である。
# 新しいコンテナの起動
PS C:\Users\hamchan\Ubuntu20.04> docker run --gpus all -it --name v2 ubuntu:20.04
root@a7e0b835c8bf:/# apt update
“root”の表示は、すでにUbuntu20.04のコンテナにスーパーユーザとしてログインしている状態を指す。
以降の手順はすべて、Dockerコンテナ内での作業となる。
2⃣ コンテナ内の環境設定
# 環境設定
root@83ec67676497:/# apt update
root@83ec67676497:/# apt install -y locales
root@83ec67676497:/# locale-gen ja_JP.UTF-8
root@83ec67676497:/# update-locale LANG=ja_JP.UTF-8
root@83ec67676497:/# export LANG=ja_JP.UTF-8
3⃣ ROSのインストール
ここではROS Noeticをインストールする手順を述べる。ROSのバージョンやディストリビューションに関わらず、インストール手順は基本どのROSでも同じである。
# ROSのインストール
root@83ec67676497:/# apt install -y curl gnupg lsb-release
root@a7e0b835c8bf:/# sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
root@83ec67676497:/# curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add -
root@a7e0b835c8bf:/# apt update
root@83ec67676497:/# apt install -y ros-noetic-desktop-full
# ROSの初期設定
root@83ec67676497:/# echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
root@83ec67676497:/# source ~/.bashrc
# 追加パッケージのインストール
root@83ec67676497:/# apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
#TurtleBot3のインストール
root@83ec67676497:/# apt install -y ros-noetic-turtlebot3
root@83ec67676497:/# apt install -y ros-noetic-turtlebot3-gazebo
root@83ec67676497:/# echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc
root@83ec67676497:/# source ~/.bashrc
rosのインストールには30分ほどかかる。
4⃣ GUIの環境設定
WindowsホストのXmingというアプリケーションを利用してDockerコンテナ内のGUIを動かせるようにするため、下記のコマンドを実行する。
GUIを起動するには、予めWindowsホスト側でXmingを起動しておく必要がある。
# Xサーバの設定
root@83ec67676497:/# apt install -y x11-apps
# DISPLAY環境変数の設定
# export DISPLAY=<ホストPCのIPアドレス>:0.0
root@83ec67676497:/# export DISPLAY=1xx.xx.xx.x:0.0
root@a7e0b835c8bf:/# echo "export DISPLAY=1xx.xx.xx.x:0.0" >> ~/.bashrc
root@a7e0b835c8bf:/# source ~/.bashrc
root@a7e0b835c8bf:/# apt update
DISPLAY環境変数におけるIPアドレスは、ホストPCのWSLのIPアドレスを使用する。
ここで使用しているWindowsホストPCのIPアドレスは1xx.xx.xx.xである(各自のIPアドレスに置き換える)。WSLアドレスはホストマシンの起動のたびに変わる可能性があるので、ipconfigコマンドなどで逐一確認する必要がある。
以下のイーサネット アダプター vEthernet(WSL)項目のIPアドレスを使用する。ホストPCのIPアドレスではない。
上記と全く同じ設定をしているのにも関わらずGUIが起動しない場合は、WindowsホストPCのファイアウォール設定でXming X Serverのアクセスが許可されていない可能性がある。
コントロールパネルを開き、システムとセキュリティ > Windows Defender ファイアウォール > 許可されたアプリ > 設定の変更 の順にクリックして以下のような画面が表示されたら、リストから”Xming X Server”を探し、”プライベート”と”パブリック”の両方にチェックを入れる。
5⃣ ROSの動作確認
同じコンテナに接続したターミナルを3つ用意する。
1.一つ目のターミナルで
root@83ec67676497:/# roscore
2. 二つ目のターミナルで
# コンテナの起動
PS C:\Users\hamchan\Ubuntu20.04> docker exec -it a7e0b835c8bf /bin/bash
# Gazeboの起動
root@83ec67676497:/# roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
GUIが正しく作動していれば、下図のようなGazeboアプリケーションが起動する。
3.三つ目のターミナルで
# コンテナの起動
PS C:\Users\hamchan\Ubuntu20.04> docker exec -it a7e0b835c8bf /bin/bash
# teleopノードの起動
root@83ec67676497:/# roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
TurtleBot3モデルの移動制御ができる。
4.操作手順
三つ目のターミナル(teleopコマンドを実行したターミナル)の画面をアクティブにした状態で該当キーボードを押すと、Gazebo画面上のモデルを動かすことができる。
使用キーはw,a,s,d,x,spaceである。
動画のようにGazebo上のモデルをキーボード操作できれば、rosは正しく動作しているといえる。