euslisp / jskeus

This repository contains EusLisp software developed and used by JSK at The University of Tokyo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

fulbody-inverse-kinematicsでmove-targetがルートリンクにassocされているとエラー

mmurooka opened this issue · comments

:fullbody-inverse-kinematics
でmove-targetがルートリンクにassocされているとセグフォります.

再現コード https://gist.github.com/mmurooka/9a3a28667777de87c5eeabffe73f0fed
@snozawa さんに見て頂いて,
with-append-root-joint https://github.com/euslisp/jskeus/blob/master/irteus/irtmodel.l#L3012
がいけなさそうというところまでわかりました.

(defmacro with-append-root-joint (params &rest bodies)
  (with-gensyms
   (robot link-list vlink rlink joint-args)
   `(progn
      (let ((,robot ,(cadr params))
            (,link-list
             (if (every #'listp ,(caddr  params))
                 ,(caddr  params)
               (list ,(caddr  params))))
            (,joint-args ,(cadr (member :joint-args params))))
        (let ((,vlink (instance bodyset-link :init (make-cascoords)
                                :bodies (list (make-cube 150 10 400))
                                :name 'virtual-link
                                :weight 0 :centroid (float-vector 0 0 0)
                                :inertia-tensor (make-matrix 3 3)))
              (,rlink (car (send ,robot :links))))
          (send-message ,rlink bodyset-link :add-joint
                        (instance* ,(or (cadr (member :joint-class params)) 6dof-joint) :init
                                   :child-link ,robot
                                   :parent-link ,vlink
                                   ,joint-args))
          (send ,rlink :add-parent-link ,vlink)
          (send ,vlink :add-child-links ,rlink)
          (unwind-protect
              (let ((,(car params) (mapcar #'(lambda (l)
                                               (cons ,rlink l))
                                           ,link-list)))
                ,@bodies)
            (send ,rlink :del-joint)
            (send ,rlink :del-parent-link)
            (send ,vlink :del-child-link ,rlink)))))))

ちょっと直し方考えますが、上記を試してみてください。

testはセグフォでした.

13.irteusgl$ test
Call Stack (max depth: 20):
  0: at :cog-gain
  1: at :cog-gain
  2: at :cog-gain
  3: at :cog-gain
  4: at :cog-gain
  5: at :cog-gain
Segmentation fault (コアダンプ)

test2の結果

12.irteusgl$ test2
(nil
 ("LLEG_LINK1" "LLEG_LINK2" "LLEG_LINK3" "LLEG_LINK4" "LLEG_LINK5" "LLEG_LINK6")
 ("RLEG_LINK1" "RLEG_LINK2" "RLEG_LINK3" "RLEG_LINK4" "RLEG_LINK5" "RLEG_LINK6"))
((#<bodyset-link #X619df90 WAIST_LINK0  0.234 0.146 668.15 / 0.0 -0.001 -0.0>)
 (#<bodyset-link #X619df90 WAIST_LINK0  0.234 0.146 668.15 / 0.0 -0.001 -0.0>
  #<bodyset-link #X63a1000 LLEG_LINK1  0.216 90.146 668.128 / 0.0 -0.001 -0.0>
  #<bodyset-link #X63a5d10 LLEG_LINK2  0.216 90.146 668.128 / 0.0 -0.379 -0.0>
  #<bodyset-link #X6399d78 LLEG_LINK3  131.164 90.066 339.777 / 9.762e-05 -0.379 -0.0>
  #<bodyset-link #X638d4a0 LLEG_LINK4  131.164 90.066 339.777 / -0.0 0.453 -0.0>
  #<bodyset-link #X635c2b0 LLEG_LINK5  -0.018 90.0 69.978 / -2.712e-20 5.551e-17 -0.0>
  #<bodyset-link #X633fbe8 LLEG_LINK6  -0.018 90.0 69.978 / -2.712e-20 5.551e-17 -5.421e-20>)
 (#<bodyset-link #X619df90 WAIST_LINK0  0.234 0.146 668.15 / 0.0 -0.001 -0.0>
  #<bodyset-link #X61606e8 RLEG_LINK1  0.251 -89.854 668.172 / 0.0 -0.001 -0.0>
  #<bodyset-link #X6161990 RLEG_LINK2  0.251 -89.854 668.172 / 0.0 -0.379 -0.0>
  #<bodyset-link #X6162f68 RLEG_LINK3  131.199 -89.934 339.821 / 9.762e-05 -0.379 -0.0>
  #<bodyset-link #X63c23d8 RLEG_LINK4  131.199 -89.934 339.821 / -0.0 0.453 -0.0>
  #<bodyset-link #X63ba298 RLEG_LINK5  0.018 -90.0 70.022 / -2.712e-20 5.551e-17 -0.0>
  #<bodyset-link #X63bac28 RLEG_LINK6  0.018 -90.0 70.022 / -2.712e-20 5.551e-17 -5.421e-20>))
nil

コンパイルされている中で使われているマクロは,
再定義しても反映されていないのではないかということで,
(load "package://jskeus/irteus/irtrobot.l")
してから(test)を呼んだらできました.ありがとうございます.

closed via #446