差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| articles:nextage_rtm [2021/08/26 16:17] – Takashi Suehiro | articles:nextage_rtm [2021/09/22 11:16] (現在) – [init1] Takashi Suehiro | ||
|---|---|---|---|
| 行 36: | 行 36: | ||
| いずれにしてもnextage_ros_brigeに関するまとまった情報がないので,ソースコードおよび利用手順を追いかけて | いずれにしてもnextage_ros_brigeに関するまとまった情報がないので,ソースコードおよび利用手順を追いかけて | ||
| 解析していく必要がある. | 解析していく必要がある. | ||
| + | |||
| + | ==== プログラムの構造上の問題点 ==== | ||
| + | |||
| + | 基本的な継承関係は以下のようになっている((HrpsysCofgigurator2は省略)). | ||
| + | * HrpsysCofgigurator (hrpsys_config.py) | ||
| + | * HIRONX(HrpsysCofgigurator) (hiro_client.py) | ||
| + | * NextageClient(HIRONX) (nextage_clinet.py) | ||
| + | |||
| + | クラスとしてはHrpsysCofgiguratorがスーパークラスでその下がサブクラスである. | ||
| + | |||
| + | 問題は,HrpsysCofgiguratorがヒューマノイドロボットを含む多数のロボットの機能(メソッド)をいろいろ含んでいて, | ||
| + | サブクラスではそのサブセットの機能を使う構造になっているという点である. | ||
| + | |||
| + | **サブクラスなのだから機能もそのサブセットで良いと思ったとしたら大間違い.オブジェクト指向を理解していないと言える. | ||
| + | ((スーパークラスはサブクラスの「汎化」であって,その機能はサブクラスの機能の共通部分を抽象化したものになっていなくてはならない.)) | ||
| + | ** | ||
| + | |||
| + | そのためプログラムを追うことがとても難しくなっている.下から順に上に追っていくに従って, | ||
| + | どれを読まなくても良いのかよくわからない状態で読まなくても良い他のロボット用のプログラムを読まされることになる. | ||
| + | |||
| + | とても困ったものである. | ||
| ==== nextage.py ==== | ==== nextage.py ==== | ||
| 行 130: | 行 151: | ||
| データの部分書き換えなどの整合性をとっている. | データの部分書き換えなどの整合性をとっている. | ||
| - | __init__関数ではgazeboシミュレータの利用をチェックしている.gazeboを使わない場合はHIRONXの__init__を呼び出す. | + | %%__init__関数%%ではgazeboシミュレータの利用をチェックしている.gazeboを使わない場合はHIRONXの%%__init__%%を呼び出す. |
| gazeboを使う方の処理は今回は無視する. | gazeboを使う方の処理は今回は無視する. | ||
| 行 553: | 行 574: | ||
| - 種々の動作制御 | - 種々の動作制御 | ||
| を行っている. | を行っている. | ||
| + | |||
| + | サブクラスから呼び出されているものおよびさらにそこから呼び出されているものをピックアップする. | ||
| + | * connectComps | ||
| + | * connectPorts -> rtm? | ||
| + | * self.getJointAngleControllerList | ||
| + | * rtm.findPort | ||
| + | * acctivateComps | ||
| + | * self.getRTCInstanceList | ||
| + | * rtm.serializeComponents | ||
| + | * deactivateComps | ||
| + | * self.getRTCInstanceList | ||
| + | * createComps | ||
| + | * createComp | ||
| + | * getRTCList -> nextage | ||
| + | * deletComps | ||
| + | * deleteComp | ||
| + | * findeComps | ||
| + | * findComp | ||
| + | * connectLoggerPort | ||
| + | * setupLogger | ||
| + | * goActual | ||
| + | * setJointAngle | ||
| + | * setJointAngles | ||
| + | * setJointAnglesOfGroup | ||
| + | * setJointAnglesSequence | ||
| + | * setJointAnglesSequenceOfGroup | ||
| + | * waitInterpolation | ||
| + | * waitInterpolationOfGroup | ||
| + | * setInterpolationMode | ||
| + | * getJointAngles | ||
| + | * getCurrentPose | ||
| + | * getCurrentPosition | ||
| + | * getCurrentRotation | ||
| + | * getCurrentRPY | ||
| + | * getReferencePose | ||
| + | * getReferencePosition | ||
| + | * getReferenceRotation | ||
| + | * getReferenceRPY | ||
| + | * setTargetPose | ||
| + | * setTargetPoseRelative | ||
| + | * clear | ||
| + | * clearOfGroup | ||
| + | * saveLog | ||
| + | * clearLog | ||
| + | * setMaxLogLength | ||
| + | * getActualState | ||
| + | * flat2Groups | ||
| + | |||
| + | 上書きされているもの | ||
| + | * init | ||
| + | * getRTCList | ||
| + | * setSelfGroups | ||
| + | * isCalibDone | ||
| + | * isServoOn | ||
| + | * servoOn | ||
| + | * servoOff | ||
| + | * checkEncoders | ||
| + | |||
| 明示的な初期化処理として以下を行っている.ただしこのinitはHIRONXで上書きされているため呼び出されることはない. | 明示的な初期化処理として以下を行っている.ただしこのinitはHIRONXで上書きされているため呼び出されることはない. | ||
| 行 604: | 行 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に必要な情報 ===== | ||
| 行 925: | 行 1067: | ||
| self.log.start(self.log.owned_ecs[0]) | self.log.start(self.log.owned_ecs[0]) | ||
| </ | </ | ||
| + | ==== キャリブレーション ==== | ||
| + | キャリブレションの実施確認 | ||
| + | |||
| + | hiro_handle: | ||
| + | |||
| + | nextage: | ||
| + | |||
| + | |||
| + | ==== 動作 ==== | ||
| + | |||