0
$\begingroup$

Rosanswers logo

Hi everyone i am stilll new here so please assist me.

So i have been trying to make a gui to change the modes(manual, teleoperation) of an vehicle from a control station.

I initially tried to do qt and tried to integrate into ROS, but i failed ;(.

I came across these rqt plugin, dynamic_reconfigure, which would able to do the same thing as my gui.

When i created the following files according to the tutorial: http://wiki.ros.org/dynamic_reconfigure/Tutorials.

These are the following problems/enquiry i have:

  1. In the section "How to Write Your First .cfg File" --> "Use the cfg File"

    #add dynamic reconfigure api #find_package(catkin REQUIRED dynamic_reconfigure) generate_dynamic_reconfigure_options( cfg/Tutorials.cfg #... )

    make sure configure headers are built before any node using them

    add_dependencies(example_node ${PROJECT_NAME}_gencfg)

What does the example_node refers to? should i change the example_node to the node which i want to change parameters/send signals?

For example, if i want to send commands to turtlesim_node, should i replace the example_node with turtlesim_node?

  1. When i compile after creating the files according to the tutorial, i get the following error.

     CMake Error at dynamic_tutorials/CMakeLists.txt:59 (add_dependencies):
     Cannot add target-level dependencies to non-existent target "example_node".
    
     The add_dependencies works for top-level logical targets created by the
     add_executable, add_library, or add_custom_target commands.  If you want to
     add file-level dependencies see the DEPENDS option of the add_custom_target
     and add_custom_command commands.
    
    
     -- Configuring incomplete, errors occurred!
     See also "/home/azhar/catkin_ws/build/CMakeFiles/CMakeOutput.log".
     See also "/home/azhar/catkin_ws/build/CMakeFiles/CMakeError.log".  
     make: *** [cmake_check_build_system] Error 1
     Invoking "make cmake_check_build_system" failed
    

Please refer below for my following folders and let me know if i am missing something

CMakeLists.txt

       cmake_minimum_required(VERSION 2.8.3)
       project(dynamic_tutorials)

       find_package(catkin REQUIRED COMPONENTS
        dynamic_reconfigure
        roscpp
        rospy
        )

        #add dynamic reconfigure api

        ## Generate dynamic reconfigure parameters in the 'cfg' folder
       generate_dynamic_reconfigure_options(
       cfg/Tutorials.cfg
        )

        ###################################
         ## catkin specific configuration ##
        ###################################
        catkin_package(
        INCLUDE_DIRS include
         LIBRARIES dynamic_tutorials
         CATKIN_DEPENDS dynamic_reconfigure roscpp rospy
         DEPENDS system_lib
          )

        ###########
        ## Build ##
         ###########

        include_directories(
         ${catkin_INCLUDE_DIRS}
         )

        ## Declare a C++ library
        # add_library(dynamic_tutorials
        #   src/${PROJECT_NAME}/dynamic_tutorials.cpp
        # )

        ## Add cmake target dependencies of the library
        ## as an example, code may need to be generated before libraries
        ## either from message generation or dynamic reconfigure
        #add_dependencies(dynamic_tutorials ${${PROJECT_NAME}_EXPORTED_TARGETS}                       ${catkin_EXPORTED_TARGETS})

        ## Declare a C++ executable
        # add_executable(dynamic_tutorials_node src/dynamic_tutorials_node.cpp)


       ## Add cmake target dependencies of the executable
       ## same as for the library above
       # add_dependencies(dynamic_tutorials_node ${${PROJECT_NAME}_EXPORTED_TARGETS}             ${catkin_EXPORTED_TARGETS})

       ## Specify libraries to link a library or executable target against
       # target_link_libraries(dynamic_tutorials_node
       #   ${catkin_LIBRARIES}
       ## )

       # make sure configure headers are built before any node using them
       add_dependencies(example_node ${PROJECT_NAME}_gencfg)

Tutorials.cfg

       #!/usr/bin/env python
       PACKAGE = "dynamic_tutorials"

       from dynamic_reconfigure.parameter_generator_catkin import *

       gen = ParameterGenerator()

       gen.add("int_param",    int_t,    0, "An Integer parameter", 50,  0, 100)
       gen.add("double_param", double_t, 0, "A double parameter",    .5, 0,   1)
       gen.add("str_param",    str_t,    0, "A string parameter",  "Hello World")
       gen.add("bool_param",   bool_t,   0, "A Boolean parameter",  True)

       size_enum = gen.enum([ gen.const("Small",      int_t, 0, "A small constant"),
                   gen.const("Medium",     int_t, 1, "A medium constant"),
                   gen.const("Large",      int_t, 2, "A large constant"),
                   gen.const("ExtraLarge", int_t, 3, "An extra large constant")],
                 "An enum to set size")

       gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum)

       exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials"))

Server.py

     #!/usr/bin/env python

      import rospy

      from dynamic_reconfigure.server import Server
      from dynamic_tutorials.cfg import TutorialsConfig

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

      if __name__ == "__main__":
      rospy.init_node("dynamic_tutorials", anonymous = True)

      srv = Server(TutorialsConfig, callback)
      rospy.spin()

package.xml

     <?xml version="1.0"?>
     <package>
     <name>dynamic_tutorials</name>
      <version>0.0.0</version>
      <description>The dynamic_tutorials package</description>
  
      <maintainer email="[email protected]">azhar</maintainer>

     <license>TODO</license>

    <buildtool_depend>catkin</buildtool_depend>
    <build_depend>dynamic_reconfigure</build_depend>
    <build_depend>roscpp</build_depend>
    <build_depend>rospy</build_depend>
    <run_depend>dynamic_reconfigure</run_depend>
    <run_depend>roscpp</run_depend>
    <run_depend>rospy</run_depend>

    <export>
    </export>
    </package>

Any help would be greatly appreciated. I am using ubuntu 14.04 LTS and ROS indigo . :)


Originally posted by Azhar on ROS Answers with karma: 100 on 2017-01-15

Post score: 1

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

i have solved this.

  1. example_node refers to the node, whose parameter you want to change. Ensure the name of your node and package is consistent throughout the package.

  2. latest update: https://github.com/azhar92/scooter-mode.git


Originally posted by Azhar with karma: 100 on 2017-01-21

This answer was ACCEPTED on the original site

Post score: 1

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.