tech-circle pepperでros開発をはじめよう in アトリエ秋葉原(ハンズオン)

102
Pepper で ROS でででででででで でででで でででで Tech-Circle #14 in ででででででで 2016 / 4 / 6 2016/4/6 @ アアアアアアア

Upload: yuta-koga

Post on 11-Apr-2017

2.702 views

Category:

Technology


1 download

TRANSCRIPT

Pepper で ROS 開発をはじめよう 〜ハンズオン編〜

Tech-Circle #14 in アトリエ秋葉原2016 / 4 / 6

2016/4/6 @ アトリエ秋葉原

この日のために会場をご提供下さったアルデバラン・アトリエ秋葉原 with SoftBank の皆様、ありがとうございます。

謝辞

名前:古賀 勇多(こがゆうた)

所属: TIS 株式会社 戦略技術センター

AI 技術推進室

業務:自律移動ロボット、機械学習の技術検証

学生時代:家庭用自律ロボット製作、地図作成( SLAM )

自己紹介

•ROS の概要と、 Pepper で ROS が動く仕組みを紹介(15分)

•ハンズオン(1時間弱)• Pepper を ROS コマンドを駆使して調査する• ROS を使って、 Pepper に物体を画像で学習、認識させるアプリケーションを作成する

本日の内容

•Pepper を ROS で動かせるようになる

•ROS の豊富な機能・ツールを活用して、 Pepper がより賢くなるアプリを開発できるようになる

本日のゴール

本題に入る前に ..

1人30秒

ROS とは

ROS(Robot Operating System) とは

・ロボット開発のためのオープンソースのフレームワーク

・ Willow Garage により開発され、その後 OSRF(Open Source   Robotics Foundation) によりメンテナンスされている

・ロボットの研究・開発における、コードの再利用性を高める ことが目的

About ROShttp://www.ros.org/about-ros/

通信システム ツール

機能 エコシステム

ROS とは

通信システム

ROS の通信システム

・出版・購読 (Pub/Sub) 型の通信 - 複数の独立したノード(機能単位のプロセス)間をトピック (データバス)を介して通信を行う

トピック

Publish

ノード

Subscribe

ノード

ROS の通信システム

画像トピック

Publish

カメラノード

Subscribe

ロボットノード

・出版・購読 (Pub/Sub) 型の通信 - 複数の独立したノード(機能単位のプロセス)間をトピック (データバス)を介して通信を行う

例)

得られる恩恵

・コードの再利用性向上

・システム全体のダウンにつながらない堅牢性の向上

・分散ネットワークへ拡張可能

ツール群

WHY ROS?  – Core Componentshttp://www.ros.org/core-components/

・可視化ツール( 2D,3D )・ログ生成ツール・ノード同時起動ツール・パッケージビルド・ 依存管理ツール・ ....

充実したツール群

機能群

機能

•移動、操作、認識に特化

•ライブラリ、シミュレータ等との連携

•多くのセンサ、ロボットに対応

数千にのぼるパッケージ(機能・追加ツール等)を世界中の大学・企業・研究機関が公開している

•論文発表 + ソースコード( ROS )公開のパターン

•他大学・機関の研究成果を、別のロボットの機能の一部として即使える、試せる

・論文読んで自分で実装して ...・ロボットと言語がちがう!書き直して ...

といった時間が不要になる。

研究成果を利用可能

移動、操作、認識

ROS の得意分野

Whole-Body Motion Planning for Manipulation of Articulated Objects with a Nao Humanoid (ICRA 2013)https://www.youtube.com/watch?v=VUmnFy58w90

ドアノブを掴んでドアを開けたり、ものを掴む

操作+認識

例)

デプスカメラで3 D環境認識し、障害物回避しながら移動する

Nao humanoid navigates autonomously using a depth camera (Xtion / Kinect)https://www.youtube.com/watch?v=srcx7lPoIfw

移動+認識

例)

エコシステム

世界中で使われる ROS wiki.ros.org へのビジター数(1ヶ月)

Community Metrics Reporthttp://download.ros.org/downloads/metrics/metrics-report-2015-07.pdf

ROS の公式ページ

Wiki, 質問、パッケージ検索などの情報をサイト一つに集約

http://www.ros.org/

・  Wikiページ数    16,043ページ・ 質問数       24,026件

About ROShttp://www.ros.org/about-ros/

通信システム ツール

機能 エコシステム

まとめ

質問あるある その1

「 ROS 使うと何が嬉しいの?」

ROS の膨大な資産を使って、

