~hrg/hrg-packaging/openhrp3

« back to all changes in this revision

Viewing changes to server/ControllerBridge.old/readme.txt

  • Committer: nakaoka
  • Date: 2008-07-06 15:26:51 UTC
  • Revision ID: git-v1:fbb3ce756bbcedb021fed5d474b58ef092ea8b42
コンパイルに cmake を使用するようにし、MakefileをCMakeLists.txt で置き換えた。

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
"改良" 改良ControllerBridge について  中岡
3
 
 
4
 
 
5
 
改良ControllerBridgeにてコード設計上の問題があったため、
6
 
構造を作り直しました.
7
 
 
8
 
また、あわせてオプションの与え方を以下のように変更しています。
9
 
 
10
 
* preference-file -> config-file
11
 
 
12
 
* component -> 廃止しました.
13
 
 
14
 
 connectionでRTCインスタンス名も指定できるようにしたので問題ありません。
15
 
 
16
 
* controller -> server-name
17
 
 
18
 
 ブリッジのCORBA側コンポーネントを生成するファクトリサーバの名前
19
 
 (旧来のOpenHRPコントローラの名前)を指定します.
20
 
 controllerだとRTCのコントローラと混乱するので変更しました。
21
 
 
22
 
* bridge-component -> robot-name
23
 
 
24
 
 ブリッジのRTC側コンポーネントの名前。
25
 
 これはユーザ側からみてロボットのI/Oを表すことになるので、こうしました。
26
 
 デフォルトだと "VirtualRobot" となります。
27
 
 
28
 
* without-connection -> 廃止。接続しない場合は、単にconnectionを与えなければよい。
29
 
 
30
 
* module -> 初期化関数名を省略できるようにしました。その場合、"コンポーネント名" + "Init" という関数を呼びます.
31
 
 
32
 
* mapping-in, array-mapping-in, color-camera, mono-camera, depth-camera
33
 
 
34
 
すべて out-port で設定。
35
 
 
36
 
全関節の場合は、
37
 
out-port ポート名:プロパティ
38
 
 
39
 
あるリンクのみの場合は
40
 
out-port ポート名:リンク名:プロパティ
41
 
 
42
 
カメラは
43
 
out-port ポート名:COLOR_IMAGE:カメラid
44
 
といった感じ。
45
 
 
46
 
* mapping-out, array-mapping-out
47
 
 
48
 
in-port で設定。
49
 
設定の仕方は out-port の場合と同様。
50
 
 
51
 
 
52
 
 
53
 
以上の設定法の詳細は、ソースの BridgeConf.cpp をみてください。
54
 
オプションの設定法はもうしばらくは変更があり得ます。
55
 
次期リリースまでには固定します.
56
 
 
57
 
 
58
 
 
59
 
 
60
 
 
61
 
--------------------------------------------------------------------------------
62
 
 
63
 
                        改良ControllerBridge
64
 
 
65
 
 
66
 
                                    株式会社エスキューブド 2008/2/20
67
 
 
68
 
■概要
69
 
改良されたControllerBridgeに関する説明です。改良点は別添えの報告書をご参照ください。
70
 
 
71
 
■ファイル
72
 
ControllerBridge.cpp        ... OpenHRPのコントローラクラスを実装しています
73
 
ControllerBridge.hpp        ... 上のヘッダファイルです
74
 
PreferenceManager.cpp       ... オプションの解析を行います
75
 
PreferenceManager.hpp       ... 上のヘッダファイルです
76
 
ControllerBridgeComp.cpp    ... 内部コンポーネントです
77
 
ControllerBridgeComp.hpp    ... 上のヘッダファイルです
78
 
RTCutil.cpp                 ... RTコンポーネントのユーティリティです
79
 
RTCutil.h                   ... 上のヘッダファイルです
80
 
ControllerBridgeServer.cpp  ... 起動処理を行います
81
 
Makefile                    ... メークファイルです
82
 
Makefile.common             ... メークするソースなどを記述しています
83
 
rtc.conf                    ... 内部コンポーネント用設定ファイルです
84
 
report.doc                  ... 報告書です
85
 
readme.txt                  ... このファイルです
86
 
 
87
 
■インストール
88
 
1. 解凍
89
 
  $(OPENHRPHOME)/Controller/serverにおいて、
90
 
 
91
 
    $ tar zxvf ControllerBridge.tar.gz
92
 
 
93
 
  として、解凍してください。
94
 
 
95
 
2. Makefileの編集
96
 
  MakefileのTOP変数をOpenHRPのトップディレクトリを指すように変更してください。
97
 
 
98
 
3. OpenHRPのバージョン指定
99
 
  SensorStateにdqが入っているバージョンならばControllerBridge.cppの12行め、
