(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

nodeのためのDynamic Reconfigureを設定する (python)

Description: pythonでどのように、動的再設定可能なnodeを作るかを学びます。

Tutorial Level: INTERMEDIATE

Next Tutorial: Using the Dynamic Reconfigure Python Client

  Show EOL distros: 

コード

すでに、前回のチュートリアルで、cfgファイルを作成しているので、さっそく取り掛かりましょう。dynamic_tutorialsのパッケージに戻り、新しくnodesと呼ばれるディレクトリとsrcと呼ばれるディレクトリ、nodesの中にserver.pyと呼ばれるファイルを作成し、server.pyに以下のコードを貼り付けてください。:

   1 #!/usr/bin/env python
   2 
   3 PACKAGE = 'dynamic_tutorials'
   4 import roslib;roslib.load_manifest(PACKAGE)
   5 import rospy
   6 
   7 from dynamic_reconfigure.server import Server
   8 from dynamic_tutorials.cfg import TutorialsConfig
   9 
  10 def callback(config, level):
  11     rospy.loginfo("""Reconfiugre Request: {int_param}, {double_param},\ 
  12           {str_param}, {bool_param}, {size}""".format(**config))
  13     return config
  14 
  15 if __name__ == "__main__":
  16     rospy.init_node("dynamic_tutorials", anonymous = True)
  17 
  18     srv = Server(TutorialsConfig, callback)
  19     rospy.spin()

コード解説

詳しくserver.pyをみていきましょう.:

   1 #!/usr/bin/env python
   2 
   3 PACKAGE = 'dynamic_tutorials'
   4 import roslib;roslib.load_manifest(PACKAGE)
   5 import rospy
   6 
   7 from dynamic_reconfigure.server import Server
   8 from dynamic_tutorials.cfg import TutorialsConfig

これらの最初のいくらかの行は、単純にROSの準備と、configのタイプと一緒にdynamic_reconfigureをインポートしているだけです。

   1 def callback(config, level):
   2     rospy.loginfo("""Reconfiugre Request: {int_param}, {double_param},\ 
   3           {str_param}, {bool_param}, {size}""".format(**config))
   4     return config

ここで、設定が更新されたときに呼び出されるコールバックを定義します。今回のチュートリアルでは、単に更新された設定を表示するだけとなります。

   1 if __name__ == "__main__":
   2     rospy.init_node("dynamic_tutorials", anonymous = True)
   3 
   4     srv = Server(TutorialsConfig, callback)
   5     rospy.spin()

最後に、nodeを初期化、サーバを構築し、configのタイプとコールバック関数を渡し、nodeをspinしています。

実行

まず、nodeを実行可能にしなくてはなりません。:

chmod +x nodes/server.py

nodeをrosrunして、reconfigure_guiをlaunchします。 以下を使用してください:

rosrun dynamic_reconfigure reconfigure_gui

以下のようなポップアップが見れると思います。 Screenshot-Reconfigure.png これで終わりです!。初めての動的再設定可能なnodeを作れました。

Contents

  1. コード
  2. 実行

コード

すでに、前回のチュートリアルで、cfgファイルを作成しているので、さっそく取り掛かりましょう。dynamic_tutorialsのパッケージに戻り、新しくnodesと呼ばれるディレクトリとsrcと呼ばれるディレクトリ、nodesの中にserver.pyと呼ばれるファイルを作成し、server.pyに以下のコードを貼り付けてください。:

   1 #!/usr/bin/env python
   2 
   3 import rospy
   4 
   5 from dynamic_reconfigure.server import Server
   6 from dynamic_tutorials.cfg import TutorialsConfig
   7 
   8 def callback(config, level):
   9     rospy.loginfo("""Reconfiugre Request: {int_param}, {double_param},\ 
  10           {str_param}, {bool_param}, {size}""".format(**config))
  11     return config
  12 
  13 if __name__ == "__main__":
  14     rospy.init_node("dynamic_tutorials", anonymous = True)
  15 
  16     srv = Server(TutorialsConfig, callback)
  17     rospy.spin()

=コード解説 = 詳しくserver.pyをみていきましょう.:

   1 #!/usr/bin/env python
   2 
   3 import rospy
   4 
   5 from dynamic_reconfigure.server import Server
   6 from dynamic_tutorials.cfg import TutorialsConfig

これらの最初のいくらかの行は、単純にROSの準備と、configのタイプと一緒にdynamic_reconfigureをインポートしているだけです。

   1 def callback(config, level):
   2     rospy.loginfo("""Reconfiugre Request: {int_param}, {double_param},\ 
   3           {str_param}, {bool_param}, {size}""".format(**config))
   4     return config

ここで、設定が更新されたときに呼び出されるコールバックを定義します。今回のチュートリアルでは、単に更新された設定を表示するだけとなります。

   1 if __name__ == "__main__":
   2     rospy.init_node("dynamic_tutorials", anonymous = True)
   3 
   4     srv = Server(TutorialsConfig, callback)
   5     rospy.spin()

最後に、nodeを初期化、サーバを構築し、configのタイプとコールバック関数を渡し、nodeをspinしています。

実行

まず、nodeを実行可能にしなくてはなりません。:

chmod +x nodes/server.py

nodeをrosrunして、reconfigure_guiをlaunchします。 以下のように:

rosrun rqt_gui rqt_gui -s reconfigure

以下のようなポップアップが見れると思います。 Screenshot-Reconfigure.png

これで終わりです!。初めての動的再設定可能なnodeを作れました。

Wiki: ja/dynamic_reconfigure/Tutorials/SettingUpDynamicReconfigureForANode(python) (last edited 2013-03-14 14:51:27 by Yuto Inagaki)