こんにちは。ROS に触れたのは10年ぶりくらいかと思ったら、50日ぶり程度だった MoriKen です。
ROS に関心があるんですー、とおっしゃる方が増えてきたなぁと思う今日このごろ。
一方、大抵行き着くのが環境の話です。Windows で動きやしないか?と。動くみたいですけど、Ubuntuの方が安定しますよ^^ とお伝えすると、苦い顔をされてしまうことが多々ありまして。
そんなこんなで、初学者でもサクッと Windows で ROS を検証できる環境はないかなーと模索しております。
もちろん、頑張れば動くんですよね。素晴らしき先人がたくさんいらっしゃる。
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 をインストールします。下記サイトからインストーラをダウンロードして、実行して下さい。
本エントリ執筆時点では、15.5 が最新でした。Player は、非商用利用であれば無料です。
Ubuntu 18.04 イメージの作成
インストールが完了したら、VMware を利用して、ROS2 を動かす Ubuntu 18.04 の仮想マシンイメージを作成します。
Ubuntu のインストーラ(ISO)のダウンロードと、仮想マシンイメージの作成手順については、下記事をご参照下さい。
「VMware Player と Device/Credential Guard には互換性がありません。」というエラーが出たら
作成したイメージを起動しようとする際、新しい Windows 10 だと、このようなエラーが出る場合があります。
その場合は、下記事の手順に従って、諸々の設定を行ってから、イメージを起動し直して下さい。
ROS 2 のセットアップ
ROS2 のインストール
ようやく ROS 2 です。仮想イメージ内で、ROS 2 をインストールして下さい。
手順は、下記事を参考にして下さい。
Talker & Listener の確認
基本的なサンプルコードの動作確認を行います。
こちらについても、ジェフさんの記事を参考にして下さい。
Turtlebot 3 のセットアップ
下記の本家サイトを参考にしてインストールするのが確実です。
英語は嫌!という場合に備え。ちょっとだけ翻訳+補足。
事前準備
# ビルドシステムの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 によるシミュレーション環境を構築します。
環境変数の設定
下記の環境変数を設定して、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 のサーバからダウンロードして取得するため、少し時間がかかる場合があります。画面が止まっても、根気強く辛抱して下さい。そのうち表示されます。
Turtlebot3 world
少し特徴のある環境に Waffle を登場させます。
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
地図作成やナビゲーションをするなら、こういう環境のほうが良いです。
キーボードで操縦
シミュレータ上のロボットをキーボードで操縦(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のシミュレーションを一時停止にしてから起動すると、上手く立ち上がる場合があります。数の赤枠内のボタンを押すことで、再生・一時停止を制御できます。
RViz も同時に立ち上がりますので、正常起動を確認したら、シミュレータを再生状態に戻して下さい。
そして、先に起動した teleop のターミナルを開き、いろいろな方向に動かしながら、RViz上で地図が徐々に作成されている様をお楽しみ下さい。
満足したら、下記コマンドで地図を保存します。
$ 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
を選択して、シミュレータ上のロボットと同じ位置になるように、地図上にマウスで指定して下さい。
これからロボットを動かします。右上にあるNavigation2 Goal
を選択し、移動させたいと思う位置と姿勢を、地図上にマウスで指定して下さい。
あとは、自動的に経路が探索され、ロボットが障害物を回避しながら動き始めるはずです。
ここまでできたら、WindowsでROS2お試しナビゲーション祭りとしては成功です!(なんだそれ笑)
おわりに
Windows 上で、(初学者でもあまり手間をかけることなく)ROS2 を検証する方法を紹介しました。
VMWare というリッチな仮想環境を利用するので、動作は軽くはないですが、ユーザが複雑な設定をすることなく手軽に検証できるという点では、利点があると思います。
Windows でサクッとお試ししたい方のご参考になりましたら幸いです。