Aldebaran NAO のRTコンポーネントです.Python版のOpenRTM-aistとPython版のnaoqiの両方に依存しています.

インストール

naoq-sdk-pythonのインストール

NAOのSDK (Python版) をインストールします.Aldebaran Roboticsが提供するマニュアルを参照してください.上手くインストールできていれば,下記のコンソール操作でエラーが出ないはずです.

$ python (これでインタラクティブシェルを起動)
>>> import naoqi

RTミドルウエアのインストール

Python版のOpenRTM-aistをインストールする必要があります.
公式ウェブサイトからインストーラをダウンロードするか,ソースコードからインストールします.
上手くインストールできていれば,下記のコンソール操作でエラーが出ないはずです.

$ python (これでインタラクティブシェルを起動)
>>> import OpenRTM_aist

PILのインストール

Python Imaging Libraryを以下のウェブサイトからインストールします.
http://www.pythonware.com/products/pil/

NAO RTC本体

以下のウェブサイトからコードをダウンロードします.Download Zipでアーカイブしてダウンロードできます.gitに慣れている人は,gitでダウンロードすることをお勧めします.
https://github.com/ogata-lab/NAO

最初にIDLファイルをコンパイルするために,idlcompile.shかidlcompile.batを実行する必要があります.これで準備完了.

実行方法

$ python NAO.py

で実行します.RTCが実行できましたか?

RT_System_Editor_-__-_Eclipse_SDK 2

RTCの概要

RTCのインターフェースで受け取った命令を,naoqiの枠組みを使ってNAOに送信,またはその逆を行うことで,OpenRTM-aist対応のRTコンポーネントからNAOを操作することが出来ます.

インターフェース

DataInPorts

なし

DataOutPorts

camera

RTC.CameraImage型.NAOのカメラの画像.

audio

RTC.TimedOctetSeq型.NAOのマイクから取得した音声

jointAngle

RTC.TimedDoubleSeq型.現在の関節角度

bumper

RTC.TimedBooleanSeq型.足についている接触センサの値.(左足左側,左足右側,右足左側,右足右側,という並び)

touch

RTC.TimedBooleanSeq型.頭部および両腕の接触センサの値.(頭部後側,頭部中心,頭部前側,左手後部,左手中央,左手前部,右手後部,右手中央,右手前部,という並び)

sonar

RTC.TimedBooleanSeq型.胸にある超音波センサの値.(左,右,という並び)

ServicePorts

NAO_srv

インターフェース一覧です.

  • ALMotion
  • ALTestToSpeech
  • ALVideoDevice
  • ALMemory
  • ALBehaviorSelector
  • ALLeds

このサービスポートはNAO専用のミドルウエアであるnaoqiに含まれるモジュールのインターフェースに準拠しています.詳しい使い方はNAOのAPIマニュアルを参照してください.

IDLファイル (NAO.idl)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
module ssr {
 
  struct ActuatorPosition {
    string name;
    float position; // [rad]
  };
 
  typedef sequence<ActuatorPosition> ActuatorPositionSeq;
 
 
  struct ActuatorPositionArray {
    ActuatorPositionSeq data;
    float fractionSpeed;
  };
 
  struct StringArray {
    sequence<string> data;
  };
 
  struct FloatArray {
    sequence<float> data;
  };
 
  struct BoolArray {
    sequence<boolean> data;
  };
 
  struct LongArray {
    sequence<long> data;
  };
 
  interface ALMotion {
    void setAngles(in StringArray name, in FloatArray value, in float fractionSpeed);
    FloatArray getAngles(in StringArray name, in boolean useSensors);
    void openHane(in string name);
    void closeHand(in string name);
 
    void setStiffness(in StringArray name, in FloatArray stiffnesses);
    FloatArray getStiffness(in StringArray name);
 
    void rest();
    void wakeUp();
 
    void moveTo(in float x, in float y, in float theta);
    void moveToward(in float vx, in float vy, in float vtheta);
    FloatArray getRobotPosition();
    FloatArray getRobotVelocity();
    void stopMove();
    boolean moveIsActive();
    void waitUntilMoveIsFinished();
    void moveInit();
    void setWalkArmEnabled(in boolean leftArmEnable, in boolean rightArmEnable);
    BoolArray getWalkArmEnabled();
 
    FloatArray getPosition(in string name, in long space, in boolean useSensors);
    void setPosition(in string name, in long space, in FloatArray position, in float fractionMaxSpeed, in long axisMask);
    void setTransform(in string name, in long space, in FloatArray transform, in float fractionMaxSpeed, in long axisMask);
    FloatArray getTransform(in string name, in long space, in boolean useSensorValues);
  };
 
  interface ALTextToSpeech {
    void say(in string stringToSay);
    void setVolume(in float volume);
    float getVolume();
    void setLanguage(in string language);
    string getLanguage();
    StringArray getAvailableLanguages();
  };
 
  interface ALBehaviorManager {
    StringArray getInstalledBehaviors();
    StringArray getRunningBehaviors();
    boolean isBehaviorInstalled(in string name);
    boolean isBehaviorRunning(in string name);
    void runBehavior(in string name);
    void stopAllBehaviors();
    void stopBehavior(in string name);
  };
 
  interface ALMemory {
    void insertLongData(in string name, in long value);
    void insertFloatData(in string name, in long value);
    void insertStringData(in string name, in string value);
    void insertoLongArrayData(in string name, in LongArray value);
    void insertoFloatArrayData(in string name, in FloatArray value);
    void insertoStringArrayData(in string name, in StringArray value);
 
    long getLongData(in string name);
    float getFloatData(in string name);
    string getStringData(in string name);
    LongArray getLongArrayData(in string name);
    FloatArray getFloatArrayData(in string name);
    StringArray getStringArrayData(in string name);
  };
 
  interface ALVideoDevice {
    long getCameraModel(in long index);
    long getFrameRate(in long index);
    long getResolution(in long index);
    long getColorSpace(in long index);
    boolean setCameraParameter(in long id, in long value);
    long getCameraParameter(in long id);
    boolean setCameraParameterToDefault(in long id);
  };
 
  interface ALLeds {
    void fade(in string name, in float intensity, in float duration);
    void fadeRGB(in string name, in long rgb, in float duration);
  };
};

コンフィグレーション

ipaddress

NAOのIPアドレス(もしくはホスト名).onActivate時に接続します.nao.localなど,bonjourの名前を指定することが出来ます.

port

NAOのポート番号です.一般的には9559です.

enable_camera

カメラのON/OFFです.1とすればONです.onActivate時にのみ評価されます.

enable_audio

音声のON/OFFです.1とすればONです.onActivate時にのみ評価されます.