高性能なロボットを素早く開発できる

質問あるある その2

「 ROS試したいんだけど、 ROS で 動いて安価に使えるロボットないの? 」

Raspberry Pi Mouse   (Raspbererry Pi 無し )¥ 48,600.-(税込 )

Turtlebot2( ドッキングステーション付+Xtion ProLive 用柱 )※センサ、ノートパソコンは付属していません。

¥ 156,600.-(税込 )

ROS で動いて手軽に買えるロボット

RT Robot Shophttp://www.rt-shop.jp/

http://pepper-atelier-akihabara.jp/wp/wp-content/uploads/2015/01/fbogimg-1024x538.jpg

アトリエ秋葉原の Pepper を利用すれば ..

無料ROS でも動く仲間ができる

皆でアトリエに行こう!

では本題のPepper + ROS へ

Choregraphe のボックスや、配布されているボックスライブラリを使う

アトリエ秋葉原ワークショップ    https://pepper.doorkeeper.jp/

Web API (クラウドサービス)を使う

Microsoft Oxford, Google Speech API, Google Cloud Vision API, ...

Tech-Circle Pepper で WebAPI を使った機械学習ハンズオンhttp://techcircle.connpass.com/event/16275/

ROS の機能群(パッケージ)を使う 

今回はココを紹介

Pepper の機能拡張

2015年 6月 15 日 Pepper が ROS に正式対応!http://www.softbank.jp/robot/news/developer/20150615a/

Pepper 自体が何か変わったわけではない

Naoqi-ROS ブリッジにより、ROS の資産 = 豊富な機能群・ツール etc を利用できるようになった

Naoqi-ROSブリッジノード

Pepper が ROS に対応?

ここをアルデバランの人たちが作ってくれた

ROS の豊富な機能群

Naoqi-API アクセス

Pepper が ROS で動くしくみ

※他にモーションを  担当するノードもある

・ Pepper ノードは Naoqi-API の一部機能しかブリッジ できていない

・ Pepper の ROS 対応は、まだまだはじまったばかり

注意

現在 Pepper + ROS でできること/できないこと

・センサデータ取得、移動、発話、モーション

・ MoveIt! 、 Gazebo 利用 (一部問題あり?)

このあとハンズオンで一部体験していただきます

できること

できないこと

・センサ系に難あり(デプス、レーザー)

・対話や音声認識(今後できる可能性あり)

レーザーの精度が良くない

Pepper のレーザーセンサを SLAM に使うのは厳しそう

2 D 地図レーザスキャンデータ

デプスデータが歪んでいる?

上から見た図

最後に

ハードウェアプラットフォーム  

   Pepperソフトウェアプラットフォーム

ROS

両者のコラボによりロボットのさらなる普及促進へ!

Pepper + ROS によるロボット普及促進

ハンズオン

準備

・下記リンク「 Docker を使用して Pepper を ROS で動かす手順」の 手順 4, 5を実行しましょう (ハンズオン用 Docker コンテナの起動と、 Pepper への接続まで)

・ Pepper の Autonomous Life が切ってあることを確認(切れてない場合は近くのスタッフまでお知らせください)

http://qiita.com/ykoga/items/1ffe02c9cd4af42e4200

・ハンズオンで使う、コマンドコピペ用ページを開いておく

http://bit.ly/1pXMnm2

ハンズオンではコマンドがいくつか出てきます。

ハンズオンのお願い

すべて覚えようと思わずに、下のアイコンがある行はとりあえずコピペして動作確認してみてください。

※直接入力する場合はタブも効きます

やること

ハンズオン # 1(15分)ROS コマンドを駆使して Pepper ノードを調査しよう ハンズオン #2 (40分)Pepper に物体を学習・認識させ、認識結果に応じた発話をさせよう

ハンズオン #1

ROS のコマンドを駆使して

Pepper ノードを調査セヨ!

ハンズオン #1

1. Pepper ノードを起動する

2. Pepper のセンサの生データを見てみる

3. Pepper にアクションを取らせる (移動、発話)

ハンズオン #1 の流れ

1. Pepper ノードを起動する

roscore

まずは Pepper ノード群起動

roslaunch pepper_bringup pepper_full.launch nao_ip:=Pepper の IP アドレス nao_port:=9559 network_interface:=eth0

# ROS マスターの起動# ROS マスターはノードやトピックを一元管理する役割があります

# Pepper ノードの起動

正常に起動しましたか?

・上記 ” robot config service is resetting” が 表示され、かつ最後までエラー(赤字)がなければOK・途中で libdc1394 error が出ていても気にしなくて OK

