Skip to content

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

Closed
@snozawa

Description

@snozawa

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)
するといっぱい自己干渉リストがかえってきます。

なので、

--- 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にしているのか、も表示する必要がありそうです)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions