差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| articles:nextage_rtm [2021/08/30 12:14] – [プログラムの構造上の問題点] Takashi Suehiro | articles:nextage_rtm [2021/09/22 11:16] (現在) – [init1] Takashi Suehiro | ||
|---|---|---|---|
| 行 46: | 行 46: | ||
| クラスとしてはHrpsysCofgiguratorがスーパークラスでその下がサブクラスである. | クラスとしてはHrpsysCofgiguratorがスーパークラスでその下がサブクラスである. | ||
| - | 問題は,HrpsysCofgiguratorがヒューマノイドロボットを含む多数のロボットの機能をいろいろ含んでいて, | + | 問題は,HrpsysCofgiguratorがヒューマノイドロボットを含む多数のロボットの機能(メソッド)をいろいろ含んでいて, |
| - | サブクラスではそのサブセットの機能(メッソッド)を使う構造になっているという点である. | + | サブクラスではそのサブセットの機能を使う構造になっているという点である. |
| - | **サブクラスなのだからそのサブセットで良いと思ったとしたら大間違い.オブジェクト指向を理解していないと言える. | + | **サブクラスなのだから機能もそのサブセットで良いと思ったとしたら大間違い.オブジェクト指向を理解していないと言える. |
| + | ((スーパークラスはサブクラスの「汎化」であって,その機能はサブクラスの機能の共通部分を抽象化したものになっていなくてはならない.)) | ||
| ** | ** | ||
| - | |||
| - | スーパークラスはサブクラスの「汎化」であって,その機能はサブクラスの機能の共通部分を抽象化したものになっていなくてはならない. | ||
| そのためプログラムを追うことがとても難しくなっている.下から順に上に追っていくに従って, | そのためプログラムを追うことがとても難しくなっている.下から順に上に追っていくに従って, | ||
| 行 152: | 行 151: | ||
| データの部分書き換えなどの整合性をとっている. | データの部分書き換えなどの整合性をとっている. | ||
| - | __init__関数ではgazeboシミュレータの利用をチェックしている.gazeboを使わない場合はHIRONXの__init__を呼び出す. | + | %%__init__関数%%ではgazeboシミュレータの利用をチェックしている.gazeboを使わない場合はHIRONXの%%__init__%%を呼び出す. |
| gazeboを使う方の処理は今回は無視する. | gazeboを使う方の処理は今回は無視する. | ||
| 行 684: | 行 683: | ||
| self.configurator_name = cname | self.configurator_name = cname | ||
| </ | </ | ||
| + | === waitForRTCManager === | ||
| + | <code python> | ||
| + | def waitForRTCManager(self, | ||
| + | ''' | ||
| + | Wait for RTC manager. | ||
| + | |||
| + | @param managerhost str: name of host computer that manager is running | ||
| + | ''' | ||
| + | self.ms = None | ||
| + | while self.ms == None: | ||
| + | time.sleep(1) | ||
| + | if managerhost == " | ||
| + | managerhost = socket.gethostname() | ||
| + | self.ms = rtm.findRTCmanager(managerhost) | ||
| + | print(self.configurator_name + "wait for RTCmanager : " + str(managerhost)) | ||
| + | </ | ||
| + | === waitForRobotHardware === | ||
| + | <code python> | ||
| + | def waitForRobotHardware(self, | ||
| + | ''' | ||
| + | Wait for RobotHardware is exists and activated. | ||
| + | |||
| + | @param robotname str: name of RobotHardware component. | ||
| + | ''' | ||
| + | self.rh = None | ||
| + | timeout_count = 0 | ||
| + | # wait for simulator or RobotHardware setup which sometime takes a long time | ||
| + | while self.rh == None and timeout_count < 10: # <- time out limit | ||
| + | if timeout_count > 0: # do not sleep initial loop | ||
| + | time.sleep(1); | ||
| + | self.rh = rtm.findRTC(" | ||
| + | if not self.rh: | ||
| + | self.rh = rtm.findRTC(robotname) | ||
| + | print(self.configurator_name + "wait for %s : %s ( timeout %d < 10)" % ( robotname, self.rh, timeout_count)) | ||
| + | if self.rh and self.rh.isActive() == None: # just in case rh is not ready... | ||
| + | self.rh = None | ||
| + | timeout_count += 1 | ||
| + | if not self.rh: | ||
| + | print(self.configurator_name + "Could not find " + robotname) | ||
| + | if self.ms: | ||
| + | print(self.configurator_name + " | ||
| + | print(self.configurator_name + " | ||
| + | exit(1) | ||
| + | |||
| + | print(self.configurator_name + " | ||
| + | |||
| + | </ | ||
| + | |||
| + | === getJointAngleControllerList === | ||
| + | <code python> | ||
| + | def getJointAngleControllerList(self): | ||
| + | ''' | ||
| + | Get list of controller list that need to control joint angles | ||
| + | ''' | ||
| + | controller_list = [self.es, self.ic, self.gc, self.abc, self.st, self.co, | ||
| + | | ||
| + | return filter(lambda c: c != None, controller_list) | ||
| + | </ | ||
| + | ==== rtm ==== | ||
| + | === findRTCManager === | ||
| + | === findRTC === | ||
| + | |||
| + | |||
| ===== nextage_handleに必要な情報 ===== | ===== nextage_handleに必要な情報 ===== | ||
| 行 1005: | 行 1067: | ||
| self.log.start(self.log.owned_ecs[0]) | self.log.start(self.log.owned_ecs[0]) | ||
| </ | </ | ||
| + | ==== キャリブレーション ==== | ||
| + | キャリブレションの実施確認 | ||
| + | |||
| + | hiro_handle: | ||
| + | |||
| + | nextage: | ||
| + | |||
| + | |||
| + | ==== 動作 ==== | ||
| + | |||