オリジナルのプロジェクトの作成

このチュートリアルでは、オリジナルのプロジェクトを作成する方法を学習します。

hrpsys-simulatorのプロジェクトファイルはXML形式で記述します。プロジェクトファイルの編集には好きなテキストエディタを使用してください。

サンプルプロジェクトをローカルディレクトリにコピーします:

$ cp `pkg-config --variable=prefix hrpsys-base`/share/hrpsys/samples/PA10/PA10simulation.xml mysimulation.xml

好きなテキストエディタでプロジェクトファイルを開いてください(ここではemacsを使います):

$ emacs mysimulation.xml

プロジェクトファイルの基本構成

テキストエディタでプロジェクトファイルを開くと以下の内容になっているはずです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<grxui>
   <mode name="Simulation">
     <item class="com.generalrobotix.ui.item.GrxRTSItem" name="untitled" select="true">
         <property name="PA10Controller(Robot)0.period" value="0.005"/>
         <property name="HGcontroller0.period" value="0.005"/>
         <property name="HGcontroller0.factory" value="HGcontroller"/>
         <property name="connection" value="HGcontroller0.qOut:PA10Controller(Robot)0.qRef"/>
         <property name="connection" value="HGcontroller0.dqOut:PA10Controller(Robot)0.dqRef"/>
         <property name="connection" value="HGcontroller0.ddqOut:PA10Controller(Robot)0.ddqRef"/>
     </item>
     <item class="com.generalrobotix.ui.item.GrxModelItem" name="pa10" select="true" url="$(PROJECT_DIR)/../model/PA10/pa10.main.wrl">
         <property name="rtcName" value="PA10Controller(Robot)0"/>
         <property name="inport" value="qRef:JOINT_VALUE"/>
         <property name="inport" value="dqRef:JOINT_VELOCITY"/>
         <property name="inport" value="ddqRef:JOINT_ACCELERATION"/>
         <property name="outport" value="q:JOINT_VALUE"/>
   ..snip..
   </mode>
</grxui>

オリジナルのシミュレーションプロジェクトを作成するには、各設定項目を編集する必要があります。各設定項目は classアトリビュート によって区別されます。hrpsys-simulatorには現在以下の種類の設定項目があります:

com.generalrobotix.ui.item.GrxRTSItem

RTコンポーネントの初期化と接続を設定する

com.generalrobotix.ui.item.GrxModelItem

ロボットモデルのロードと初期姿勢を設定する

com.generalrobotix.ui.item.GrxWorldStateItem

物理シミュレーションのパラメータを設定する

com.generalrobotix.ui.item.GrxPythonScriptItem

シミュレーションの裏で動作するpythonスクリプトを設定する

com.generalrobotix.ui.view.Grx3DView

シミュレーション画面の初期のカメラ位置と視覚化を設定する

com.generalrobotix.ui.grxui.GrxUIPerspectiveFactoryなど、その他の設定項目もありますが、それらはeclipseベースの旧OpenHRPシミュレータのための設定項目で互換性のために存在します。hrpsys-simulatorでは無視してください。

ロボットモデルの変更

このチュートリアルではOpenHRPサンプルに付属する”simple_vehicle_with_camera”ロボットモデルを使います。

まずは、モデル名とURLを変更します。以下の部分を:

1
<item class="com.generalrobotix.ui.item.GrxModelItem" name="pa10" select="true" url="$(PROJECT_DIR)/../model/PA10/pa10.main.wrl">

以下のように変更してください:

1
<item class="com.generalrobotix.ui.item.GrxModelItem" name="vehicle0" select="true" url="$(PROJECT_DIR)/../model/simple_vehicle_with_camera.wrl">

“$(PROJECT_DIR)”はOpenHRPのサンプルプロジェクトディレクトリの位置で置き換えられます(多くの場合、 /usr/local/share/OpenHRP-3.1/samples/projectディレクトリです)。

次に、ロボットモデルの各プロパティを設定していきます。 rtcNamein[out]port プロパティは、ロボットモデルにRTコンポーネントとしてのインターフェースを作成するための設定です。 ここでは rtcName を”vehicle0”と設定しましょう。 in[out]port プロパティは、元のファイルのままにしておいてください(この設定は、関節角、角速度、角加速度の各制御をロボットモデルに加えることができる設定です)。

このモデルについては仮想カメラを用いることができます。以下の例のoutport設定の最後の行は仮想カメラに関するものです。”VISION_SENSOR1”は仮想カメラの名前でモデルファイルの中で定義された名前と一致する必要があります。最後の”VISION_SENSOR”の部分はデータ型を定義します。

最後の”BODY.translation”の行は、ロボットのシミュレーション世界での初期位置を設定します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<item class="com.generalrobotix.ui.item.GrxModelItem" name="vehicle0" select="true" url="$(PROJECT_DIR)/../model/simple_vehicle_with_camera.wrl">
   <property name="isRobot" value="true"/>
   <property name="rtcName" value="vehicle0"/>
   <property name="inport" value="qRef:JOINT_VALUE"/>
   <property name="inport" value="dqRef:JOINT_VELOCITY"/>
   <property name="inport" value="ddqRef:JOINT_ACCELERATION"/>
   <property name="outport" value="q:JOINT_VALUE"/>
   <property name="outport" value="VISION_SENSOR1:VISION_SENSOR1:VISION_SENSOR"/>
   <property name="BODY.translation" value="0.0 0.0 0.2"/>
</item>

シミュレーションプロジェクトの作成が終わったので、hrpsys-simulatorでプロジェクトを開いてみましょう:

$ hrpsys-simulator mysimulation.xml -showsensors

シミュレーション世界にロボットは現れたでしょうか?空の世界が見えたかもしれません。実は、床も設定しないと車は落下して視野からあっという間に消えてしまうのです。

以下の行をプロジェクトファイルに追加してください:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<item class="com.generalrobotix.ui.item.GrxModelItem" name="vehicle0" select="true" url="$(PROJECT_DIR)/../model/simple_vehicle_with_camera.wrl">
   <property name="isRobot" value="true"/>
   <property name="rtcName" value="vehicle0"/>
   <property name="inport" value="qRef:JOINT_VALUE"/>
   <property name="inport" value="dqRef:JOINT_VELOCITY"/>
   <property name="inport" value="ddqRef:JOINT_ACCELERATION"/>
   <property name="outport" value="q:JOINT_VALUE"/>
   <property name="outport" value="VISION_SENSOR1:VISION_SENSOR1:VISION_SENSOR"/>
   <property name="BODY.translation" value="0.0 0.0 0.2"/>
</item>
<item class="com.generalrobotix.ui.item.GrxModelItem" name="longfloor" select="true" url="$(PROJECT_DIR)/../model/longfloor.wrl">
   <property name="isRobot" value="false"/>
   <property name="WAIST.translation" value="0.0 0.0 -0.1 "/>
</item>
<item class="com.generalrobotix.ui.item.GrxCollisionPairItem" name="CP#floor#vehicle0" select="true">
   <property name="objectName2" value="vehicle0"/>
   <property name="objectName1" value="longfloor"/>
</item>

hrpsys-simulatorでプロジェクトを開いてみましょう:

$ hrpsys-simulator mysimulation.xml -showsensors

次のチュートリアルでは、オリジナルのコントローラにロボットを接続する方法を学習します。