tech-circle pepperでros開発をはじめよう in アトリエ秋葉原(ハンズオン)
TRANSCRIPT
名前:古賀 勇多(こがゆうた)
所属: TIS 株式会社 戦略技術センター
AI 技術推進室
業務:自律移動ロボット、機械学習の技術検証
学生時代:家庭用自律ロボット製作、地図作成( SLAM )
自己紹介
•ROS の概要と、 Pepper で ROS が動く仕組みを紹介(15分)
•ハンズオン(1時間弱)• Pepper を ROS コマンドを駆使して調査する• ROS を使って、 Pepper に物体を画像で学習、認識させるアプリケーションを作成する
本日の内容
ROS(Robot Operating System) とは
・ロボット開発のためのオープンソースのフレームワーク
・ Willow Garage により開発され、その後 OSRF(Open Source Robotics Foundation) によりメンテナンスされている
・ロボットの研究・開発における、コードの再利用性を高める ことが目的
ROS の通信システム
・出版・購読 (Pub/Sub) 型の通信 - 複数の独立したノード(機能単位のプロセス)間をトピック (データバス)を介して通信を行う
トピック
Publish
ノード
Subscribe
ノード
ROS の通信システム
画像トピック
Publish
カメラノード
Subscribe
ロボットノード
・出版・購読 (Pub/Sub) 型の通信 - 複数の独立したノード(機能単位のプロセス)間をトピック (データバス)を介して通信を行う
例)
WHY ROS? – Core Componentshttp://www.ros.org/core-components/
・可視化ツール( 2D,3D )・ログ生成ツール・ノード同時起動ツール・パッケージビルド・ 依存管理ツール・ ....
充実したツール群
•論文発表 + ソースコード( 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件
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 でも動く仲間ができる
皆でアトリエに行こう!
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 アクセス
準備
・下記リンク「 Docker を使用して Pepper を ROS で動かす手順」の 手順 4, 5を実行しましょう (ハンズオン用 Docker コンテナの起動と、 Pepper への接続まで)
・ Pepper の Autonomous Life が切ってあることを確認(切れてない場合は近くのスタッフまでお知らせください)
http://qiita.com/ykoga/items/1ffe02c9cd4af42e4200
・ハンズオンで使う、コマンドコピペ用ページを開いておく
http://bit.ly/1pXMnm2
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
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
参考:各種センサデータの表示
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 にアクションを取らせることが可能
1. ROS で配布されている画像認識パッケージを使って好きな物を学習させ、認識結果を確認しよう
2. Python プログラムを書いて、認識結果を発話する ノードを作ろう
3. プログラムを自由に改良しよう
ハンズオン #2 の流れ
画像認識パッケージの利用
・今回は find_object_2d パッケージを利用・学習・認識に画像の特徴点・特徴量を利用
・ドキュメント http://wiki.ros.org/find_object_2d
# find_object_2d パッケージの中にある、 find_object_2d ノードを起動する# image:=以下に指定したトピック名を入力画像とする
起動方法
:= はリマップという ROS の機能で、起動するノードのトピック名を引数以下に変更する役割があります
rosrun find_object_2d find_object_2d image:=/pepper_robot/camera/front/image_raw
学習
物体をカメラの正面に持っていき、 Take Picture クリック > マウスで領域を囲む
①ここをクリックして撮影
②ドラッグアンドドロップで物体の領域を選択③選択後、 Next ボタンクリック
/objects トピック(認識結果)の中身を表示する
rostopic echo /objects
/objects トピックの中身を表示する
/objects の形式: [ オブジェクト ID1, オブジェクトの幅、オブジェクトの高さ、 H11, H12, H13, H21, ....., H33, オブジェクト ID2, ...] ・ H## は 3x3 のホモグラフィー ・今回は同時に一つのみ検出されたと仮定してプログラムを書く
表示後、認識結果の先頭にオブジェクト ID (整数)があることを確認
/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 の場合
コードの追加 (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
いち・ゆー・あーる・えいち・あい・ゆー・えふ
太字が大文字
自由時間
・認識内容に応じて、もっと面白いリアクションを するようにしてみよう
・ Parameter を変更して挙動の変化を確認しよう - View タブ > Parameters > Feature2d
・学習するオブジェクトの数を増やしてみよう
例)特徴点検出、特徴量に ORB を使ってみる
まとめ
・自作のパッケージ・ノードを新規に作成する方法を 紹介した
・既存の ROS のパッケージと組み合わせて一つのアプリ ケーションを作成する方法を紹介した
ROS の資産を使うことで、 Pepper にはない
機能を拡張できる!
私たちは一緒に働いてくれる仲間を募集しています!
https://www.wantedly.com/companies/tis/projects