10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ROSアドベントカレンダーAdvent Calendar 2018

Day 17

ROS2 CrystalのGazebo/rqtでTurtlebotを動かしてみる

Last updated at Posted at 2018-12-16

はじめに

ROS Advent Calendar 2018 17日目の記事です。

ROS 2 Crystal Clemmys Released!
ちょうど2日前の2018/12/15にROS2の新しいバージョンである「Crystal Clemmys」がリリースされました。Crystalは以下のような特徴があります( https://index.ros.org/doc/ros2/Release-Crystal-Clemmys/ より)。

ROS2ではまだあまりロボットを動かせるデモが少ないので、今年のアドベントカレンダーは、このうち「Gazebo対応」「rqt対応」の2つの機能を使い、ROS2のGazebo上でTurtlebotをrqtを動かすねたをやってみたのでそれを紹介します。

結果

Ubuntu18.04の環境でROS1 bridgeを使うことなく、ROS2のみでTurtlebotがGazebo上で動かせるようになりました。動かせるといっても、とりあえず車輪が動くだけで、バンパ情報やデプスセンサの情報はまだ取れません(Pluginを自分で移植すればできます)。
どこがROS2?という感じですが・・・・

動かし方

に記載しました。

2018/12/17現在リリースされている gazebo_ros_pkg に修正が必要がだっため、gazebo_ros_pkgに少し手をいれたものを使っています(本家にFB中)。

やったこと

1. packageを作ります

ROS1とそれほど違いはありません。チュートリアルを参考にしながら作りました。

package.xmlの<export>タグに<build_type>の記載をしないと、パッケージが見つからなくなったりするようなので、忘れないようにします。

2. launchファイルを書きます

launchシステムは、ROS1から大きく変更されたところです。以下を参考に作成しました。

ROS2のlaunchシステムはPythonで記述します。処理をlaunch.action.Actionとして登録することで色々な処理の実行が可能です(もちろんノードを起動することも)。ROS1では、サービスの起動を待ってそのサービスを呼び出す処理(gazebo_ros, nodelet, ros_control 等)は、spawnスクリプトを書いて別プロセスとしてroslaunchから呼び出す必要がありますが、今回はこのあたりの処理をlaunch.action.Actionとして記述しlaunchの中から直接SpawnEntityサービスを呼び出してロボットモデルをGazeboにロードするようにしてみました。empty_world.lauch.py
非同期な処理も書く事ができます。

3. URDFファイルを作ります

turtlebot_description, create_description パッケージが必要なため、まずこれらをament対応します
ROS2には、xacroがない&Gazeboのタグが少し変更されたため、ROS1のxacroで出力したURDFファイルを手で編集して用意しました。create_circles_kinect.urdf

4. rqt_robot_steeringをROS2に移植する

rqtのいくつかのPluginは既に移植されていましたが、rqt_robot_steeringはまだ移植されていなかったため、移植済みの以下のパッケージを参考に、移植してみました。

基本的には、PubSubや、Parameter周りの変更だけで動くようになるイメージです。

はまりポイント

  • ROS2自体が絶賛開発中です。リリース直前まで不具合修正(#608)されていたりと、何か問題があった場合に本家の情報は常に見ておかないといけないようです。
  • rviz2でrobot_descriptionからロボットモデルの表示ができませんでした。既にQAにはあるようです。今回はトピックではなく、URDFをファイル指定することで表示させています。
  • PythonがSegmentation Faultで落ちます。ROS2からクライアントはPure Pythonではなく、cのラッパとして作成されています。少しおかしなことをすると、Python自体を巻き込んで落ちてしまい、デバッグが少し大変になったイメージです。

終わりに

Gazeboが対応されたとはいえ、まだ最小限のPluginしかポーティングされていない&ros_controlのポーティングがまだのため、本格的にロボット開発に使えるようになるにはもう少しかかりそうです。
逆にいうと、コントリビューションの余地はまだたくさんありそうです。

Enjoy happy ROS hacking!

10
7
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
10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?