>体はsetJointAngles, ハンドはsetHandJointAngldsみたいにして送っているとおもったのですが、
本質的にはその通りです。現在私たちは、体を動かすときにはhiro_client.pyの中にあるsetJointAngles()を、指を動かすときにはServoControllerService_idl.pyの中にあるsetJointAngles()を使っております。ソースでは、シミュレータで姿勢を作った後、そこから体と指の角度列を取得し、
体:hiro.setJointAngles(体の関節角度列 , 動作時間)
指:hiro.sc_svc.setJointAngles(指の関節角度列 , 動作時間)
という2つの関数に引き渡すという処理を一括して行う関数を別途記述し、そちらを使用しております。ご指摘の通り、体と指とで別の関数を用いて姿勢を作っているということになります。
(ただ、setHandJointAnglesは、理由は分かりませんが上手く機能しなかったため、上記のメソッドを用いているという状況です。)
実際のコードは以下のように、シミュレータ内の角度列を、while文を用いてインデックスに応じて分けるという内容になっています。
(コード中のvhiroはシミュレータ内のHIROのオブジェクト名を、hiroは実機をそれぞれ表します)
def sync(tm=4):
hand_angs = []
body_angs = []
index = 1
while index <= 23:
if index <= 9:
body_angs.append(vhiro.getJointAngles()[index])
elif 10 <= index and index <= 13:
hand_angs.append(vhiro.getJointAngles()[index])
elif 14 <= index and index <= 19:
body_angs.append(vhiro.getJointAngles()[index])
elif 20 <= index and index <= 23:
hand_angs.append(vhiro.getJointAngles()[index])
index += 1
hiro.sc_svc.setJointAngles(hand_angs, 1)
hiro.setJointAngles(body_angs, tm)
ところで、本題とは別にもう一つ質問をさせてください。
シミュレータの角度列の個数は24個ですが、0番目の要素の値はどこの角度を表しているのでしょうか。過去に何度か0番目の要素の値を変えてシミュレータに渡したことがあるのですが、一見したところロボットの姿勢に変化が見られません。
質問ばかりで恐縮ですが、お答え頂けますと幸いです。