hrpsys環境におけるHIROのシミュレータと実機との関節角度列の違いについて

184 views
Skip to first unread message

弓場寛之

unread,
May 29, 2014, 6:57:57 AM5/29/14
to rtm-ros-...@googlegroups.com
弓場と申します。
現在、hironx_ros_bridgeを用いてhrpsys環境でHIROを操作しております。(このとき、MoveIt!は使用していません)
これについて、シミュレータと実機との両方を操作した結果、両者間に以下のような違いが見られました。


まずHIROのシミュレータを起動し、getJointAngles()メソッドを使用すると、HIROの関節角度列を取得することが出来ます。その要素数は24個でした。
続いて実機のHIROを起動し、同じくgetJointAngles()メソッドを使用すると、同様に関節角度列が取得できますが、その要素数は15個に減っていました。
これについて調べましたところ、シミュレータ側には指元、指先の角度列のデータが揃っているのに対し、実機側にはそのデータが揃っていない分、個数が減ってしまっていることが分かりました。(現在のところは、実機側で指に命令を伝達するには、hiro.sc_svc.setJointAngles()メソッドを使用すればよいことが分かりましたので、そちらを使用して動かしております)


実機とシミュレータは、ともにhironx_client.pyを使って起動しているものと解釈をしておりますが、まずこの解釈は正しいのでしょうか。
また、これが正しい場合、共通のプログラムを使用しているにも関わらず、どういった経緯により角度列の個数にずれが生じてしまうのでしょうか。


以上、ご教示頂けますと幸いです。
よろしくお願いします。

Kei Okada

unread,
May 29, 2014, 12:01:01 PM5/29/14
to rtm-ros-robotics
これは,ロボットモデルの違いによります.
実機のロボットモデル(正確にはロボットモデルがModeLoaderに呼び込まれて,この情報をCORBA経由でクライアントソフトウェアが利用する)はロボット実機の体内にあるモデルファイルを用いており,それは,15自由度になっていると
おもいます.一方,HIROシミュレータは
https://raw.githubusercontent.com/start-jsk/rtmros_hironx/groovy-devel/hironx_ros_bridge/models/kawada-hironx.dae
のモデルファイルをもちいており,そこでは24自由度になっているとおもいます.
もし実機に合わせたければ,例えば,
https://github.com/start-jsk/rtmros_hironx/blob/groovy-devel/hironx_ros_bridge/launch/hironx_ros_bridge_simulation.launch#L4
みたいなところで,実機のモデルにすると同じになります.

また,シミュレータも15自由度にしてリリースすべきと思われるのであれば,
https://github.com/start-jsk/rtmros_hironx/issues?direction=desc&sort=updated&state=open
にリクエストをお送るのがいいとおもいます(日本語で良いと思います)

シミュレーターで24自由度になっているのは,たとえばgrasp plannignをするようなことを考えると
モデルにグリッパが必要,という理由になります.
一方実機では,グリッパは将来的に変更されるかもしれない,あるいは,グリッパは他の関節とは
別のサーボモータを使っている,という理由で15自由度になっています.

説明に不足があればまたご連絡下さい.
> --
> このメールは Google グループのグループ「rtm-ros-robotics」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> rtm-ros-roboti...@googlegroups.com にメールを送信してください。
> このグループに投稿するには rtm-ros-...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/rtm-ros-robotics からこのグループにアクセスしてください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

弓場寛之

unread,
May 30, 2014, 5:39:12 AM5/30/14
to rtm-ros-...@googlegroups.com
Kei Okada さん


返信ありがとうございます。
要因がモデルファイルの違いであること、及び実機の手先の自由度が減らしてある理由が分かりました。


もう1つ質問をさせてください。
ご教示頂きました方法によりますと、シミュレータの自由度を24から15に変更することが可能とのことですが、逆に実機の自由度を15から24に増やすことは可能でしょうか。現在私たちは前述の方法により実機の指に命令を伝達しておりますが、hiro_client.pyを用いつつ実機の自由度を24自由度に増やす方法があれば、ご教示頂けますと幸いです。


よろしくお願いします。

Kei Okada

unread,
May 31, 2014, 4:22:39 AM5/31/14
to rtm-ros-...@googlegroups.com
そちらはむつかしいです。
というのも実機のモデルファイルが15自由度になっており、これは実ロボットの制御プログラムがこれに依存しているからです。

>現在私たちは前述の方法により実機の指に命令を伝達しておりますが、

