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.

NAO/Pepper 開発環境 について

1,720 views

Published on

2017/2/21 会津大学で行った NAO/Pepper のワークショップ資料後半部分です。

Published in: Technology
  • Be the first to comment

NAO/Pepper 開発環境 について

  1. 1. NAO/Pepper 開発環境に ついて 2017/02/21 株式会社スマートロボティクス
  2. 2. NAO/Pepper のロボット OS は NAOqi 2 Linux NAOqi ユーザーアプリ ユーザーアプリ ・・・ • 分散処理可能な通信プロトコル • ロボットを制御するための各種API ロボット本体
  3. 3. NAO/Pepperの開発環境 3 特徴 開発言語 対応プラットフォーム Choregraphe ボックスの組み合わせによるグ ラフィカルなプログラミングが 可能 グラフィカル UI ツール + Python Windows / Mac / Linux Python NAOqi SDK Python によりロボット OS にア クセス、遠隔、ローカル両方で 実行可能 Python Windows / Mac / Linux C++ NAOqi SDK C/C++ によりロボット OS に アクセス、遠隔、ローカル両方 で実行可能 C++ Windows / Mac / Linux Java NAOqi SDK Java によりロボット OS にアク セス、遠隔からのみ実行可能 Java Windows / Mac / Linux Android SDK Android 対応 Pepper からサ ポート予定。胸のタブレットか らロボットを制御。 Java Windows / Mac https://community.ald.softbankrobotics.com/ja/resources/software/language/ja https://developer.softbankrobotics.com/jp-ja/downloads
  4. 4. SDK を用いて分散処理 4 Linux NAOqi ロボット本体 Windows/Mac/Linux NAOqi SDKs で作ったユーザープログラム SDK ランタイム PC ユーザーアプリ NAOqi SDK を使って 遠隔から NAO/Pepper をコントロール。また遠隔のプログラムを「サービス」 という形式で ロボット本体の NAOqi に登録することでロボット本体で動くアプリから遠隔で動く 「サービス」に直接アクセスすることも可能に
  5. 5. NAOqi API 5 http://doc.aldebaran.com/2-1/naoqi/ 音声認識、音声合成、運動制御など機能ごとに分類された「サービス」により標 準で様々な機能を提供 NAO の NAOqi バージョンは現在 2.1.4、Pepper は 2.4.3(まもなく 2.5 がリ リース予定) http://doc.aldebaran.com/2-4/index_dev_guide.html from naoqi import ALProxy try: tts = ALProxy("ALTextToSpeech", <robotIP>, 9559) except Exception,e: print "Could not create proxy to ALTextToSpeech” print "Error was: ",e sys.exit(1) tts.say(“こんにちは NAO です!")
  6. 6. ALMemory 6 NAOqi 内で共有される共有メモリー 独自に「キー名」を定義して、保存、取り出し可能。(誰でも保存、参照可能) データ型は文字列、整数、実数、配列など イベントの伝播にも使われる from naoqi import ALProxy try: # create proxy on ALMemory memProxy = ALProxy("ALMemory","localhost",9559) #insertData. Value can be int, float, list, string memProxy.insertData("myValueName1", "myValue1") #getData print "The value of myValueName1 is", memProxy.getData("myValueName1") except RuntimeError,e: # catch exception print "error insert data", e ALMemory へのデータの保存と取得
  7. 7. ALMemory 7 memProxy = ALProxy("ALMemory","localhost",9559) #raise event. Data can be int, float, list, string memProxy.raiseEvent("My event", "data") : : def pythondatachanged(self, strVarName, value): """callback when data change""” print "datachanged", strVarName, " ", value, " ", strMessage : : try: pythonModule = myModule("pythonModule") prox = ALProxy("ALMemory") prox.subscribeToEvent("FaceDetected","pythonModule", "pythondatachanged") ALMemory イベントの発火 ALMemory イベントのハンドリング http://doc.aldebaran.com/2-1/naoqi/core/almemory-tuto.html#subscribe-to-event
  8. 8. qi Framework vs NAOqi 8 qi Framework • より扱いやすいアプリケーション開発フレームワークを目指し、サービス登録の 方法、イベント伝播の方法などを再整理 • NAOqi と共存、Pepper / NAO ともどちらのフレームワークによる記法でも動作 • http://doc.aldebaran.com/2-4/dev/libqi/index.html tts = session.service("ALTextToSpeech") tts.say("Hello Word") qi Framework による NAOqi API の呼び出し def mycallback(value): print "val:", value mem = session.service("ALMemory") sub = mem.subscriber("foo/bar") sub.signal.connect(mycallback) qi Framework による メモリイベントのハンドリング
  9. 9. サービス 9 • バックグランドで動作し、特定の機能を提供 • NAOqi API もサービスとして動作している • 独自のサービスを作成、登録することも可能 • リモートで動作するサービスを登録させることも可能 • クライアントプログラムはサービスがリモートにあるか、ローカルあるかに関係 なく、同じ呼び出し方でサービスの機能にアクセス可能 NAOqi ALTextToSpeech ALMotion MyService1 MyService2 ALTextToSpeech ALMotion : : MyService1 MyService2 SDK ランタイム
  10. 10. サービス 10 import qi import sys class MyService: def __init__(self, session): self.session = session self.memory = self.session.service("ALMemory") self.middlehead_signal = self.memory.subscriber("HandLeftBackTouched").signal self.middlehead_signal.connect(self._leftTouchedCallback) def _leftTouchedCallback(self,value): if int(value) > 0: tts = self.session.service("ALTextToSpeech") tts.say("左手") def myMethod(self,value): tts = self.session.service("ALTextToSpeech") tts.say(value) if __name__ == "__main__": app = qi.Application(sys.argv) app.start() myservice = MyService(app.session) app.session.registerService(myservice.__class__.__name__, myservice) app.run() # will exit when the connection is over
  11. 11. サービスと Choregraphe 11 自身で作ったサービスを Choregraphe プロジェクトの中に取り組むことも可能 サービスは別プロセスで実行される コードを中心としたより安定性の高いアプリ http://qiita.com/tkawata1025/items/541f72074c80523c0848
  12. 12. ROS + NAOqi 12 Linux NAOqi Windows/Mac/Linux ROS 対応 NAOqiプログラム NAOqi SDK ランタイム PC ( NAO は本体に内包させることにも対応)ロボット本体 ROS ランタイム ROS ランタイム ROS プログラム http://wiki.ros.org/nao http://wiki.ros.org/pepper
  13. 13. OpenRTM と NAO/Pepper 13 http://ogata-lab.jp/ja/tech_ja/749.html
  14. 14. その他開発環境 14 OpenNAO OS VirtualBox 2.1.2 • NAO本体 NAOqi 2.1.2 の仮想環境 • NAOqi API は搭載されていない • C++コンパイラや pip などのインストールツールを搭載、NAO 本体で動作する ネイティブプログラムやライブラリの作成が可能 • OpenRTM-aist (1.1.1) がビルドできること確認 • (C++ NAOqi SDK vs VirtualBox? : C++ NAOqi SDK は qibuild という独自の コンパイル環境の中で、コンパイルを行う。 対して VirtualBox は Gentoo Linux の開発環境を使う。C++ NAOqi SDK では PC、ロボット本体、何で動く プログラムの生成可能、VirtualBox は ロボット本体の環境のみ。VirtualBox は NAOqi 2.1.2 でリリースが止まっており、特に Pepper などでは動作しない可能 性あり) Webots 8 • シミュレータ環境
  15. 15. 終わり 15

×