Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[roseus] add dynamic-reconfigure-server #729

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

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