Open knorth55 opened 1 year ago
I added test for both
dynamic reconfigureの正しいカバー範囲はどこまでかきちんと把握しないといけませんが,このPRのroseusのdynamic-reconfigure実装では
となっていそうなので報告しておきます.下のサンプルコードを実行してrosrun rqt_reconfigure rqt_reconfigureとrosparam listをそれぞれ別のターミナルでたちあげるのが再現手順です.サンプルコードに誤りがあるかもしれないのでその場合は教えてくださると助かります.
サンプルコード
#!/usr/bin/env roseus
(ros::roseus "twitter_client_warning")
(load "package://roseus/euslisp/dynamic-reconfigure-server.l")
(setq *volume* (ros::get-param "~volume" 1.0))
(setq *speak-enable* (ros::get-param "~speak_enable" t))
(setq *enable* (ros::get-param "~enable" t))
(setq *reconfigure-server*
(def-dynamic-reconfigure-server
;;; ((name type level description (default) (min) (max) (edit_method)) ... )
(("volume" double_t 0 "tweet speak volume" 1.0 0.0 1.0)
("speak_enable" bool_t 0 "tweet speak enable" t)
("enable" bool_t 0 "tweet enable" t))
;; use lamda-closure to avoid memory error
'(lambda-closure nil 0 0 (cfg level)
(let ((prev-volume *volume*)
(prev-speak-enable *speak-enable*)
(prev-enable *enable*))
(setq *volume* (cdr (assoc "volume" cfg :test #'equal)))
(setq *speak-enable* (cdr (assoc "speak_enable" cfg :test #'equal)))
(setq *enable* (cdr (assoc "enable" cfg :test #'equal)))
(if (null (equal *volume* prev-volume))
(ros::ros-warn "Volume changed to: ~A" *volume*))
(if (null (equal *enable* prev-enable))
(ros::ros-warn "Enable changed to: ~A" *enable*))
(if (null (equal *speak-enable* prev-speak-enable))
(ros::ros-warn "Speak enable changed to: ~A" *speak-enable*)))
cfg)))
(ros::rate 1.0)
(while (ros::ok)
(ros::spin-once)
(ros::sleep)
)
追記: :copy-to-parameter-server, :copy-from-parameter-serverを実装すればよい
originally written by @YoheiKakiuchi
This PR add
dyamic-reconfigure-server
inroseus
. this code is copied from https://github.com/jsk-ros-pkg/jsk-ros-pkg-unreleased/blob/master/sandbox/dynamic_reconfigure_eus/euslisp/dynamic_reconfigure_server.l and modified a little bit.cc. @Kanazawanaoaki