Menu

#40 check self-collision-check in all :inverse-kinematics methods

1.0
open
nobody
None
2013-11-01
2013-11-01
No

euslispの:inverse-kinemaitcsメソッドで、
(send robot :self-collision-check)
をデフォルトで追加して、
(and ik-solved (not collision-p))
みたいなかんじで、IKの解けたかどうかチェックのところで
self-collision-checkでコリジョンをデフォルトでチェックすると
よさそうなのですが、どうでしょうか。

ただ、ロボットモデルの形状によっては、
(send robot :self-collision-check)
で実際にはカウントしたくない自己干渉もでてきてしまう気がします。
(send (pr2) :self-collision-check)
するといっぱい自己干渉リストがかえってきます。

なので、

Index: irtmodel.l

--- irtmodel.l (リビジョン 967)
+++ irtmodel.l (作業コピー)
@@ -1792,6 +1792,7 @@
(t (make-list (length move-target) :initial-element (deg2rad 1)))))
(union-link-list)
(centroid-thre 1.0) (target-centroid-pos) (centroid-offset-func)

  • (use-self-collision-check nil)
    (dump-command t)
    &allow-other-keys)
    ;; target-coords, move-target, rotation-axis, translation-axis, link-list
    @@ -1917,7 +1918,8 @@
    ;; reset weight
    (send self :reset-joint-angle-limit-weight-old union-link-list)
    ;; check solved or not
  • (if (or success (not revert-if-fail))
  • (if (and (or success (not revert-if-fail))
  • (if use-self-collision-check (send self :self-collision-check) t))
    (send self :angle-vector)
    (progn
    (when warnp

のようにuse-self-collision-checkみたいに引数でチェックするかどうか選べるようにして、
今までのIKとの互換性のためにデフォルトでnil,
形状情報的に意図した自己干渉計算ができそうなロボットでは、
:inverse-kinematicsメソッドを上がいてデフォルトでuse-self-collision-chekをtにする、
というのはいかがでしょうか。
(IKが解けないメッセージで、普通にIkがとけないのか
自己干渉で返り血nilにしているのか、も表示する必要がありそうです)

Discussion


Log in to post a comment.

MongoDB Logo MongoDB