MoriKen's Journal

MoriKen's Journal

アラサー社会人博士による徒然日記。技術についてつらつら。だけだとコンテンツが貧弱なので、会社公認で大学院博士課程に進学した経緯や、独学でTOEICを475→910にしたノウハウを共有します。最近アメリカ MBA(経営学)大学院もはじめました。

【ROS2】Windows 10+Ubuntu 18.04 in VMWare 上の Gazebo で Turtlebot3 を動かす!

Sponsored Link

こんにちは。ROS に触れたのは10年ぶりくらいかと思ったら、50日ぶり程度だった MoriKen です。

ROS に関心があるんですー、とおっしゃる方が増えてきたなぁと思う今日このごろ。

一方、大抵行き着くのが環境の話です。Windows で動きやしないか?と。動くみたいですけど、Ubuntuの方が安定しますよ^^ とお伝えすると、苦い顔をされてしまうことが多々ありまして。

そんなこんなで、初学者でもサクッと Windows で ROS を検証できる環境はないかなーと模索しております。

もちろん、頑張れば動くんですよね。素晴らしき先人がたくさんいらっしゃる。

gbiggs.github.io

demura.net

qiita.com

Windows ネイティブでやる方法って、Gazebo とか RViz の方どうなっているんだろう?という疑問があります。

WSL (Windows Subsystem for Linux) を利用して GUI だけは X サーバに飛ばすって構成もあるみたいで、こちらだと Gazebo でのデモを紹介しているブログがありまして。

私も先人にあやかりWindowsで!と思って色々試したのですが、出るわ出るわ、エラーのお祭り笑。 腰を据えて取り組むことができればもう少しお付き合いしたかったのですが、ちょっとそれどこじゃない (T_T;)笑。

また、ROS Kyushu ユーザグループにて、集団でハンズオン講習会をすることを狙っているので、あまり環境に依存せず、エラー処理があっても短時間で解決が見込まれる、できるだけ安定した環境が欲しいという背景がありました。

そこで、Windows で手早く ROS2 で遊べる環境として、実績のある VMWare を選定しました。 本エントリは、上記講習会の事前演習+当日のトラブルシューティング向けの情報を掲載することを意図してます。 最低限 Turtlebot3 のナビゲーションチュートリアルで遊ぶところまでの手順を、簡潔にまとめておきたいと思いますので、ご参考になれば幸いです。

環境

  • ホストOS: Windows 10
  • 仮想マシンツール: VMWare Workstation Player 15.5
  • ゲストOS: Ubuntu 18.04
  • ROS2 distribution: Dashing Diademata

仮想マシン環境の構築

VMWare のインストール

ホスト OS に VMWare Workstation Player をインストールします。下記サイトからインストーラをダウンロードして、実行して下さい。

www.vmware.com

本エントリ執筆時点では、15.5 が最新でした。Player は、非商用利用であれば無料です。

Ubuntu 18.04 イメージの作成

インストールが完了したら、VMware を利用して、ROS2 を動かす Ubuntu 18.04 の仮想マシンイメージを作成します。

Ubuntu のインストーラ(ISO)のダウンロードと、仮想マシンイメージの作成手順については、下記事をご参照下さい。

qiita.com

「VMware Player と Device/Credential Guard には互換性がありません。」というエラーが出たら

作成したイメージを起動しようとする際、新しい Windows 10 だと、このようなエラーが出る場合があります。

その場合は、下記事の手順に従って、諸々の設定を行ってから、イメージを起動し直して下さい。

www.wareko.jp

ROS 2 のセットアップ

ROS2 のインストール

ようやく ROS 2 です。仮想イメージ内で、ROS 2 をインストールして下さい。

手順は、下記事を参考にして下さい。

gbiggs.github.io

Talker & Listener の確認

基本的なサンプルコードの動作確認を行います。

こちらについても、ジェフさんの記事を参考にして下さい。

gbiggs.github.io

Turtlebot 3 のセットアップ

下記の本家サイトを参考にしてインストールするのが確実です。

emanual.robotis.com

英語は嫌!という場合に備え。ちょっとだけ翻訳+補足。

事前準備

# ビルドシステムのColconをインストール
$ sudo apt install python3-colcon-common-extensions
# SLAM パッケージである Cartographer の依存パッケージをインストール
$ sudo apt install -y \
 google-mock \
 libceres-dev \
 liblua5.3-dev \
 libboost-dev \
 libboost-iostreams-dev \
 libprotobuf-dev \
 protobuf-compiler \
 libcairo2-dev \
 libpcl-dev \
 python3-sphinx
# シミュレータ Gazebo9 のインストール
$ curl -sSL http://get.gazebosim.org | sh
$ sudo apt install ros-dashing-gazebo-*
# SLAM パッケージ Cartographer のインストール
$ sudo apt install ros-dashing-cartographer
$ sudo apt install ros-dashing-cartographer-ros
# ナビゲーションパッケージ Navigation2 のインストール
$ sudo apt install ros-dashing-navigation2
$ sudo apt install ros-dashing-nav2-bringup
# バージョン管理ツールのユーティリティ vcstool のインストール
$ sudo apt install python3-vcstool