の部分について少し教えてもらいたいのですが、具体的にどいいうコードになっているでしょうか?

体はsetJointAngles, ハンドはsetHandJointAngldsみたいにして送っているとおもったのですが、ハンドも含めてsetJointAnglesでプログラムを書いており、そのプログラムを直接実機でも使いたいというようなことでしょうか?

実際に書いているコードの一部を送ってもらえると良い方法があるかわかる気がします。

2014年5月30日金曜日、弓場寛之<hiroyu...@gmail.com>さんは書きました:

弓場寛之

unread,
Jun 2, 2014, 7:46:07 AM6/2/14
to rtm-ros-...@googlegroups.com
>体は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番目の要素の値を変えてシミュレータに渡したことがあるのですが、一見したところロボットの姿勢に変化が見られません。

質問ばかりで恐縮ですが、お答え頂けますと幸いです。

Isaac Isao Saito

unread,
Aug 11, 2014, 11:00:21 PM8/11/14
to rtm-ros-...@googlegroups.com
> また,シミュレータも15自由度にしてリリースすべきと思われるのであれば,
> https://github.com/start-jsk/rtmros_hironx/issues?direction=desc&sort=updated&state=open
> にリクエストをお送るのがいいとおもいます(日本語で良いと思います)

間が空きましたが,この件チケットを開いておきました.
これに関してご意見あればチケットの中でお願いします.
https://github.com/start-jsk/rtmros_hironx/issues/213

--
!Happy opensource robotics!

Isaac I.Y. Saito (齋藤功)
Co-founder, Software Engineer
TORK (Tokyo Opensource Robotics Kyokai Association, 東京オープンソースロボティクス協会)
http://opensource-robotics.tokyo.jp

Kei Okada

unread,
Dec 19, 2014, 6:31:42 AM12/19/14
to rtm-ros-...@googlegroups.com
弓場様


でこのスレッドに戻ってきました.

遅くなりました.確かに0番目はどこも指していないですね.
15(全身)+4(指の自由度)x2で23個,というのが全体の角度ですね.
これは配っているcolladaファイルの間違いですね.

ところで,このcolladaファイルを直して15自由度などに変更したらどのぐらい副作用(悪影響)ありますでしょうか?

> ところで、本題とは別にもう一つ質問をさせてください。
> シミュレータの角度列の個数は24個ですが、0番目の要素の値はどこの角度を表しているのでしょうか。過去に何度か0番目の要素の値を変えてシミュレータに> 渡したことがあるのですが、一見したところロボットの姿勢に変化が見られません。

2014年6月2日月曜日 20時46分07秒 UTC+9 弓場寛之:

弓場寛之

unread,
Mar 24, 2015, 11:15:55 PM3/24/15
to rtm-ros-...@googlegroups.com
Kei Okada 様


返信が遅くなってしまい、すみませんでした。
ご質問を頂きましたcolladaファイルの自由度の変更についてですが、VRMLファイルではなく、colladaファイルということでよろしいのでしょうか。

結論から申し上げますと、現在の環境においてcolladaファイルを変更することによる副作用は分かっておりません。
VRMLファイルであれば、自由度を落とすことにより、2014年6月2日時に投稿させて頂きました関数が動作しなくなるという悪影響が出ることが予想されるのですが。

こちらからの質問ばかりで恐縮ではございますが、VRMLではなくcolladaを変更するとしたOkada様のご質問の意図を教えて頂けますでしょうか。


2014年12月19日金曜日 20時31分42秒 UTC+9 Kei Okada:

Kei Okada

unread,
Mar 28, 2015, 5:27:09 AM3/28/15
to rtm-ros-robotics
岡田です.

はい.VRMLは15自由度なので,COLLADAもそれに合わせて15自由度に変更するという案です.
例えばgetJointAnglesOfGroup('larm')などという関数を使ってれば同じ6自由度が帰ってくるので問題
ないですが,vhiro.getJointAngles()はいままで24自由度だったものが15自由度になります.

したにかいてあしたにかいてあるsyncのような関数は変更がひつようです.ただ実機とシミュレータで
同じプログラムに成る,ということでも有ります.

--
 Kei Okada


--
You received this message because you are subscribed to the Google Groups "rtm-ros-robotics" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtm-ros-roboti...@googlegroups.com.
To post to this group, send email to rtm-ros-...@googlegroups.com.
Visit this group at http://groups.google.com/group/rtm-ros-robotics.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages