Skip to content

Ros Parameters

When designing your own component, it will often happen that you will need to load many parameter for a specific component (e.g. model parameters).

In order to simplify parameter loading, we recommend to use the following setup:

  1. Create a struct containing all your parameter information (e.g. pid_controller_params.h)
  2. Instantiate a template of the function T getConfig(const ros::NodeHandle& nh) located at ros/ros_crs_utils/include/ros_crs_utils/parameter_io.h.
    Example:

    template <>
    pid_controller_params getConfig<pid_controller_params>(const ros::NodeHandle& nh)
    {
      pid_controller_params p;
      if(!nh.getParam("K", p.K))
         ROS_WARN_STREAM("Did not load K parameter")
      // ....
      return p
    }
    
  3. Whenever you need to load the parameters, use

    #include <ros_crs_utils/parameter_io.h>
    // ...
    // Using absolute namespace
    auto params =  parameter_io::getConfig<>(ros::NodeHandle("ParameterNamespace"));
    // Using relative namespace to nodehandle nh
    auto params =  parameter_io::getConfig<>(ros::NodeHandle(nh, "ParameterNamespace"));