更新日:2004/06/01 (注)ERS-7以外のロボット形状に対応して用意された関数です。現在はAIBO Remote Frameworkは、 ERS-7のみの対応となるため、固定値のみを返す関数があります。 ■CCpcInfo 【機能】コンストラクタ 【戻り値】なし 【機能説明】内部オブジェクトおよび内部変数の初期化 【形式】 CCpcInfo::CCpcInfo( UINT robot) // ロボット種別(DESIGN_ERS7) VAIBO::GetRobotDesign()で取得する ■~CCpcInfo 【機能】デストラクタ 【戻り値】なし 【機能説明】内部オブジェクトおよび内部変数の後処理 【形式】 CCpcInfo::~CCpcInfo() ■GetJointArray 【機能】関節ID配列の取得 【戻り値】関節ID数 【機能説明】そのロボット種別が持つ3D表示する関節のIDと数を取得する。joint = NULLのときは関節識別子数だけ返す。 配列に格納される整数値の意味は CpcInfo.h の enum JOINTS_ID {} で分かる。 バグ; 関節リストにRollが含まれますが、ERS-7 には Roll 関節はありません。 【形式】 int CCpcInfo::GetJointArray( int *joints) // 関節識別子格納場所 ■GetSensorArray 【機能】Primitive Locator ID とセンサー情報の対応テーブルの取得 【戻り値】テーブルの大きさ(Primitive Locator IDの大きさに等しい) 【機能説明】Primitive Locator ID (CpcInfo.h 内 enum SensorID{} で定義) とセンサー情報の対応テーブルを取得する。array = NULL の場合はデータ数のみ返す。 CCpcInfo::GetJointArray(int *joints) で取得できる関節角度のリストと WM_VAIBO_SENSOR_DATA で取得できるセンサー情報のリストの並びが異なるため、 マッピングテーブルを取得する。 【形式】 int CCpcInfo::GetSensorArray( int *array) // テーブル格納場所 【使用例】 class CTestDlg : public CDialog { int m_sensorArrayNum; // The number of sensor array int *m_sensorArray; // Sensor array int m_jointArrayNum; // The number of sensor array int *m_jointArray; // Sensor array float *m_angleArray; // Joint angle array } CTestDlg::CTestDlg() { CCpcInfo cpc(DESIGN_ERS7); m_sensorArrayNum = cpc.GetSensorArray(NULL); m_sensorArray = (int*)malloc(sizeof(int)*m_sensorArrayNum); cpc.GetSensorArray(m_sensorArray); int m_jointArrayNum = cpc.GetJointArray(NULL); m_jointArray = (int*)malloc(sizeof(int)*m_jointArrayNum); cpc.GetJointArray(m_jointArray); m_angle = (float*)malloc(sizeof(float)*SENSOR_MAX); } ON_REGISTERED_MESSAGE(WM_VAIBO_SENSOR_DATA, OnVAIBOSensorData) LRESULT CTestDlg::OnVAIBOSensorData( WPARAM wParam, LPARAM recArray ) { SensorRec *sensorRecAry = (SensorRec*)recArray int numOfData = LOWORD( wParam ); for ( i = 0; i < numOfData; i++ ) { int ix = m_sensorArray[sensorRecAry[i].sensorID]; if ( ix != -1 ) { // It is information on the joint. m_angleArray[ix] = (float)(sensorRecAry[i].value) / 3.141592 * 1000000.0 * 180.0; } } m_aibo3D->RotateJoint( m_jointArray, m_angleArray, SENSOR_MAX, TRUE ); // m_aibo3D is VAIBO3D class object, it should be constructed before use. // See RemoteTest sample to see full set program. } ■GetPrimitiveLocator 【機能】Primitive Locator ID から Primitive Locator の取得 【戻り値】1:該当するLocatorがある 0:該当するLocatorがない 【機能説明】Primitive Locator ID(CpcInfo.h 内 enum SensorID{} で定義) に対応したPrimitive Locatorを char *szLocator に取得する。 Primitive Locator とは、"PRM:/r1/c1-Joint2:11" のような文字列で、 OPEN-R SDKでは、AIBOのセンサー、関節をあらわす。 Primitive Locator は、AIBO Remote Framework でユーザーが使用することはない。 OPEN-R SDK を理解している人用にPrimitive Locatorを表示させるなどの 目的で利用できる。 【形式】 int CCpcInfo::GetPrimitiveLocator( int nSensorID, // Primitive Locator ID(=SensorID) char *szLocator) // Primitive Locator(128Bytes)