Gazeboシミュレータを使い、ルンバ(Roomba)を動かします。本記事ではカナダのSimon Fraser University, Autonomy Lab.のJacob PerronさんのフォークしたiRobot社のRoomba, Create2用のROSドライバー create_autonomyを使います。gazebo用のlaunchファイルもあり、Raspberry Pi4(RPi4)でも動きます。ただし、RPi4ではソースコードを少し改変する必要があります。
なお、Simon Fraser University, Autonomy Labのgithubは、Create2やRoomba用のROS2ドライバ、Dockerファイルまであります。まさに、Create2やRoombaを使う人々にとっての神サイトです。
注意
-
- 2021年3月7日現在でcreate_autonomyはROS Noeticには対応していません。この記事の方法ではビルドできません。なお、ROSとUbunutのバージョンは依存関係があるため対応づけることが推奨されています。Ubuntu20.04の場合はROS Noeticを使うことが推奨されています。
- create_autonomyパッケージは開発が継続されており、2021年3月26日にgit cloneして試したところ開発版ではビルドエラーになりました。HARD2021スプリングワークショップでは、次のバージョンを使用します。
- commit a522e080f267253fa2cba237ad32df5132c9aeb5
- Author: Emiliano Borghi
- Date: Mon Jan 25 10:08:27 2021 -0300
- 参考の神サイト
- 環境
- Roomba 500~800シリーズ(900, e, iシリーズなどの最近の機種は対応していません)
- 試したのはIntel Core i7 -8750とRaspberry Pi4 (RAM 8GB)
- Ubuntu18.04
- ROS Melodic
- 準備
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y python-rosdep python-catkin-tools libqt4-dev
- インストール
- ワークスペースの生成
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin build
- ダウンロード
- ディレクトリの移動
- $
cd ~/catkin_ws/src
- $
- libcreateのクローン(ダウンロード)
$ git clone https://github.com/RoboticaUtnFrba/libcreate.git
- libcreateのバージョン(tag)を指定
$ cd ~/catkin_ws/src/libcreate
$ git checkout 2.1.0
- create_autonomyのクローン
$ git clone https://github.com/RoboticaUtnFrba/create_autonomy.git
- create_autonomyのバージョン(commit番号)を指定
$ cd ~/catkin_ws/src/create_autonomy
$ git checkout a522e080f267253fa2cba237ad32df5132c9aeb5
- なお、create_autonomyでcommit番号を指定しているのは、ワークショップ開催日2021年3月7日に一番近いからです。tagバージョン番号2.0.0ではビルドに失敗し、ワークショップのサンプルプログラムは動きませんでした。
- ディレクトリの移動
- 依存関係ファイルのインストール
- RTIMULib (IMU用のリアルタイムライブラリ)のインストール
$ cd ~/catkin_ws
$ ./src/create_autonomy/sensors/ca_imu/scripts/install_rtimulib.sh
- 他のファイルのインストール
$ cd ~/catkin_ws
$ sudo apt install -y python3-vcstool
$ vcs import src < src/create_autonomy/dependencies.repos
$ rosdep update
$ rosdep install --from-paths src -yi
- RTIMULib (IMU用のリアルタイムライブラリ)のインストール
- Raspberry Pi4のみの作業:Intel CPUの場合は必要ないので次のワークスペースのビルドへ進む。Raspberry Pi4というかARMのCPUでは、viso2(Visual Odometryライブラリ)関連のソースコードをそのままビルドできないので次のように改変するか~/catkin_ws/src/viso2以下のディレクトリを削除する。
-
- ~/catkin_ws/src/viso2/libviso2/CMakeLists.txtの7行目を次のように変更する。
- 変更前:
SET(CMAKE_CXX_FLAGS -mfpu=neon)
- 変更後:
SET(CMAKE_CXX_FLAGS -march=armv8-a+simd)
- 変更前:
- ~/catkin_ws/src/viso2/libviso2/src/filter.hの25行目とmatcher.hの30行目に#if defined(__ARM_NEON__)がある。その1行上に以下の行を挿入する。
#define __ARM_NEON__
- ~/catkin_ws/src/viso2/libviso2/CMakeLists.txtの7行目を次のように変更する。
-
- ワークスペースのビルド
$ cd ~/catkin_ws
- Intel CPUの場合。私の環境では約3分でビルドが終了した。
$ catkin build -DCMAKE_BUILD_TYPE=Release
- Raspberry Pi4の場合。私の環境では約17分かかった。
$ catkin build -DCMAKE_BUILD_TYPE=Release -DARM_CROSS_COMPILATION=ON
- ワークスペースの生成
- 設定
- このワークショップに使う以下の設定を以下のコマンドにより、エディタgeditで.bashrcファイルを開き、末尾にコピペして保存する。
- $ gedit ~/.bashrc
- このワークショップに使う以下の設定を以下のコマンドにより、エディタgeditで.bashrcファイルを開き、末尾にコピペして保存する。
export GAZEBO_IP=127.0.0.1 export LASER=rplidar export NUM_ROBOTS=1 export RVIZ=true source /opt/ros/melodic/setup.bash source ~/catkin_ws/devel/setup.bash
- 以下のコマンドを実行して設定を反映させる。
$ source ~/.bashrc
- 実行
- 新たに端末を開き、以下のコマンドを実行してシミュレータGazeboを起動する。一番下図のルンバをベースにしたロボットが現れる。エラーが出てGazeboが起動しなかったり、画面が真っ暗な場合は一番したのエラー処理を参照する。
$ roslaunch ca_gazebo create_empty_world.launch
- 端末をもう一つ新たに開き、以下のコマンドを実行してGazebo上のルンバを遠隔制御する。
- 新たに端末を開き、以下のコマンドを実行してシミュレータGazeboを起動する。一番下図のルンバをベースにしたロボットが現れる。エラーが出てGazeboが起動しなかったり、画面が真っ暗な場合は一番したのエラー処理を参照する。
-
- 無事に動いたら成功。お疲れ様!
- エラー処理
- rvizを起動するとsegmentation faultというエラーが出て起動しません。
- ~/.bashrcに以下の1行を追加してください。
export GAZEBO_IP=127.0.0.1
- ~/.bashrcに以下の1行を追加してください。
- Gazeboを起動するとsegmentation faultというエラーが出て起動しません。
- ~/.bashrcに以下の1行を追加してください。
export LIBGL_ALWAYS_INDIRECT=""
- ~/.bashrcに以下の1行を追加してください。
- Gazeboを起動すると以下のエラーで画面が真っ暗らなままです。
[Err] [REST.cc:205] Error in REST request
libcurl: (51) SSL: no alternative certificate subject name matches target host name ‘api.ignitionfuel.org’- ~/.ignition/fuel/config.yamlを次のように変更してください。
- 変更前:
url: https://api.ignitionfuel.org
- 変更後:
url: https://api.ignitionrobotics.org
- 変更前:
- ~/.ignition/fuel/config.yamlを次のように変更してください。
- rvizを起動するとsegmentation faultというエラーが出て起動しません。
終わり
コメント