読者です 読者をやめる 読者になる 読者になる

銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

【翻訳】Choregrapheの仮想PepperへPythonスクリプトをアップロードする方法

Python

(2015年7月追記):

本ページのリンク・画像は全て切れています。もともと一般公開されていたページではなかったのかもしれませんので仕方がないです。

すでにPepperの一般販売が開始されており、さらに、Pepperがなくても DEVELOPPER PROGRAMに登録(無料)すれば、無期限のChoregrapheのライセンスキーが入手できます。※ Choregrapheの試用版ダウンロード及び、DEVELOPPER PROGRAMへ登録するには コミュニティサイトへの登録が必要です。


「Aldebaran-Robotics社のロボット制御用ソフト Choregraph(コレグラフ)の仮想ロボットへ、Pythonスクリプトをアップロードする方法」の説明ページを翻訳してみました。

  • 仮想のNAOで説明されていますが、Pepperでも実際のロボットでも同じ。NAOqi Frameworkのおかげ様。
  • 実際にやってみて間違いを見つけたので注釈を入れています。
  • 説明は古いバージョンのChoregrapheで行われているようです。2.1と合致しない点にも注釈を入れています。
  • 原文はこちら ⇒「Python with Choregraphe ― Learn how to adapt a python script to your Choregraphe project.
  • このページ(↑)、コミュニティーサイト配下にありますが、サインインしなくても見れるのでパブリックなページ・・・ですよね。
  • 画像、画面キャプチャは原文サイトのものを直接参照しています。
  • 念のため原文併記しています。間違いや改善案などありましたらご指摘くだされば喜びます。

プログラミング Pepper
プログラミング Pepper
posted with amazlet at 15.06.13
ソフトバンク ロボティクス
SBクリエイティブ
売り上げランキング: 44,909

Choregrapheについて

  • ChoregrapheはPepperやNaoなどのAldebaran Robotics(アルデバランロボティクス)社のロボットを制御するためのソフトです。同社のロボットとペアリングすればそのまま使い続けられますが、そうでなければ90日間のみ試用できます。内部には、仮想ロボットのシミュレータがあり、同社のロボット用のOSであるNAOqi(ナオキorナゥキ)が実装された仮想ロボットも用意されています。単純な動作ならこれだけで確認できます。

ChoregrapheでPythonプロジェクトにPythonスクリプトを適応させる方法
Python with Choregraphe ― Learn how to adapt a python script to your Choregraphe project.

Owner: Céline Boudier (Aldebaran Robotics)

以下のような、Naoで動作する .py があるとして:
Imagine that you have a .py file that runs on your Nao such as:

### hello.py ### 
import naoqi
from naoqi import ALProxy

def sayWord(s):
    ttsProxy = ALProxy("ALTextToSpeech","127.0.0.1",9559)
    ttsProxy.say(s)
    return

sayWord("Hello!")

###### 

これをコレグラフへ適応させる2つのやり方を見てみましょう。
Let's see two methods to adapt it with Choregraphe.

A. コレグラフのBoxへスクリプトを適応させる
A. Adapting a script to a Choregraphe box

コレグラフのBoxを作って、スクリプトを適応させることが可能です。
You can adapt your script and create a Choregraphe box with it.

  • コレグラフを開きます。
    Open Choregraphe.
  • メインフロー図を右クリックして[ボックスの新規作成]を選びます。
    Right-click the main flow diagram and choose "add a new box".

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_add_box.png
訳注
手元のコレグラフ2.1ではメニューの構成が違っていました。[ボックスの新規作成]のサブメニューの[Python...]を選ぶとよいです
  • Boxにタイトルを入力します。また、ツールチップの内容を入力したり、イメージを選択して、... OKをクリック。
    You can then add a title to your box, a tooltip, an image... Click ok.

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_adding_box.png

  • Boxが作成されました。
    The box has been created.

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_box_added.png

  • Boxをダブルクリックすると、スクリプトウィンドウが開きます。
    Now double click your box. A script window opens.

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_script.png

  • ここにPythonを書けます!
    Here you can script in python!

    • onInput_onStart 関数はユーザーが onStart 入力をアクティベートした時に呼ばれます。
      The onInput_onStart function is called when the user activates the onStart input.
    • onStopped 出力をアクティベートしたいなら、self.onStopped() と書きましょう。
      Write self.onStopped() when you want the onStopped output to be activated.
    • onInput_onStartの中にいくつかのコードを書けます。たとえば関数やメソッドをBoxに書いて、それを onInput_onStart()から呼び出せます。
      So in your onInput_onStart function, you can write some code. You can for instance write your function ad a method of your box class and call it in the onInput_onStart().

      http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_script_up.png
  • Note:

    • コレグラフでは naoqi をインポートする必要はありません。
      You don't have to import naoqi in Choregraphe!
    • プロキシーを生成するとき、引数としてNaoのIPアドレスを指定する必要はありません。
      If you create a proxy on Nao, you don't have to put your Nao's IP address as an argument.

      http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_end_1.png

