Menu

#56 rotational-joint の min/max-angle が変更できない

1.0
open
nobody
None
2014-02-19
2014-02-19
s-noda
No

23.irteusgl$ send robot :torso :waist-p :min-angle
-3.0
24.irteusgl$ send robot :torso :waist-p :min-angle -10
-10
25.irteusgl$ send robot :torso :waist-p :joint-angle -30
;; #<servo-joint #X84f8f98="" :waist-p=""> :joint-angle(-30) violate min-angle(-3.0)
-3.0

min-max-table をもつロボットにて、 min-angle等を変更したのちに joint-angle を変更すると min-angle が元に戻る。

テンポラリでロボットの可動域が変わるような場合(手の甲にチェッカーボードをつける等)に不便なので、 min-max-table より優先度の高いリミットが設定できるとうれしい。

(defmethod rotational-joint
(:joint-angle
(&optional v &key relative &allow-other-keys)
"(self class &optional v &key relative &allow-other-keys) ;; v and return value are joint-angle scalar ;; scalar is rotational value[deg]"
(let ()
(when v
(when (and joint-min-max-table joint-min-max-target)
(setq min-angle (send self :joint-min-max-table-min-angle)
max-angle (send self :joint-min-max-table-max-angle)))
(if relative (setq v (+ v joint-angle)))
(cond ((> v max-angle)
(unless relative (warning-message 3 ";; ~A :joint-angle(~A) violate max-angle(~A)~%" self v max-angle))
(setq v max-angle)))
(cond ((< v min-angle)
(unless relative (warning-message 3 ";; ~A :joint-angle(~A) violate min-angle(~A)~%" self v min-angle))
(setq v min-angle)))
(setq joint-angle v)
(send child-link :replace-coords default-coords)
(send child-link :rotate (deg2rad joint-angle) axis))
joint-angle))

Discussion

  • Shunichi Nozawa

    Shunichi Nozawa - 2014-02-19

    min-max-tableは(干渉計算につかうリンク形状が正しければ)
    もっとも安全なリミットになるので、それをうわがくのはよろしくないと思います。
    また、コードもきたなくなります。

    テンポラリでロボットの可動域が変わるような場合(手の甲にチェッカーボードをつける等)に不便なの

    このような状況であれば、チェッカーボードのEuslispモデルを作ってassocして、
    collision checkして、干渉している動作の解をはじくのが望ましいと思います。
    もしくはEuslispモデルを追加した上で、min-max tableを作り直すのも良いと思います。

    また、どうしてもmin-maxを上書きでやりたい場合は、:joint-angleメソッドの中で
    (when (and joint-min-max-table joint-min-max-target)
    としているので、(setq (j . joint-min-max-table) nil)とすれば、
    提案してもらったほうほうでできると思います。
    実ロボットの制御系もふくめ、関節リミットの制約は何ヶ所かではいってますが、
    ちょっとこの方法はあまりおすすめしないです。

     
  • s-noda

    s-noda - 2014-02-19

    なるほど、 joint-min-max-table を消すのは思いつきませんでした。
    min-max-table をうわがくべきでないというのも納得できます。

    ありがとうございました。

     

Log in to post a comment.