最初に、pythonのためのパッケージのインストールが必要になります。
端末から、次のコマンドを実行してください。
% sudo aptitude install openrtm-aist-python openrtm-aist-python-example omniidl4-python python-omniorb2-omg
PyDev は、Eclipse で python を扱うプラグインです。
Eclipse のメニューから「ヘルプ」~「ソフトウェア更新」を選びます。
「ソフトウェア更新およびアドオン」ダイアログが開くので、「サイトの追加」ボタンを押してロケーションに「http://pydev.org/updates 」を入力します。
使用可能なソフトウェアのタブに、この http://pydev.org/updates が追加されるので、これを開いてPyDev の下にある PyDev for Eclipse をチェックして、インストールボタンを押します。
二つのRTコンポーネント VisionManipulation と MyScheduler を作成して、すでに作成済みの RTコンポーネント VVVRecogTrigger からデータを取得します。
メインとなるのは VisionManipulation です。
スケジューラからモデルのIDを受け取ったら、recogSDL サービスポートを通して VVVRecogTrigger に渡します。
VVVRecogTrigger がモデルIDを認識した結果は、recogResult データポート経由で受けとります。
二つのRTコンポーネントができたので、まずはローカルで接続してみます。
Eclipse で RT System Editor パースペクティブを開き、ツールバーのONを押して System Diagram を開きます。
ツリーの「localhost:2809」を開くと、その下にさらに「(ホスト名)|host_cxt」というツリーがあると思うので、それも開いておきます。
いくつかRTコンポーネントが表示されるかもしれませんが、どれも□のアイコンで、起動できません。
端末ウインドウを二つ開き、一つでMyScheduler.py, もう一つで VisionManipulation.py を実行します。
すると、「(ホスト名)|host_cxt」ツリーの下に「MyScheduler0|rtc」「VisionManipulation|rtc」という項目が増えます。凸凹の文字を底でくっつけて倒したような形のアイコンになっています。
これを両方 System Diagram にドラッグ&ドロップすると、小さな□のついたブルーの長方形が現れます。これがRTコンポーネントです。
それぞれの下に、MyScheduler0, VisionManipulation0 と名前がついているのを確認してください。
また、小さな□はポートを示しています。ポートにマウスカーソルを合わせると、ポートの名前がわかります。
VisionManipulation には4つのサービスポートと1つのデータポートがあるので、右側に4つの□、左側に欠けた□が出ています。
4つの□のひとつが VisionManipulation0.scheduler となっています。
これをMyScheduler0の□にドラッグ&ドロップすると、「ポートプロファイルを入力してください」というダイアログが出るので、そのままOKを押します。
するとポートとポートが線でつながれます。
ここでツールバーの緑のプレイボタンを押すと、RTコンポーネントがアクティベートされます。
双方が一瞬緑になったあと、MyScheduler側がエラーで赤くなります。
VisionManipulation を実行している端末のエラーメッセージを確認してください。
setModelID: 42 omniORB: Caught an unexpected Python exception during up-call. Traceback (most recent call last): File "/home/asahi/workspace/VisionManipulation/VisionManipulation_idl_example.py", line 48, in setModelID coord = self.recogSDL_service._ptr().recognize_by_ID(ModelID) AttributeError: 'NoneType' object has no attribute 'recognize_by_ID'
これは VisionManipulation0 の recogSDL ポートに何もつないでいないのだから、当然です。
これでひとまず、MySchedulerからVisionManipulationの呼び出しができたということで、いよいよカメラとつないでみることにします。
(作成中)