Gazeboシミュレータを使い、Roombaを動かします。本記事ではカナダのSimon Fraser University, Autonomy Lab.のJacob PerronさんのフォークしたiRobot社のRoomba, Create2用のROSドライバー create_autonomyを使います。gazebo用のlaunchファイルもあり、Raspberry Pi4でも動きます。ただし、ソースコードを少し改変する必要があります。
- 参考サイト
- 環境
- Roomba 500~800シリーズ(900, e, iシリーズなどの最近の機種は対応していません)
- 試したのはIntel Core i7 -8750とRaspberry Pi4 (RAM 8GB)
- Ubuntu18.04
- ROS Melodic
- Gazebo 9 以上 (ROS Melodic標準Gazebo でOK)
- 準備
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y python-rosdep python-catkin-tools
$ sudo apt install -y libqt4-dev
- インストール
- ワークスペースの生成
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin build
- ダウンロード
$ cd ~/catkin_ws/src
$ git clone https://github.com/RoboticaUtnFrba/create_autonomy.git
$ git clone https://github.com/RoboticaUtnFrba/libcreate.git
- 依存関係ファイルのインストール
- 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の場合。WSL+Ubuntu環境ではビルドに約6分、デュアルブートなどのネイティブなUbuntu環境では約3分だった。WSLは便利だが遅い。
$ catkin build -j $(nproc) -DCMAKE_BUILD_TYPE=Release
- Raspberry Pi4の場合。私の環境では約17分かかった。
$ catkin build -j $(nproc) -DCMAKE_BUILD_TYPE=Release -DARM_CROSS_COMPILATION=ON
- ワークスペースの生成
- 設定
- このワークショップに使う以下の設定を以下のコマンドにより、エディタgeditで.bashrcファイルを開き、末尾にコピペする。geditが起動しない場合は、この記事の一番下のエラー処理を参照すること。なお、環境により違うので注意して欲しい。
- $ gedit ~/.bashrc
- WSL2のUbuntu18.04環境
- このワークショップに使う以下の設定を以下のコマンドにより、エディタgeditで.bashrcファイルを開き、末尾にコピペする。geditが起動しない場合は、この記事の一番下のエラー処理を参照すること。なお、環境により違うので注意して欲しい。
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0 export LIBGL_ALWAYS_INDIRECT="" 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
-
-
- ネイティブUbuntu18.04環境
-
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が起動しなかったり、画面が真っ暗な場合は一番下のエラー処理を参照する。
- エラー処理
- geditが立ち上がらない場合
- まず、以下のページに説明があるXサーバーを起動しているか確認する。記事に書いているように毎回設定するのは大変なのでconfig.xlaunchファイルをデスクトップに保存し、それをダブルクリックすると少し幸せになれる。なお、WSL2にはXサーバーが含まれていないので毎回起動する必要がある。
- 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を次のように変更してください。
- geditが立ち上がらない場合
終わり
コメント
アドバイスありがとうございます。`catkin build`ですね、早速やってみます。
HARD2020に参加している者です。
インストール > 依存関係ファイルのインストール > 他のファイルのインストール > $ rosdep install –from-paths src -yi について
ros関係の環境変数を設定していない状態だとエラーが出ました。具体的には、`ROS_PYTHON_VERSION`と`ROS_DISTRO`が設定されていないとエラーが出ます。対処法:
“`
$ echo “export ROS_PYTHON_VERSION=2” >> ~/.bashrc
$ echo “export ROS_DISTRO=melodic” >> ~/.bashrc
$ source ~/.bashrc
“`
値がこれで正しいのかは分かりませんが、とりあえずこれでエラーがなくなりました。
他の人もここで引っかかるかもしれないと思ったので残しておきます。
川本さん、ありがとうございます。ちなみに、環境はWSLですか、それともネイティブUbuntuでしょうか。
また、.bashrcに以下の2行は入っていますか?
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash
なお、値はそれで良いです。
私とアシスタントが実施したときはとくにROS関係の環境変数を.bashrcに自分で設定しなくてもエラーが出ませんでした。
ただし、printenv | grep ROS で確認すると以下の環境変数が設定されています。
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
ROS_ROOT=/opt/ros/melodic/share/ros
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROS_PYTHON_VERSION=2
なお、/opt/ros/melodic/share/ros_environment/catkin_env_hookでcatkin(ROSのビルドシステム)関連の環境変数はエクスポートされているようです。
環境はWSLです。
`source …`ですが、エラーを受け取った時には設定されていませんでした。そこのファイルに設定を追加するように書かれているんですね。
`source ~/catkin_ws/devel/setup.bash`について質問です。
~/.bashrcに追加して`source ~/.bashrc`を実行したところ、そんなファイルは無いと怒られました。git cloneもこの記事に示されているものは全てした状態です。どうして`~/catkin_ws/devel/setup.bash`がないんでしょうか?
川本君。コメントありがとう!やはりそうでしたか。ROSビルド関係の環境変数はsource /opt/ros/melodic/setup.bashを実行すると設定されます。~/catkin_ws/devel/setup.bashはcatkin_ws以下のディレクトリでcatkin buildコマンドを初めて実行すると作られます。以下のコマンドで実行してください。
$ cd ~/catkin_ws
$ catkin build
$ source ~/.bashrc
create_autonomyパッケージをビルドするので作られなずですが、ワークスペース(catkin_ws)を作ったらすぐcatkin buildするように説明を変更しました。なお、ワークショップで使っているビルトコマンドcatkin buildは昔のcatkin_makeより新しいコマンド、ワークスペースを作るのにcaktin_init_workspaceコマンドが必要なく、並列ビルドができるようになり、~/catkin_ws以下のディレクトリならどこでもビルドできるようになっています。ネットでROS関係のことを検索すると混乱するかもしれないので注意してください。