Closed fkanehiro closed 9 years ago
From kei.ok...@gmail.com on August 20, 2013 22:00:22
https://code.google.com/p/rtm-ros-robotics/source/detail?spec=svn4637&r=4637 でエンバグしたんだと思います.確認してもらえると嬉しいです>notheworldさん
別海としていかがあるかな?
tmp_contollers = filter(lambda c : c != None, [self.ic, self.abc, self.st, self.co, self.el])
if self.simulation_mode :
tmp_controllers.append(self.hgc)
if len(tmp_contollers) > 0:
connectPorts(self.sh.port("qOut"), tmp_contollers[0].port("qRef"))
for i in range(len(tmp_contollers)-1):
connectPorts(tmp_contollers[i].port("q"), tmp_contollers[i+1].port("qRef"))
connectPorts(tmp_contollers[-1].port("q"), self.rh.port("qRef"))
Owner: nothewo...@gmail.com
From nothewo...@gmail.com on August 20, 2013 22:33:06
コンポーネントが一つな状況はどのようなもので再現できるでしょうか。 以下のようにgetRTCListを一個にするかんじでしょうか。 以下はSEQだけにしてみています。
def getRTCList(self):
return [
['seq', "SequencePlayer"]
# ['sh', "StateHolder"],
# ['fk', "ForwardKinematics"],
# ['tf', "TorqueFilter"],
# ['kf', "KalmanFilter"],
# ['vs', "VirtualForceSensor"],
# ['afs', "AbsoluteForceSensor"],
# ['ic', "ImpedanceController"],
# ['abc', "AutoBalancer"],
# ['st', "Stabilizer"],
# ['co', "CollisionDetector"],
# ['el', "SoftErrorLimiter"],
# ['log', "DataLogger"]
]
From nothewo...@gmail.com on August 20, 2013 23:35:26
r818 でsimulation_modeにかんするif文を、 指摘していただいたパッチをもとに修正しました。 ご確認いただけますでしょうか。
別海としていかがあるかな? こちらは、hgc, shまでふくめてしまうと、 データポートがqInだったりqRefだったり、qだったりqOutだったりして、 もう少し複雑になってしまうと思います。
あと、rtcが1というのは何RTCが一個ということでしょうか。
すくなくともcontroller関係では、 seqとshがペアになってないと正しく動かないきがします。
From kei.ok...@gmail.com on August 21, 2013 19:54:11
あと、rtcが1というのは何RTCが一個ということでしょうか。
すくなくともcontroller関係では、 seqとshがペアになってないと正しく動かないきがします。
rtcが一個というのは,tmp_controllersにはいっているもおんが一つという意味なので,seq, shはあるうえで,以下のうちのrtcが一つ(hiroの場合はecのみ)という状況です.
tmp_contollers = filter(lambda c : c != None, [self.ic, self.abc, self.st, self.co, self.el])
From kei.ok...@gmail.com on August 21, 2013 19:56:29
isaacさん,これでhiroが動くか確認お願いできますでしょうか? roscd hrpsys; make download; makeとして /hrpsys/lib/python2.7/dist-packages/hrpsys_config.py が変わっていることを確認してから,試してみて下さい.
Cc: gm130s
From nothewo...@gmail.com on August 22, 2013 19:23:52
すいません、 r819 でした。 いずれにしても、hironxにてご確認いただけますと助かります。
From gm130s on August 22, 2013 19:25:12
Hiro 上での確認,了解です.今日 (23F) か 25日になります.
From emijah.s on August 22, 2013 20:09:06
こちらでも試したいと思います。てこずりそうでしたら、そちらにお邪魔します。
From emijah.s on August 22, 2013 22:55:20
一応connectCompsを以下のように変更したら、こちらにあるHIROでRobotHardware+StateHolderという構成で起動することができました。これからSequencePlayer, ServoControllerを追加して行きます。
From emijah.s on August 22, 2013 22:57:40
関数を添付するのを忘れました。
def connectComps(self):
# connection for reference joint angles
tmp_contollers = filter(lambda c : c != None, [self.ic, self.abc, self.st, self.co, self.el])
if len(tmp_contollers) > 0:
connectPorts(self.sh.port("qOut"), tmp_contollers[0].port("qRef"))
for i in range(len(tmp_contollers)-1):
connectPorts(tmp_contollers[i].port("q"), tmp_contollers[i+1].port("qRef"))
if self.simulation_mode :
connectPorts(tmp_contollers[-1].port("q"), self.hgc.port("qIn"))
connectPorts(self.hgc.port("qOut"), self.rh.port("qRef"))
else:
connectPorts(tmp_contollers[-1].port("q"), self.rh.port("qRef"))
else:
if self.simulation_mode:
connectPorts(self.sh.port("qOut"), self.hgc.port("qIn"))
connectPorts(self.hgc.port("qOut"), self.rh.port("qRef"))
else:
raw_input("connectPorts(self.sh.port('qOut'), self.rh.port('qRef')) >")
connectPorts(self.sh.port('qOut'), self.rh.port('qRef'))
# connection for kf
if self.kf:
# currently use first acc and rate sensors for kf
s_acc=filter(lambda s : s.type == 'Acceleration', self.sensors)
if (len(s_acc)>0) and self.rh.port(s_acc[0].name) != None: # check existence of sensor ;; currently original HRP4C.xml has different naming rule of gsensor and gyrometer
connectPorts(self.rh.port(s_acc[0].name), self.kf.port('acc'))
s_rate=filter(lambda s : s.type == 'RateGyro', self.sensors)
if (len(s_rate)>0) and self.rh.port(s_rate[0].name) != None: # check existence of sensor ;; currently original HRP4C.xml has different naming rule of gsensor and gyrometer
connectPorts(self.rh.port(s_rate[0].name), self.kf.port("rate"))
connectPorts(self.seq.port("accRef"), self.kf.port("accRef"))
# connection for rh
if self.rh.port("servoState") != None and self.el:
connectPorts(self.rh.port("servoState"), self.el.port("servoStateIn"))
# connection for sh, seq, fk
if self.seq and self.sh:
connectPorts(self.seq.port("qRef"), self.sh.port("qIn"))
connectPorts(self.seq.port("basePos"), self.sh.port("basePosIn"))
connectPorts(self.seq.port("baseRpy"), self.sh.port("baseRpyIn"))
connectPorts(self.seq.port("zmpRef"), self.sh.port("zmpIn"))
connectPorts(self.sh.port("qOut"), self.seq.port("qInit"))
# connection for sh, seq, fk
if self.fk:
connectPorts(self.rh.port("q"), [self.sh.port("currentQIn"), self.fk.port("q")]) # connection for actual joint angles
connectPorts(self.sh.port("qOut"), self.fk.port("qRef"))
if self.seq:
connectPorts(self.sh.port("basePosOut"), [self.seq.port("basePosInit"), self.fk.port("basePosRef")])
connectPorts(self.sh.port("baseRpyOut"), [self.seq.port("baseRpyInit"), self.fk.port("baseRpyRef")])
else:
raw_input("connectPorts(self.rh.port('q'), self.sh.port('currentQIn")) >")
connectPorts(self.rh.port("q"), self.sh.port("currentQIn")) # connection for actual joint angles
if self.seq:
connectPorts(self.sh.port("basePosOut"), self.seq.port("basePosInit"))
connectPorts(self.sh.port("baseRpyOut"), self.seq.port("baseRpyInit"))
if self.sh and self.seq:
connectPorts(self.seq.port("qRef"), self.sh.port("qIn"))
connectPorts(self.seq.port("basePos"), self.sh.port("basePosIn"))
connectPorts(self.seq.port("baseRpy"), self.sh.port("baseRpyIn"))
connectPorts(self.seq.port("zmpRef"), self.sh.port("zmpIn"))
connectPorts(self.sh.port("qOut"), self.seq.port("qInit"))
# connection for st
if rtm.findPort(self.rh.ref, "lfsensor") and rtm.findPort(self.rh.ref, "rfsensor") and self.st:
connectPorts(self.rh.port("lfsensor"), self.st.port("forceL"))
connectPorts(self.rh.port("rfsensor"), self.st.port("forceR"))
connectPorts(self.kf.port("rpy"), self.st.port("rpy"))
connectPorts(self.abc.port("zmpRef"), self.st.port("zmpRef"))
connectPorts(self.abc.port("baseRpy"), self.st.port("baseRpyIn"))
connectPorts(self.abc.port("basePos"), self.st.port("basePosIn"))
# actual force sensors
if self.afs and self.kf:
#connectPorts(self.kf.port("rpy"), self.ic.port("rpy"))
connectPorts(self.kf.port("rpy"), self.afs.port("rpy"))
connectPorts(self.rh.port("q"), self.afs.port("qCurrent"))
for sen in filter(lambda x : x.type == "Force", self.sensors):
connectPorts(self.rh.port(sen.name), self.afs.port(sen.name))
if self.ic:
connectPorts(self.afs.port("off_"+sen.name), self.ic.port(sen.name))
# connection for ic
if self.ic:
connectPorts(self.rh.port("q"), self.ic.port("qCurrent"))
# connection for tf
if self.tf:
# connection for actual torques
if rtm.findPort(self.rh.ref, "tau") != None:
connectPorts(self.rh.port("tau"), self.tf.port("tauIn"))
connectPorts(self.rh.port("q"), self.tf.port("qCurrent"))
# connection for vs
if self.vs:
connectPorts(self.rh.port("q"), self.vs.port("qCurrent"))
connectPorts(self.tf.port("tauOut"), self.vs.port("tauIn"))
# virtual force sensors
if self.ic:
for vfp in filter(lambda x : str.find(x, 'v') >= 0 and str.find(x, 'sensor') >= 0, self.vs.ports.keys()):
connectPorts(self.vs.port(vfp), self.ic.port(vfp))
# connection for co
if self.co:
connectPorts(self.rh.port("q"), self.co.port("qCurrent"))
# connection for el
if self.el:
connectPorts(self.rh.port("q"), self.el.port("qCurrent"))
From kei.ok...@gmail.com on August 22, 2013 23:09:08
r819 で動くはずです
From nothewo...@gmail.com on August 23, 2013 01:38:18
fkなどのチェックが足りないところがあったので、 r823 で修正しました。
From kei.ok...@gmail.com on August 28, 2013 06:50:08
別解としていかがあるかな? こちらは、hgc, shまでふくめてしまうと、 データポートがqInだったりqRefだったり、qだったりqOutだったりして、 もう少し複雑になってしまうと思います。
なるほど.そうですね.これはこれでよいですね. 一方 r823 ですが, http://rtm-ros-robotics.googlecode.com/svn/trunk/rtmros_common/hrpsys_ros_bridge/launch/hrpsys_ros_bridge.launch でも RobotHardware SequencePlayer DataLogger ForwardKinematics StateHolder は全てのロボットで動くことが期待されているので対応の必要はないと思います. やるならエラーを出してもいいはず.ということで,戻しておきました.( r827 ) また, r828 で,rh,seq,sh,fk,logが無いときにエラーを表示するようにしておきました.
こちらの内容,対応すべき箇所は対応されているようですので,closeで大丈夫だと思います. @fkanehiroさん closeをお願いできますでしょうか.
From kei.ok...@gmail.com on August 21, 2013 12:58:51
以下の部分、これでOKでしょうか?だれかダブルチェックしてください。
leus@parsnip:~/ros/fuerte/rtm-ros-robotics/rtmros_common/hrpsys/scripts$ svn diff
Index: hrpsys.py
--- hrpsys.py (リビジョン 4685) +++ hrpsys.py (作業コピー) @@ -146,11 +146,15 @@ connectPorts(self.sh.port("qOut"), tmp_contollers[0].port("qRef")) for i in range(len(tmp_contollers)-1): connectPorts(tmp_contollers[i].port("q"), tmp_contollers[i+1].port("qRef"))
Original issue: http://code.google.com/p/hrpsys-base/issues/detail?id=130