100
 
 
101
 
    //#define OPENHRP3_HAS_VELOCITY_IN_SENSORSTATE
102
 
 
103
 
  のコメントアウトを外してください。関節速度オプションがSensorStateから参照するようになります。
104
 
 
105
 
4. Make
106
 
  makeコマンドを実行してください。
107
 
 
108
 
    $ make
109
 
 
110
 
以上です。
111
 
 
112
 
■コンポーネントプログラミング
113
 
ここでは、RTC化されたコントローラ(以下コントローラコンポーネント)の作成方法について説明します。
114
 
 
115
 
コントローラコンポーネントではセンサや関節の情報をInPortから受け取り、OutPortからアクチュエータの値を出力します。また、出力する値の計算はonExecuteメソッド中で行います。
116
 
 
117
 
開発の流れは以下のようになります。
118
 
 
119
 
1. 開発するコントローラコンポーネントが入出力する情報の種類を決定する
120
 
  まず、どのような情報を入力または出力するかを考えます。情報の種類と対応するポートのデータ形式は以下の通りです。
121
 
 
122
 
    関節/センサ入力    ... TimedDoubleSeq (InPort)
123
 
    アクチュエータ出力 ... TimedDoubleSeq (OutPort)
124
 
    カラーカメラ       ... TimedLongSeq (InPort)
125
 
    モノクロカメラ     ... TimedOctetSeq (InPort)
126
 
    デプスカメラ       ... TimedFloatSeq (InPort)
127
 
 
128
 
  関節/センサ入力およびアクチュエータ出力に関しては、ひとつの関節のマッピングも全ての関節のマッピングも同じデータ形式です。
129
 
  この対応にしたがい、コントローラコンポーネントが持つポートを決定したら、rtc-templateによってスケルトンを出力します。
130
 
 
131
 
2. 初期設定
132
 
  コントローラコンポーネントの初期設定は2箇所で行うことができます。
133
 
 
134
 
  コンポーネントクラスのコンストラクタ
135
 
    コンポーネントクラスが生成される際に実行されます。
136
 
 
137
 
  onActivatedメソッド
138
 
    シミュレーションが実行される際に実行されます。
139
 
 
140
 
  実行されるタイミングが違いますので、より適切な方に初期化処理を記述してください。
141
 
 
142
 
3. 制御アルゴリズム
143
 
  従来のcontrolメソッドに相当します。コントローラコンポーネントの制御アルゴリズムはonExecutedメソッドに記述します。
144
 
  ここで、それぞれのInPortのupdateメソッドを呼び、データを解析した出力データをOutPortにセットした後、OutPortのwriteメソッドを呼びます。
145
 
 
146
 
添付のSamplePDコンポーネントでは、
147
 
1. 入出力
148
 
  関節値の入力ポートangle
149
 
  アクチュエータトルクの出力ポートtorque
150
 
  を使用しています。
151
 
 
152
 
2. 初期設定
153
 
  コンストラクタ
154
 
    パターンファイルを開きます。
155
 
 
156
 
  onActivatedメソッド
157
 
    シーク位置を先頭にします。
158
 
    最初期データをセットします。
159
 
 
160
 
3. 制御アルゴリズム
161
 
  ポートangleから読み込んだ関節角度とそこから生成した関節角速度をパターンファイルの目標数値へPD制御をかけます。
162
 
 
163
 
というように行っています。
164
 
 
165
 
■ロード対応コンポーネント
166
 
改良コントローラブリッジでは、外部のモジュールとしてコントローラコンポーねんとをロードすることができます。
167
 
上記プログラミング方法でもダイナミックライブラリが生成されますが、初期化関数においてManager#createComponentを呼ばないため、問題が生じます。
168
 
そこで、コンポーネント起動部分である、*Comp.cppの関数MyModuleInitをコンポーネントのソースに移してコンパイルしてください。
169
 
この方法でコンパイルされたダイナミックライブラリにはManager#createComponentを呼ぶ初期化関数MyModuleInitが含まれるため、正常にロードすることができます。
170
 
 
171
 
また、コントローラブリッジが存在するディレクトリのrtc.confに以下の2行が適切に記述されていることを確認してください。
172
 
  manager.modules.load_path: (ダイナミックライブラリが存在するディレクトリ)
173
 
  manager.modules.abs_path_allowed: yes
174
 
 
175
 
■オプション
176
 
・例
177
 
example-option example1:example2
178
 
  例の説明
179
 
 
180
 
以上の説明があった場合、コマンドラインに対しては、
181
 
 
182
 
--example-option example1:example2
183
 
 
184
 
のように指定し、ファイルに対しては、
185
 
 
186
 
example-option = example1:example2
187
 
 
188
 
のように設定してください。
189
 
 
190
 
 
191
 
・ヘルプ
192
 