もしバージョン管理ツール git をインストールしていないなら、ここで入れておきましょう。

$ sudo apt install git

Turtlebot 3 関連パッケージのインストール

# ワークスペースの作成
$ mkdir -p ~/turtlebot3_ws/src
$ cd ~/turtlebot3_ws
# 関連パッケージの取得
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos
$ vcs import src < turtlebot3.repos
# ビルド
$ colcon build --symlink-install

環境変数の設定

$ echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
$ echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
$ source ~/.bashrc

シミュレータのセットアップ

下記の公式ドキュメントを参考に、Gazebo によるシミュレーション環境を構築します。

emanual.robotis.com

環境変数の設定

下記の環境変数を設定して、Turtlebot3 のモデルを読み込めるようにします。

$ echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc
$ source ~/.bashrc

これは好みですが、毎度ロボットモデルを指定し直すのは面倒なので、ここでは比較的軽めと思われる Waffle のモデルを呼ぶように環境変数を自動で設定するようにします。

毎回起動するロボットを変えたい場合は、.bashrc には記述せず、都度ターミナルから入力して下さい。

$ echo 'export TURTLEBOT3_MODEL=waffle' >> ~/.bashrc
$ source ~/.bashrc

起動確認

empty world

なにもない空間に Waffle を登場させます。

$ ros2 launch turtlebot3_gazebo empty_world.launch.py

初回は、必要なファイルを Gazebo のサーバからダウンロードして取得するため、少し時間がかかる場合があります。画面が止まっても、根気強く辛抱して下さい。そのうち表示されます。

f:id:MoriKen254:20200209150558p:plain

Turtlebot3 world

少し特徴のある環境に Waffle を登場させます。

$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

f:id:MoriKen254:20200209150641p:plain

地図作成やナビゲーションをするなら、こういう環境のほうが良いです。

キーボードで操縦

シミュレータ上のロボットをキーボードで操縦(teleop: 通称 テレオペ、テレオプ)します。ターミナルを別途開き、下記コマンドを実行します。

$ ros2 run turtlebot3_teleop teleop_keyboard

コマンドは速度形式なので、あまり調子に乗って加速すると制御しにくくなります笑。

  • 前進: w
  • 後退: x
  • 左旋回: a
  • 右旋回: d
  • 停止: s

可視化ツール RViz の起動

便利な可視化ツール RViz が起動できるか確認します。また別ターミナルを開き、下記コマンドを実行します。

$ ros2 launch turtlebot3_bringup rviz2.launch.py

起動が確認できたら、RViz を閉じて下さい。

SLAM (地図作成) の検証

下記のコマンドで Cartgrapher を起動します。

$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

もし起動が不安定な場合は、Gazeboのシミュレーションを一時停止にしてから起動すると、上手く立ち上がる場合があります。数の赤枠内のボタンを押すことで、再生・一時停止を制御できます。

f:id:MoriKen254:20200209151401p:plain

RViz も同時に立ち上がりますので、正常起動を確認したら、シミュレータを再生状態に戻して下さい。

そして、先に起動した teleop のターミナルを開き、いろいろな方向に動かしながら、RViz上で地図が徐々に作成されている様をお楽しみ下さい。

f:id:MoriKen254:20200209151447p:plain

満足したら、下記コマンドで地図を保存します。

$ ros2 run nav2_map_server map_saver -f ~/map

地図を保存したら、一旦全てのプログラムを閉じておきましょう。きれいにしていたほうが、次のナビゲーションが安定しやすいです。

ナビゲーションの検証

シミュレータを立ち上げ直します。

$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

別ターミナルを立ち上げ、ナビゲーションプログラムを起動します。この時、先程保存した地図のファイルを読み込むように、引数で指定します。

$ ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml

もし、シミュレータ上でのロボットの位置、RViz上でのロボットの位置がずれていたら、画面右上の2D Pose Estimateを選択して、シミュレータ上のロボットと同じ位置になるように、地図上にマウスで指定して下さい。

f:id:MoriKen254:20200209152047p:plain

これからロボットを動かします。右上にあるNavigation2 Goalを選択し、移動させたいと思う位置と姿勢を、地図上にマウスで指定して下さい。

f:id:MoriKen254:20200209151818p:plain

あとは、自動的に経路が探索され、ロボットが障害物を回避しながら動き始めるはずです。

ここまでできたら、WindowsでROS2お試しナビゲーション祭りとしては成功です!(なんだそれ笑)

おわりに

Windows 上で、(初学者でもあまり手間をかけることなく)ROS2 を検証する方法を紹介しました。

VMWare というリッチな仮想環境を利用するので、動作は軽くはないですが、ユーザが複雑な設定をすることなく手軽に検証できるという点では、利点があると思います。

Windows でサクッとお試ししたい方のご参考になりましたら幸いです。