2. Pepper のセンサの生データを見てみる

rostopic echo /pepper_robot/bumper

センサデータの表示

トピック名

トピック名はパッケージの wiki を参照するか、 rostopic list 、 rosnode info ノード名などで確認できます

# トピックの内容を表示# 例)バンパーセンサの場合

$ rostopic echo#台車バンパーセンサ/pepper_robot/bumper

# 頭部タッチセンサ/pepper_robot/tactile_touch

# ソナーセンサ(前後)/pepper_robot/sonar/front/pepper_robot/sonar/back

# 加速度センサ(上下)/pepper_robot/imu/base/pepper_robot/imu/torso

参考:各種センサデータの表示

$ rqt_plot

トピックを可視化

rqt_image_viewプルダウンから見たいトピックを入力・選択

# 数値(1 D )トピックをグラフでプロット

# 画像トピックを可視化

自由時間(5分間)

紹介したコマンドを使ってセンサの生データを自由に見てみよう

・  rostopic echo 表示したいトピック名・  rqt_plot・  rqt_image_view

3. Pepper にアクションを取らせる(発話、移動)

rostopic pub --rate=0.5 /speech std_msgs/String ”わーい、久々のテックサークルだー”

発話

・ --rate を入れないと 10Hz で出力され、発話が止まらなく なります(笑)

・発話内容や、 rate を変えてみる(最大2 Hz まで)・ \\vct=135\\ \\rspd=110\\ も使えます( \ はバックスラッシュ。2つ必要)

# 発話コマンドを Publish する# 例) 0.5[Hz]=2 秒に 1回、「わーい、久々のテックサークルだー」と発話させる

rostopic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.2}}'

移動

・周りに障害物がないか確認後、回転スピードや方向を変えてみよう

・安全のため、 linear (併進)の x,y はこのハンズオンでは 0 のままで お願いします(単位は [m/s] )

# 移動コマンドを Publish する# 例) Pepper をその場で 0.2[rad/s] で左回転させる(右回転はマイナス)#   回転を止めるには angular の z に、 0 を代入する

まとめ

・ Pepper ノードからは様々なセンサデータの出力、 アクションコマンドの入力を受け付けている

・ ROS のコマンドを使ってセンサデータを表示したり、

  Pepper にアクションを取らせることが可能

ハンズオン #2

Pepper に物体を学習・認識させ、

認識結果に応じた発話をさせよう

ハンズオン #2

単純な例)認識した物体の名前を言わせる

マウス!

1. ROS で配布されている画像認識パッケージを使って好きな物を学習させ、認識結果を確認しよう

2. Python プログラムを書いて、認識結果を発話する ノードを作ろう

3. プログラムを自由に改良しよう

ハンズオン #2 の流れ

1. ROS の画像認識パッケージを使って物体の学習と認識をしよう

画像認識パッケージの利用

・今回は find_object_2d パッケージを利用・学習・認識に画像の特徴点・特徴量を利用

・ドキュメント http://wiki.ros.org/find_object_2d

Pepper の目の位置

おでこのカメラのみ使います

参考:ターミナルのウィンドウ分割

roscore

Pepper

find_object_2d

create_speech

# find_object_2d パッケージの中にある、 find_object_2d ノードを起動する# image:=以下に指定したトピック名を入力画像とする

起動方法

:= はリマップという ROS の機能で、起動するノードのトピック名を引数以下に変更する役割があります

rosrun find_object_2d find_object_2d image:=/pepper_robot/camera/front/image_raw

起動画面

画像上で右クリック後ここをクリックし、ミラー表示を切る

学習済みの物体一覧

特徴点

学習をはじめる

Edit > Add object from scene をクリック

学習

物体をカメラの正面に持っていき、 Take Picture クリック > マウスで領域を囲む

①ここをクリックして撮影

②ドラッグアンドドロップで物体の領域を選択③選択後、 Next ボタンクリック

認識

認識結果が色付きで囲って表示される

認識結果

認識

オブジェクトのID を確認しておく

認識結果を保持するトピック( wiki ドキュメントより)

/find_object_2d ノードを調べる

rosnode info /find_object_2d

/objects トピック(認識結果)の中身を表示する

rostopic echo /objects

/objects トピックの中身を表示する

/objects の形式:   [ オブジェクト ID1, オブジェクトの幅、オブジェクトの高さ、 H11, H12, H13, H21, .....,       H33, オブジェクト ID2, ...]   ・ H## は 3x3 のホモグラフィー   ・今回は同時に一つのみ検出されたと仮定してプログラムを書く

