HARD2020: シミュレータでルンバを動かそう!

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
    • 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__
    •  ワークスペースのビルド
      • $ 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環境
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上のルンバを遠隔制御する。ルンバが無事動いたら成功。お疲れ様!
      • $ roslaunch ca_tools keyboard_teleop.launch
      • 以下の画面になる。以下のキー操作でロボットを動かすことができる。なお、マウスのカーソルが端末上にないとロボットは動かないので注意。
        • i: 前進、u:左前進、o:右前進
        • j: 左回転、k:停止、 l:右回転
        • m:左後進、,:後進、 .:右後進
        • スペース:停止
        • w/x:並進速度増速/減速(10%)
        • e/c:角速度増速/減速(10%)

  • エラー処理
    • geditが立ち上がらない場合
      • まず、以下のページに説明があるXサーバーを起動しているか確認する。記事に書いているように毎回設定するのは大変なのでconfig.xlaunchファイルをデスクトップに保存し、それをダブルクリックすると少し幸せになれる。なお、WSL2にはXサーバーが含まれていないので毎回起動する必要がある。
    • rvizを起動するとsegmentation faultというエラーが出て起動しません。
      • ~/.bashrcに以下の1行を追加してください。
        • export GAZEBO_IP=127.0.0.1
    • Gazeboを起動するとsegmentation faultというエラーが出て起動しません。
      • ~/.bashrcに以下の1行を追加してください。
        • export LIBGL_ALWAYS_INDIRECT=""
    • 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

終わり

コメント

  1. 川本 より:

    アドバイスありがとうございます。`catkin build`ですね、早速やってみます。

  2. 川本 博詔 より:

    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
    “`

    値がこれで正しいのかは分かりませんが、とりあえずこれでエラーがなくなりました。

    他の人もここで引っかかるかもしれないと思ったので残しておきます。

    • demu より:

      川本さん、ありがとうございます。ちなみに、環境は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`がないんでしょうか?

        • demu より:

          川本君。コメントありがとう!やはりそうでしたか。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関係のことを検索すると混乱するかもしれないので注意してください。

タイトルとURLをコピーしました