euslisp / jskeus

This repository contains EusLisp software developed and used by JSK at The University of Tokyo
23 stars 55 forks source link

ik解くときに:debug-view tしても早すぎて何が起こっているかわからない #463

Open k-okada opened 6 years ago

k-okada commented 6 years ago

https://github.com/euslisp/jskeus/blob/1.1.0/irteus/irtmodel.l#L1988:additional-check というのを見つけたのですが,

       (if additional-check
           (setq success (and success (funcall additional-check))))

なので,IKが成功したときにhookがかかるみたいです.IKの毎ループでhookをかける方法があれば,知りたいです. https://github.com/euslisp/jskeus/blob/1.1.0/irteus/irtmodel.l#L2066-L2067

mmurooka commented 6 years ago

オフラインで話していましたが,以下だとできます.もっと綺麗な方法をご存じの方教えてください.

(load "package://jskeus/irteus/demo/sample-robot-model.l") ;; load installed robot
(setq *robot* (instance sample-robot :init))
(objects (list *robot*))
(send *robot* :init-pose)
(send *robot* :rarm :inverse-kinematics
      (list #'(lambda () (unix::usleep (* 100 1000)) (make-coords :pos (float-vector 1e3 0 0))))
      :debug-view :no-message
      :stop 100)
iory commented 6 years ago

僕が発見したのはmove-jointsするときに,hookを書ける方法です.

(load "package://euslisp/jskeus/irteus/demo/sample-robot-model.l") ;; load installed robot
(setq *robot* (instance sample-robot :init))
(objects (list *robot*))
(send *robot* :init-pose)
(send *robot* :rarm :inverse-kinematics
      (send (send *robot* :rarm :end-coords :copy-worldcoords) :translate #f(0 0 1000))
      :debug-view :no-message
      :stop 100
      :move-joints-hook #'(lambda () (unix:usleep 1000000))

ezgif com-video-to-gif

k-okada commented 6 years ago
            (send *pr2* :larm :inverse-kinematics (make-coords :pos #f(800 0 800))
              :rotation-axis :z :debug-view t :p-limit 10 :r-limit 0.05)

というのを @dyson8910 と見つけました. これでデフォルトの1/10です.

iory commented 6 years ago

p-limitとr-limitで1stepで移動する関節の速度を制限することで,ikのiteration回数が増えるのでdebug-viewした時にゆっくりに動いて見えるということですか.https://github.com/euslisp/jskeus/blob/master/irteus/irtmodel.l#L2516-L2550

分かりやすい真っ当な方法な気がします