表示後、認識結果の先頭にオブジェクト ID (整数)があることを確認

2. Python プログラムを書いて、認識結果を発話するノードを作ろう

/find_object_2dノード

/objects トピック

認識結果 ・オブジェクト IDを  含む

/pepper_robot/camera/front/image_raw トピック

RGB 画像

//pepper_robotノード

現状の構成

/find_object_2dノード

/objects トピック

認識結果 ・オブジェクト ID を含む

/pepper_robot/camera/front/image_raw トピック

RGB 画像

//pepper_robotノード

目標の構成

/create_speech

ノード

/speech トピック

発話内容

今から作るノード

②③

/find_object_2dノード

/objects トピック ( 認識結果 )

[2, 300, 400, ...(省略 )]

//pepper_robotノード

/create_speech

ノード

  /speech トピック(発話内容)

“らんま”

②③

/pepper_robot/camera/front/image_raw トピック

RGB 画像

オブジェクト ID

今から作るノード

・パッケージの作成

・ Python プログラムを記述  ・まずノードの雛形プログラムを理解する  ・オブジェクト ID とオブジェクト名の対応辞書を作成  ・オブジェクト名を発話させる

・ノードを起動する

Python で ROS プログラミング

create_speech パッケージの作成

catkin_create_pkg create_speech rospy std_msgs

依存パッケージ(今回はあまり気にしな くていいです)

cd ~/catkin_ws/src

# create_speech パッケージの作成

create_speech パッケージのビルド

# 作成したパッケージへ移動し、フォルダ作成cd create_speechmkdir scripts && cd scripts

# プログラムの雛形 create_speech.py をダウンロードするcurl -o create_speech.py https://raw.githubusercontent.com/ykoga-kyutech/pepper_ros_handson/master/scripts/create_speech_template.py

# 実行可能にするchmod +x create_speech.py

# ビルドcd ~/catkin_ws && catkin_make

# パッケージを ROS に読み込ませるsource ~/catkin_ws/devel/setup.bash

rosrun create_speech create_speech.py

ノードの実行

# create_speech ノードの実行# 書式:  rosrun [ パッケージ名 ]   [ 実行ファイル名 ]

ここまでの結果

プログラムの雛形を確認する

お好みのエディタで開いて create_speech.py の中身を確認しましょう。 emacs, nano, gedit が使えます。

どうしても Vim が使いたい方は、 apt-get update;apt-get install vim でインストールできます

emacs ~/catkin_ws/src/create_speech/scripts/create_speech.py# emacs の場合

プログラムの雛形を確認する

 ・ノードの宣言

 ・ Pub/Sub の宣言

/objects を受け取った場合

呼ばれるコールバック関数

ノードが Ctrl-C などで終

了されるまでループ

コードの追加 (1)  辞書を作ろう

学習した画像のオブジェクト ID と、オブジェクト名の対応辞書を、 CreateSpeech クラスに追加する

完成版→ bit.ly/1UrhiUF追加

コードの追加 (2)   callback関数を変更しよう

認識結果から得たオブジェクト ID をキーにして、辞書からオブジェクト名を取り出す

完成版→ bit.ly/1UrhiUF

追加

コードの追加 (3)  発話させよう

CreateSpeech クラスに発話内容 /speech を発行するpub_speech メソッドを追加する

完成版→ bit.ly/1UrhiUF

追加

ここまでの内容を記述した create_speech.py

間に合わなかった場合

http://bit.ly/1UrhiUF

いち・ゆー・あーる・えいち・あい・ゆー・えふ

太字が大文字

結果

Pepper が「(オブジェクト名)+だね」と言えば成功です!

3. アプリケーションを自由に改良しよう!

自由時間

・認識内容に応じて、もっと面白いリアクションを  するようにしてみよう

・ Parameter を変更して挙動の変化を確認しよう - View タブ > Parameters > Feature2d

・学習するオブジェクトの数を増やしてみよう

例)特徴点検出、特徴量に ORB を使ってみる

まとめ

・自作のパッケージ・ノードを新規に作成する方法を 紹介した

・既存の ROS のパッケージと組み合わせて一つのアプリ ケーションを作成する方法を紹介した

ROS の資産を使うことで、 Pepper にはない

機能を拡張できる!

最後に

アンケートにご協力お願いします

http://goo.gl/forms/1uEvCouYQs

私たちは一緒に働いてくれる仲間を募集しています!

https://www.wantedly.com/companies/tis/projects