LoginSignup
9
11

More than 5 years have passed since last update.

Gazeboをバージョンアップして、自動車を動かす

Last updated at Posted at 2018-05-26

はじめに

ROS, Gazeboに車両モデルを導入したい!
調べてみると,次の2つのモデルが確認できました。

前者のpriusはOpen Source Robotics Foundation (OSRF)が公開しており,GAZEBOモデルのリポジトリにも入っています。トヨタとOSRFが連携したとかいうニュースがあったので,それ関係で作られたと思います(たぶん)。後者のCAT VehicleはCPS-VO(Cyber-Physical Systems Virtual Organization)という組織が作ったものらしいのですが,2017年以降の情報がなく,さらにIndigoにしか対応していないようで,ここをみるとKineticでコンパイルできないと書いていました。

私はKineticを使いたいので,priusを導入しようとしたのですが,このモデルはROS Kineticをフルインストールした時についてくるGabezo7には対応しておらず,Gazebo8以降のバージョンを導入する必要があります。そこで,本記事では,Gazebo7をアンインストールして,Gazebo8, またはGazebo9をインストールします。そのあとで,priusモデルの入ったcar_demoというパッケージを動かしてみます。

動かしてみた結果が下の動画です。左側がGazebo,右側がrvizの画面にそれぞれ対応します。車両の移動に伴って,LiDARの点群やカメラ画像が変化している様子が確認できます。
car_demo

想定環境

  • Ubuntu 16.04 LTS
  • ROS Kinetic
  • Gazebo7(作業前) -> Gazebo8, 9 (作業後)

注意事項

Gazeboのバージョンアップはリスキーです。自己責任でお願いします。Which combination of ROS/Gazebo versions to useを読んでおくといいと思います。

Warning!: Using this option, you won't be able to use any ROS Ubuntu package related to Gazebo from ROS deb repository. The equivalent of gazebo_ros_pkgs can be installed from debian packages, but all other software (such as turtlebot_gazebo) must be built from source. Thanks to catkin workspaces this is quite easy to do.

参考:car_demoとdocker起動について

詳しくは,公式のSimulated Car Demoを見てください。gitHubのリポジトリはosrf/car_demoになります。

なお,githubのREADMEに書いてある通り,これは仮想環境のdockerで動かせます。つまり,ローカルにROSやらGazeboやらが入っていなくても動かせるようになっています。しかし,2018年5月現在,ROSがnvidia-docker2に対応していないので,古いほうのnvidia-dockerを使う必要があります。お手軽に試してみたい人は,dockerと古いほうのnvidia-dockerを使ってやってみてください(bashファイルを2つ実行するだけで動きます)。本記事では,nvidia-docker2のダウングレードが嫌なので,頑張ってnative環境で動くようにします。

Gazeboのバージョンアップ作業

まず,GAZEBOに関するパッケージを削除します(過不足ない削除方法がわからなかったので適当です)。

$ sudo apt-get purge ros-kinetic-desktop-full
$ sudo apt-get purge ros-kinetic-gazebo*
$ sudo apt-get purge --auto-remove gazebo7

以下,バージョン別に書いていきます。

gazebo8のインストール

car_demoのDockerfileを参考にインストールしていきます(公式サイトでgazebo8を入れる方法が見つかりませんでした)。失敗したときは,元のDockerfileをみて足りなそうなものを入れていってください。

$ echo "deb http://packages.osrfoundation.org/gazebo/ubuntu `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list
$ sudo wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -y gazebo8 ros-kinetic-gazebo8-ros-pkgs

ターミナルでgazeboと打ち込んで,gazebo8が立ち上がればOK。

gazebo9のインストール

公式サイトの Install Gazebo using Ubuntu packages にしたがって,GAZEBOの最新版(執筆時はGAZEBO9)をインストールするシェルを実行します。

$ curl -ssL http://get.gazebosim.org | sh

私の環境では途中でエラーが起きました。どうもGPGキーを取得する箇所でサーバエラーが起きているようでした。いろいろ試しましたが,解決できなかったので,GPG error: http://packages.osrfoundation.orgを参考にGPGキーを直接取りに行きました。

$ echo "deb http://packages.osrfoundation.org/gazebo/ubuntu `lsb_release -cs` main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo tee apt-key add - 

その後,冒頭のシェルをローカルに落としてきて,問題の行を削除したシェルを実行するとうまくいきました。

起動確認します。ターミナルでgazeboと打ち込んで,gazebo9が立ち上がればOK。

さらに,Which combination of ROS/Gazebo versions to useのUsing a specific Gazebo version with ROSの節を参考に,rosと連携するためのパッケージをインストールします(もう入っているかも)

$ sudo apt-get install ros-kinetic-gazebo9-ros-pkgs
$ sudo apt-get install ros-kinetic-gazebo9-ros-control 

car_demo を native環境 でビルド・実行する

必要なパッケージをインストールして,car_demoリポジトリをクローンします。

# Dockerfileに書いてあるパッケージをインストール
sudo apt-get install ros-kinetic-fake-localization ros-kinetic-joy
# 実行時のエラー文を見る限りこれも必要らしいのでインストール
sudo apt-get install ros-kinetic-robot-state-publisher
# car_demoを落としてくる
git clone https://github.com/osrf/car_demo

rosのワークスペースを作ります(すでにある場合はそちらで作業してください)

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

作成したcatkin_ws/srcの中に,クローンしたcar_demo内のパッケージ(car_demo, prius_description, prius_msgs)をフォルダごと移動させます。Gazebo8を使っている場合は,そのままビルドできると思います。

$ cd ~/catkin_ws/
$ catkin_make

gazebo9を使っている場合は,catkin_makeの前に追加作業が必要です(gazebo8の場合はここをスキップ)。インストール環境によって対応が異なるはずなので,根気よくエラーを潰していく必要があります。以下,私の環境で出たエラーとその対策(?)です。

  1. car_demo/CMakeLists.txt の find_package (gazebo 8 REQUIRED) の8を9に書き換える。
  2. car_demo/plugins/gazebo_ros_block_laser.cppがGAZEBOのバージョン違いの影響でエラーを吐き出してくる。gazebo_ros_block_laser.cpp no member GetSimTime #35などに書かれている。ひとまず2,3箇所ほどコメントアウトで対応。
  3. ignition-msgs0がないため,エラーが起きていた。これのインストールが大変だった(未検証ですがignition-msgsのバージョンを書き換えるだけでいいかもしれません)。依存関係から,どうやら先にignition-math3ignition-toolをインストールする必要があるようです。その後,ignition-msgs0 をインストールします。インストール方法は,リンク先の対応するタグの圧縮ファイルを落としてきて,解凍し,解凍したフォルダ内で以下の操作をする。

    mkdir bulid
    cd build
    cmake ..
    sudo make install
    

さて,catkin_makeに成功すれば,いよいよ起動です。

source ~/catkin_ws/devel/setup.bash
roslaunch car_demo demo.launch

冒頭のアニメーションのようなGazeboとrvizの画面が出てくれば成功です。joystickを繋いでいない場合,起動時にエラー文が出てきますが,特に問題はないです。joystickがなくても,キーボードのWASDを使って車両を操作できます。Gazeboの画面上で,priusの位置がわからない場合は,左側のパネルからpriusモデルを選択し,move toを押してください。車両までカメラが寄ってくれます。

マップはかなり広いので,いろいろ遊べそうです。

car_demo_map

備考:citysimについて

car_demoの発展版といえるcitysimというプロジェクトがあります。こちらはGazebo9で動くようです。そのうち動かしてみようと思います。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11