1 of 17

ROSとは何か?

〜まだROSで消耗してるの?〜

@OTL

第8回ROS勉強会@DMM.make AKIBA

2 of 17

自己紹介: @OTL (小倉崇)

Blog: ROS勉強記録 (2009-)

本: ROSではじめるロボットプログラミング(超初心者向け)

趣味で作ったROSのプログラム:

  • rqt_ez_publisher (GUIでPublish)
  • cv_camera (OpenCV超依存のカメラドライバ)
  • oculus (超古いのでサポート放棄)

Youtube: http://youtube.com/ogutti

3 of 17

What is ROS?

ROSとは何か?よく聞かれるけど意外と難しい。

「ROSではじめるロボットプログラミング」

   (小倉崇 著)によると・・・

ROSは以下の3つの側面があるらしい

  • ROS通信ライブラリ
  • ツール/ライブラリ
  • ROSエコシステム

4 of 17

What is ROS?

  • ROS通信ライブラリ
    • roscpp, rospy, …
    • クライアントライブラリとも呼ばれる
  • ツール/ライブラリ群
    • rviz, moveit, …
    • ツール:デバッグに便利な可視化ツールなど
    • ライブラリ:ロボットの機能を提供するもの
  • ROSエコシステム
    • コミュニティー、jsk_*, rqt_ez_publisher, ….
    • メーリスとか、今日の勉強会もROSワールドの一部なのでは。

5 of 17

Detail of ROS Communication Libraries

さらに通信を深く見ていくと、実はこれだけでもいろいろやっている

  • Pub/Sub通信
  • Name Server
  • Serializer
  • 多言語対応

6 of 17

Detail of ROS Communication Libraries

  • Pub/Sub通信
    • ros::Publisher pub = node.advertise<>(“topic”);
    • pub.publish();
    • N対Nの通信(それぞれはP2Pで直接通信)
  • Name Server
    • roscore/rosmaster
    • 通信相手のIPアドレスやポートを知らなくても通信できる仕組み
    • xmlrpcで通信
  • Serializer
    • std_msgs/, geometry_msgs, …
    • 言語によらないデータ形式
  • 多言語対応
    • roscpp, rospy, roslisp, roseus, rosnodejs …
    • rosruby, rosgo?

7 of 17

ROSを使いたい?

ROSの何を使いたいの?

  • ROS通信ライブラリ
  • ツール/ライブラリ群
  • ROSエコシステム

8 of 17

ROSを使いたい?

ROSの何を使いたいの?

  • ROS通信ライブラリ
    • Pub/Sub通信
    • Name Server
    • シリアライザー
    • 多言語対応
  • ツール/ライブラリ群
  • ROSエコシステム

本当にこれ全部必要なの??

9 of 17

ROSを使いたい?

ROSの何を使いたいの?

  • ROS通信ライブラリ
    • Pub/Sub通信
    • Name Server
    • シリアライザー
    • 多言語対応
  • ツール/ライブラリ群
  • ROSエコシステム

<ーこれだけあれば十分な人もいるのでは?

10 of 17

ROSで消耗してませんか?

ROSは機能がたくさんある。それゆえに・・・

  1. インストール大変すぎ
    1. Linuxほぼ必須(OSXでのビルドで1周間遊べる)
    2. しかもバージョンもほぼ固定される(Ubuntu14.04, indigoなど)
    3. 手順大変(wiki見ないとほぼ不可能)
  2. ビルド環境が特殊
    • catkinが謎
    • catkinが分からない
    • catkinって何?
  3. いちいちメッセージ定義するのめんどい
  4. Pythonさえ使えればいいんですけど
    • cpp難しすぎ・・・
    • euslispなんて使ったことない・・・とか

11 of 17

ROSで消耗してませんか?

Pythonでマルチプロセス / マルチCPUでPub/Subしながら開発したいだけ・・・

そんな人もここに1人くらいいるのでは?

そんなあなたにはこのツールで十分かも??

12 of 17

jps : just pub sub

by @OTL

13 of 17

jps: What is jps

Pub Sub通信に特化したROSインスパイヤードなフレームワーク作ってみた

  • Just Pub Sub
  • Json Pub Sub
  • JaPan Software

14 of 17

jps: How to install

$ sudo pip install jps

$ sudo apt-get install python2.7-dev

がいるかも・・・

15 of 17

jps: How to use

Publisher:

import jps

pub = jps.Publisher(‘topic1’)

pub.publish(‘hello jps!’)

Subscriber:

import jps

for msg in jps.Subscriber(‘topic1’):

print msg

Publisher/Subscriberともにimport含めて3行!! (実行にはjps_master(roscore的なもの)が必要)

本当はPublisher作ったあとにsleep必要

16 of 17

ツール群もそこそこ充実

  • jps_topic (echo/pub/list/record/play)
  • jps_plot (rqtより見た目綺麗かも?)
  • actionlib (っぽいもの。非同期なRPC?)
  • launcher (pythonで記述するlauncher)
  • ROSとの連携も簡単に出来る( rosjps (https://github.com/OTL/rosjps )

ROSだと難しいことが簡単に出来る

  • Multi-master ( pub = jps.Publisher(‘odom’, host=’another_host_name’) )
  • Serilizer切り替え (pub = jps.Publisher(‘hoge’, serializer=json.dumps) )
  • 任意の数のトピックの同時Subscription ( sub = jps.Subscriber(“cmd_vel.*”))
  • ファイアーウォールを越えて、インターネット越しに使える

GitHub: https://github.com/OTL/jps

Document: http://jps.readthedocs.org/

17 of 17

jpsへのご意見(〜〜はできないの?〜〜したいんだけど)等welcome!です。

私はraspberry pi (A+) で動くロボットをjpsで開発しています。

適材適所でROSを使って消耗することなく

ロボットプログラミングを楽しましょう