help
193
 
  コマンドラインのみ有効です。オプションの一覧を出力します。
194
 
 
195
 
・設定ファイル読み込み
196
 
preference-file ファイル名
197
 
  コマンドラインのみ有効です。設定ファイルを読み込みます。また、-pオプションでも等価です。
198
 
 
199
 
・コンポーネント指定
200
 
component コンポーネント名
201
 
  コントローラコンポーネントを指定します。-cオプションと等価です。
202
 
 
203
 
・OpenHRPネームサーバ設定
204
 
name-server ネームサーバホスト名:ポート
205
 
  OpenHRPのCORBAネームサーバを指定します。-nオプションと等価です。デフォルトではlocalhost:2809です。
206
 
 
207
 
・コントローラコンポーネント設定
208
 
controller コントローラ名
209
 
  OpenHRPに登録されるコントローラ名を指定します。GrxUIから見える名称です。デフォルトではControllerBridgeです。
210
 
 
211
 
・内部コンポーネント設定
212
 
bridge-component コンポーネント名
213
 
  内部コンポーネントを指定します。デフォルトではControllerBridgeCompです。
214
 
 
215
 
・接続
216
 
without-connection
217
 
  ControllerBridgeによるコントローラコンポーネントへの接続を行いません。RtcLinkを使用する際に指定してください。
218
 
 
219
 
・外部モジュールロード
220
 
module モジュール名:初期化関数名
221
 
  起動時に外部のモジュールをロードします。モジュールのライブラリファイル名とその初期化関数を:でわけて記述してください。
222
 
 
223
 
・単体入力マッピング
224
 
mapping-in ポート名:関節/センサID:プロパティ
225
 
  DynamicsSimulatorからjointIdもしくはsensorIdによって指定された関節/センサのデータを指定されたポート名のポートにマッピングします。プロパティには以下があります。
226
 
 
227
 
    JOINT_VALUE    ... 関節値
228
 
    JOINT_VELOCITY ... 関節速度
229
 
    FORCE          ... 力センサ出力
230
 
    RATE_GYRO      ... ジャイロセンサ出力
231
 
    ACCEL          ... 加速度センサ出力  
232
 
 
233
 
  例えば、ポートangleにjointId=0の関節値をマッピングするには以下のようにします。
234
 
 
235
 
    mapping-in angle:0:JOINT_VALUE
236
 
 
237
 
 
238
 
以下のマッピング設定において、ポート名はブリッジ内部コンポーネントのポートとなります。
239
 
・単体出力マッピング
240
 
mapping-out ポート名:関節ID:プロパティ
241
 
  関節IDの関節に指定されたプロパティの型のデータをセットします。プロパティには以下があります。
242
 
 
243
 
    JOINT_VALUE        ... 関節値
244
 
    JOINT_VELOCITY     ... 関節速度
245
 
    JOINT_ACCELERATION ... 関節加速度
246
 
    JOINT_TORQUE       ... 関節トルク
247
 
    EXTERNAL_FORCE     ... 力, トルク
248
 
 
249
 
  例えば、ポートtorqueをjointId=0の関節トルクとするには以下のように設定します。
250
 
 
251
 
    mapping-out torque:0:JOINT_TORQUE
252
 
 
253
 
・全関節入力マッピング
254
 
array-mapping-in  ポート名:プロパティ
255
 
  jointIdがついた全ての関節をポート名で指定されたポートに指定されたプロパティでマッピングします。プロパティには以下があります。
256
 
 
257
 
    JOINT_VALUE
258
 
    JOINT_VELOCITY
259
 
 
260
 
・全関節出力マッピング
261
 
array-mapping-out ポート名:プロパティ
262
 
  jointidがついた全ての関節に指定されたプロパティのデータを設定します。使用できるプロパティは以下の通りです。
263
 
 
264
 
    JOINT_VALUE
265
 
    JOINT_VELOCITY
266
 
    JOINT_ACCELERATION
267
 
    JOINT_TORQUE
268
 
 
269
 
・カラーカメラ
270
 
color-camera ポート名:カメラID
271
 
  カラーカメラの出力であるlongの配列をTimedLongSeqとしてマッピングします。
272
 
 
273
 
・モノクロカメラ
274
 
mono-camera ポート名:カメラID
275
 
  モノクロカメラの出力であるoctetの配列をTimedOctetSeqとしてマッピングします。
276
 
 
277
 
・デプスカメラ
278
 
depth-camera ポート名:カメラID
279
 
  デプスカメラの出力であるfloatの配列をTimedFloatSeqとしてマッピングします。
280
 
 
281
 
・ポート接続
282
 
port-connection コントローラブリッジポート名:コントローラコンポーネントポート名
283
 
  コントローラブリッジのポートとコントローラコンポーネントのポートを接続します。
284