Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tech-Circle PepperでROS開発をはじめよう in アトリエ秋葉原(ハンズオン)

4,440 views

Published on

Tech-Circle PepperでROS開発をはじめようハンズオンでの発表資料です。

http://techcircle.connpass.com/event/29194/

Published in: Technology
  • Be the first to comment

Tech-Circle PepperでROS開発をはじめよう in アトリエ秋葉原(ハンズオン)

  1. 1. PepperでROS開発をはじめよう 〜ハンズオン編〜 Tech-Circle #14 in アトリエ秋葉原 2016 / 4 / 6 2016/4/6 @アトリエ秋葉原
  2. 2. この日のために会場をご提供下さったアルデバラン・ アトリエ秋葉原 with SoftBankの皆様、ありがとう ございます。 謝辞
  3. 3. 名前:古賀 勇多(こがゆうた) 所属:TIS株式会社 戦略技術センター AI技術推進室 業務:自律移動ロボット、機械学習の技術検証 学生時代:家庭用自律ロボット製作、地図作成(SLAM) 自己紹介
  4. 4. •ROSの概要と、PepperでROSが動く仕組みを 紹介(15分) •ハンズオン(1時間弱) • PepperをROSコマンドを駆使して調査する • ROSを使って、Pepperに物体を画像で学習、認識 させるアプリケーションを作成する 本日の内容
  5. 5. • PepperをROSで動かせるようになる • ROSの豊富な機能・ツールを活用して、Pepper がより賢くなるアプリを開発できるようになる 本日のゴール
  6. 6. 本題に入る前に..
  7. 7. 1人30秒
  8. 8. ROSとは
  9. 9. ROS(Robot Operating System)とは ・ロボット開発のためのオープンソースのフレームワーク ・Willow Garageにより開発され、その後OSRF(Open Source Robotics Foundation)によりメンテナンスされている ・ロボットの研究・開発における、コードの再利用性を高める ことが目的
  10. 10. About ROS http://www.ros.org/about-ros/ 通信システム ツール 機能 エコシステム ROSとは
  11. 11. 通信システム
  12. 12. ROSの通信システム ・出版・購読(Pub/Sub)型の通信 - 複数の独立したノード(機能単位のプロセス)間をトピック (データバス)を介して通信を行う トピック Publish ノード Subscribe ノード
  13. 13. ROSの通信システム 画像トピック Publish カメラ ノード Subscribe ロボット ノード ・出版・購読(Pub/Sub)型の通信 - 複数の独立したノード(機能単位のプロセス)間をトピック (データバス)を介して通信を行う 例)
  14. 14. 得られる恩恵 ・コードの再利用性向上 ・システム全体のダウンにつながらない堅牢性の向上 ・分散ネットワークへ拡張可能
  15. 15. ツール群
  16. 16. WHY ROS? – Core Components http://www.ros.org/core-components/ ・可視化ツール(2D,3D) ・ログ生成ツール ・ノード同時起動ツール ・パッケージビルド・ 依存管理ツール ・.... 充実したツール群
  17. 17. 機能群
  18. 18. 機能 • 移動、操作、認識に特化 • ライブラリ、シミュレータ等との連携 • 多くのセンサ、ロボットに対応 数千にのぼるパッケージ(機能・追加ツール等)を世界中の大学・企業・ 研究機関が公開している
  19. 19. • 論文発表 + ソースコード(ROS)公開のパターン • 他大学・機関の研究成果を、別のロボットの機能の一部 として即使える、試せる ・論文読んで自分で実装して... ・ロボットと言語がちがう!書き直して... といった時間が不要になる。 研究成果を利用可能
  20. 20. 移動、操作、認識 ROSの得意分野
  21. 21. Whole-Body Motion Planning for Manipulation of Articulated Objects with a Nao Humanoid (ICRA 2013) https://www.youtube.com/watch?v=VUmnFy58w90 ドアノブを掴んでドアを開けたり、ものを掴む 操作+認識 例)
  22. 22. デプスカメラで3D環境認識し、障害物回避しながら移動する Nao humanoid navigates autonomously using a depth camera (Xtion / Kinect) 移動+認識 例)
  23. 23. エコシステム
  24. 24. 世界中で使われるROS wiki.ros.orgへのビジター数(1ヶ月) Community Metrics Report http://download.ros.org/downloads/metrics/metrics-report-2015-07.pdf
  25. 25. ROSの公式ページ Wiki, 質問、パッケージ検索などの情報をサイト一つに集約 http://www.ros.org/ ・ Wikiページ数 16,043ページ ・ 質問数 24,026件
  26. 26. About ROS http://www.ros.org/about-ros/ 通信システム ツール 機能 エコシステム まとめ
  27. 27. 質問あるある その1 「ROS使うと何が嬉しいの?」
  28. 28. ROSの膨大な資産を使って、 高性能なロボットを素早く開発できる
  29. 29. 質問あるある その2 「 ROS試したいんだけど、ROSで 動いて安価に使えるロボットないの? 」
  30. 30. Raspberry Pi Mouse (Raspbererry Pi 無し) ¥48,600.-(税込) Turtlebot2 (ドッキングステーション付+Xtion ProLive用柱) ※センサ、ノートパソコンは付属していません。 ¥156,600.-(税込) ROSで動いて手軽に買えるロボット RT Robot Shop http://www.rt-shop.jp/
  31. 31. アトリエ秋葉原のPepperを利用すれば.. 無料 ROSでも動く 仲間ができる 皆でアトリエに 行こう!
  32. 32. では本題の Pepper + ROSへ
  33. 33. 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の機能拡張
  34. 34. 2015年6月15日 PepperがROSに正式対応! http://www.softbank.jp/robot/news/developer/20150615a/
  35. 35. Pepper自体が何か変 わったわけではない Naoqi-ROSブリッジにより、 ROSの資産 = 豊富な機能群・ツール etcを 利用できるようになった Naoqi-ROS ブリッジノード群 PepperがROSに対応? ここをアルデバランの人たちが作ってくれた ROSの豊富な機能群 Naoqi-APIアクセス
  36. 36. PepperがROSで動くしくみ ※他にモーションを 担当するノードもある
  37. 37. ・PepperノードはNaoqi-APIの一部機能しかブリッジ できていない ・PepperのROS対応は、まだまだはじまったばかり 注意
  38. 38. 現在Pepper + ROSで できること/できないこと
  39. 39. ・センサデータ取得、移動、発話、モーション ・MoveIt!、Gazebo利用(一部問題あり?) このあとハンズオンで一部体験していただきます できること
  40. 40. できないこと ・センサ系に難あり(デプス、レーザー) ・対話や音声認識(今後できる可能性あり)
  41. 41. レーザーの精度が良くない PepperのレーザーセンサをSLAMに使うのは厳しそう 2D地図レーザスキャンデータ
  42. 42. デプスデータが歪んでいる? 上から見た図
  43. 43. 最後に
  44. 44. ハードウェアプラットフォーム Pepper ソフトウェアプラットフォーム ROS 両者のコラボによりロボットのさらなる普及促進へ! Pepper + ROSによるロボット普及促進
  45. 45. ハンズオン
  46. 46. 準備 ・下記リンク「Dockerを使用してPepperをROSで動かす手順」の 手順4,5を実行しましょう (ハンズオン用Dockerコンテナの起動と、Pepperへの接続まで) ・PepperのAutonomous Lifeが切ってあることを確認 (切れてない場合は近くのスタッフまでお知らせください) http://qiita.com/ykoga/items/1ffe02c9cd4af42e4200 ・ハンズオンで使う、コマンドコピペ用ページを開いておく http://bit.ly/1pXMnm2
  47. 47. ハンズオンではコマンドがいくつか出てきます。 ハンズオンのお願い すべて覚えようと思わずに、下のアイコンがある行は とりあえずコピペして動作確認してみてください。 ※直接入力する場合はタブも効きます
  48. 48. やること ハンズオン#1(15分) ROSコマンドを駆使してPepperノードを調査 しよう ハンズオン#2(40分) Pepperに物体を学習・認識させ、認識結果に 応じた発話をさせよう
  49. 49. ハンズオン#1
  50. 50. ROSのコマンドを駆使して Pepperノードを調査セヨ! ハンズオン#1
  51. 51. 1. Pepperノードを起動する 2. Pepperのセンサの生データを見てみる 3. Pepperにアクションを取らせる (移動、発話) ハンズオン#1の流れ
  52. 52. 1. Pepperノードを起動する
  53. 53. roscore まずはPepperノード群起動 roslaunch pepper_bringup pepper_full.launch nao_ip:=PepperのIPアドレス nao_port:=9559 network_interface:=eth0 # ROSマスターの起動 # ROSマスターはノードやトピックを一元管理する役割があります # Pepperノードの起動
  54. 54. 正常に起動しましたか? ・上記 ”robot config service is resetting”が 表示され、かつ最後までエラー(赤字)がなければOK ・途中でlibdc1394 errorが出ていても気にしなくてOK
  55. 55. 2. Pepperのセンサの生データを見てみる
  56. 56. rostopic echo /pepper_robot/bumper センサデータの表示 トピック名 トピック名はパッケージのwikiを参照するか、rostopic list、rosnode info ノード名などで確認できます # トピックの内容を表示 # 例)バンパーセンサの場合
  57. 57. $ 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 参考:各種センサデータの表示
  58. 58. $ rqt_plot トピックを可視化 rqt_image_view プルダウンから見たいトピックを入力・選択 # 数値(1D)トピックをグラフでプロット # 画像トピックを可視化
  59. 59. 自由時間(5分間) 紹介したコマンドを使ってセンサの生データを 自由に見てみよう ・ rostopic echo 表示したいトピック名 ・ rqt_plot ・ rqt_image_view
  60. 60. 3. Pepperにアクションを取らせる (発話、移動)
  61. 61. rostopic pub --rate=0.5 /speech std_msgs/String ”わーい、 久々のテックサークルだー” 発話 ・ --rateを入れないと10Hzで出力され、発話が止まらなく なります(笑) ・発話内容や、rateを変えてみる(最大2Hzまで) ・vct=135 rspd=110 も使えます(はバックスラッシュ。2つ必要) # 発話コマンドをPublishする # 例)0.5[Hz]=2秒に1回、「わーい、久々のテックサークルだー」と発話 させる
  62. 62. 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を代入する
  63. 63. まとめ ・Pepperノードからは様々なセンサデータの出力、 アクションコマンドの入力を受け付けている ・ROSのコマンドを使ってセンサデータを表示したり、 Pepperにアクションを取らせることが可能
  64. 64. ハンズオン#2
  65. 65. Pepperに物体を学習・認識させ、 認識結果に応じた発話をさせよう ハンズオン#2
  66. 66. 単純な例)認識した物体の名前を言わせる マウス!
  67. 67. 1. ROSで配布されている画像認識パッケージを使って 好きな物を学習させ、認識結果を確認しよう 2. Pythonプログラムを書いて、認識結果を発話する ノードを作ろう 3. プログラムを自由に改良しよう ハンズオン#2の流れ
  68. 68. 1. ROSの画像認識パッケージを使って 物体の学習と認識をしよう
  69. 69. 画像認識パッケージの利用 ・今回はfind_object_2dパッケージを利用 ・学習・認識に画像の特徴点・特徴量を利用 ・ドキュメント http://wiki.ros.org/find_object_2d
  70. 70. Pepperの目の位置 おでこのカメラのみ 使います
  71. 71. 参考:ターミナルのウィンドウ分割 roscore Pepper find_object_2d create_speech
  72. 72. # find_object_2dパッケージの中にある、find_object_2dノードを起動する # image:=以下に指定したトピック名を入力画像とする 起動方法 :=はリマップというROSの機能で、起動するノードのトピック名を引数以下に変更する役割があります rosrun find_object_2d find_object_2d image:=/pepper_robot/camera/front/image_raw
  73. 73. 起動画面 画像上で右クリック後 ここをクリックし、 ミラー表示を切る 学習済みの 物体一覧 特徴点
  74. 74. 学習をはじめる Edit > Add object from sceneをクリック
  75. 75. 学習 物体をカメラの正面に持っていき、Take Pictureクリック > マウスで領域を囲む ①ここをクリックして撮影 ②ドラッグアンドドロップで物体の領域を選択 ③選択後、Nextボタンクリック
  76. 76. 認識 認識結果が色付きで囲って表示される 認識結果
  77. 77. 認識 オブジェクトのID を確認しておく
  78. 78. 認識結果を保持するトピック (wikiドキュメントより) /find_object_2dノードを調べる rosnode info /find_object_2d
  79. 79. /objectsトピック(認識結果)の中身を表示する rostopic echo /objects /objectsトピックの中身を表示する /objectsの形式: [オブジェクトID1, オブジェクトの幅、オブジェクトの高さ、H11, H12, H13, H21, ....., H33, オブジェクトID2, ...] ・H##は3x3のホモグラフィー ・今回は同時に一つのみ検出されたと仮定してプログラムを書く 表示後、認識結果の先頭にオブジェクトID(整数)があることを確認
  80. 80. 2. Pythonプログラムを書いて、認識結果を 発話するノードを作ろう
  81. 81. /find_object_2d ノード /objectsトピック 認識結果 ・オブジェクトIDを 含む /pepper_robot/camera/front/image_rawトピック RGB画像 //pepper_robot ノード 現状の構成
  82. 82. /find_object_2d ノード /objectsトピック 認識結果 ・オブジェクトIDを含む /pepper_robot/camera/front/image_rawトピック RGB画像 //pepper_robot ノード 目標の構成 /create_speech ノード /speechトピック 発話内容 今から作るノード ① ②③
  83. 83. /find_object_2d ノード /objectsトピック(認識結果) [2, 300, 400, ...(省略)] //pepper_robot ノード 例 /create_speech ノード /speechトピック(発話内容) “らんま” ① ②③ /pepper_robot/camera/front/image_rawトピック RGB画像 オブジェクトID 今から作るノード
  84. 84. ・パッケージの作成 ・Pythonプログラムを記述 ・まずノードの雛形プログラムを理解する ・オブジェクトIDとオブジェクト名の対応辞書を作成 ・オブジェクト名を発話させる ・ノードを起動する PythonでROSプログラミング
  85. 85. create_speechパッケージの作成 catkin_create_pkg create_speech rospy std_msgs 依存パッケージ (今回はあまり気にしな くていいです) cd ~/catkin_ws/src # create_speechパッケージの作成
  86. 86. create_speechパッケージのビルド # 作成したパッケージへ移動し、フォルダ作成 cd create_speech mkdir 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
  87. 87. rosrun create_speech create_speech.py ノードの実行 # create_speechノードの実行 # 書式: rosrun [パッケージ名] [実行ファイル名]
  88. 88. ここまでの結果
  89. 89. プログラムの雛形を確認する お好みのエディタで開いて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の場合
  90. 90. プログラムの雛形を確認する ・ノードの宣言 ・Pub/Subの宣言 /objectsを受け取った場合 呼ばれるコールバック関数 ノードがCtrl-Cなどで終了 されるまでループ
  91. 91. コードの追加(1) 辞書を作ろう 学習した画像のオブジェクトIDと、オブジェクト名の 対応辞書を、CreateSpeechクラスに追加する 完成版→ bit.ly/1UrhiUF 追加
  92. 92. コードの追加(2) callback関数を変更しよう 認識結果から得たオブジェクトIDをキーにして、 辞書からオブジェクト名を取り出す 完成版→ bit.ly/1UrhiUF 追加
  93. 93. コードの追加(3) 発話させよう CreateSpeechクラスに発話内容/speechを発行する pub_speechメソッドを追加する 完成版→ bit.ly/1UrhiUF 追加
  94. 94. ここまでの内容を記述したcreate_speech.py 間に合わなかった場合 http://bit.ly/1UrhiUF いち・ゆー・あーる・えいち・あい・ゆー・えふ 太字が大文字
  95. 95. 結果 Pepperが「(オブジェクト名)+だね」 と言えば成功です!
  96. 96. 3. アプリケーションを自由に 改良しよう!
  97. 97. 自由時間 ・認識内容に応じて、もっと面白いリアクションを するようにしてみよう ・Parameterを変更して挙動の変化を確認しよう - Viewタブ > Parameters > Feature2d ・学習するオブジェクトの数を増やしてみよう 例)特徴点検出、特徴量にORBを使ってみる
  98. 98. まとめ ・自作のパッケージ・ノードを新規に作成する方法を 紹介した ・既存のROSのパッケージと組み合わせて一つのアプリ ケーションを作成する方法を紹介した ROSの資産を使うことで、Pepperにはない 機能を拡張できる!
  99. 99. 最後に アンケートにご協力お願いします http://goo.gl/forms/1uEvCouYQs
  100. 100. 私たちは一緒に働いてくれる仲間を募集しています! https://www.wantedly.com/companies/tis/projects

×