B. Pythonファイルをプロジェクトのリソースへ追加する
B. Adding a python file as a project resource

.py ファイルをプロジェクトのリソースとして追加することもできます。
You can also add your .py file as a resource of your project.

  • この場合、ファイルがコレグラフによって起動されるため、(上の例のonInput_onStart内に記述した)"sayWord("hello!")" の行を取り除きます。
    In this case, we remove the "sayWord("hello!")" line from the file as it will be launched with Choregraphe!
### hello_chore.py ### 
import naoqi
from naoqi import ALProxy

def sayWord(s):
    ttsProxy = ALProxy("ALTextToSpeech","127.0.0.1",9559)
    ttsProxy.say(s)
    return

###### 
訳注

以降の手順でこのファイル(↑)をリソースへインポートしますが、ここでは、元のファイル内容を示しているにすぎません。何故か図示されていませんが、インポート後に、上のNoteで示されている内容に沿って編集しなければ動作しません。具体的には、2行目のimport naoqiの行をコメントアウトし、6行目のプロキシ取得部分では第2引数と第3引数(ipとport)を削除し、単にttsProxy = ALProxy("ALTextToSpeech")とします。

  • コレグラフを開きます。
    Open a Choregraphe.
  • プロジェクト内容での作業です。もしこれが表示されていないなら、メニューの[表示]-[プロジェクトの内容]をクリックしてください:
    Go in the project content. If you can't see it, click View then Project Content:

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_project_content.png

  • ファイルインポートボタンをクリックしてください。
    Click the import file button.

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_import_file.png

訳注

コレグラフの2.1ではボタンの構成が違います。2.1では(+)と描かれたアイコンボタンを押してドロップダウンしたメニューから、[ファイルのインポート...]を選びます。

それから、もうひとつ重要な注意点。インポートしたPythonスクリプトは、behavior.xarというファイルと同じフォルダへ移動させなければ動作しません。単にインポートしただけではプロジェクトのルートに入ってしまうようです。

  • Pythonファイルを追加します。
    Add your python file.

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_imported_file.png

  • ここで、パート1のステップ1から4で説明されている新しいBoxを追加します。
    Then, create a new box as explained in Part 1, steps 1 to 4.

    http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_end_1.png

  • 新しく作成したBoxにスクリプトを書かなくてはなりません。
    You now have to script your new box.

    • モジュールをインポートする場合、最初にリソースのパスをsys.pathに追加しなくてはなりません。ALFrameManager.getBehaviorPath(self.behaviorId)は、NAOにおいてロードされた、現在のビヘイビアパスを返します。__init__の中では、これが使えないことに注意してください。onLoadかonStartでは使用できます。
      To import your module, you have first to add your resource path to sys.path and then import your module. ALFrameManager.getBehaviorPath(self.behaviorId) returns the current behavior path - where it has been loaded on NAO. Note that it is currently not available in the __init__ but you can use it in the onLoad or onStart.
    • スクリプト中では追加したモジュールの関数を使用できます。
      You can use your module's functions in your script.

      http://developer.aldebaran-robotics.com/media/img/resources/tutorials/chore_script_up_2.png