Skip to content

[roseus] add dynamic-reconfigure-server#729

Open
knorth55 wants to merge 5 commits intojsk-ros-pkg:masterfrom
knorth55:dyn-server
Open

[roseus] add dynamic-reconfigure-server#729
knorth55 wants to merge 5 commits intojsk-ros-pkg:masterfrom
knorth55:dyn-server

Conversation

@knorth55
Copy link
Member

@knorth55 knorth55 commented Nov 11, 2022

originally written by @YoheiKakiuchi

This PR add dyamic-reconfigure-server in roseus.
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

@knorth55
Copy link
Member Author

I added test for both

  • dynamic_reconfigure server
  • dynamic_reconfigure client

@tkmtnt7000
Copy link
Member

tkmtnt7000 commented Nov 13, 2023

dynamic reconfigureの正しいカバー範囲はどこまでかきちんと把握しないといけませんが,このPRのroseusのdynamic-reconfigure実装では

  • rqt_reconfigureを使ってポチポチrosparamをいじることはできる
  • rosparam listしても設定したparamは表示されず,変更できない

となっていそうなので報告しておきます.下のサンプルコードを実行して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を実装すればよい

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants