void Pid::setGains(const Gains &gains)
{
  gains_buffer_.writeFromNonRT(gains);

  // Update dynamic reconfigure with the new gains
  updateDynamicReconfig(gains);
}
void Pid::updateDynamicReconfig()
{
  // Make sure dynamic reconfigure is initialized
  if(!dynamic_reconfig_initialized_)
    return;

  // Get starting values 
  control_toolbox::ParametersConfig config;

  // Get starting values   
  getGains(config.p_gain, config.i_gain, config.d_gain, config.i_clamp_max, config.i_clamp_min);

  updateDynamicReconfig(config);
}
void Pid::initDynamicReconfig(ros::NodeHandle &node)
{
  ROS_DEBUG_STREAM_NAMED("pid","Initializing dynamic reconfigure in namespace " 
    << node.getNamespace());

  // Start dynamic reconfigure server
  param_reconfig_server_.reset(new DynamicReconfigServer(param_reconfig_mutex_, node));
  dynamic_reconfig_initialized_ = true;
 
  // Set Dynamic Reconfigure's gains to Pid's values
  updateDynamicReconfig();

  // Set callback
  param_reconfig_callback_ = boost::bind(&Pid::dynamicReconfigCallback, this, _1, _2);
  param_reconfig_server_->setCallback(param_reconfig_callback_); 
}
void Pid::updateDynamicReconfig(Gains gains_config)
{
  // Make sure dynamic reconfigure is initialized
  if(!dynamic_reconfig_initialized_)
    return;

  control_toolbox::ParametersConfig config;

  // Convert to dynamic reconfigure format
  config.p_gain = gains_config.p_gain_;
  config.i_gain = gains_config.i_gain_;
  config.d_gain = gains_config.d_gain_;
  config.i_clamp_max = gains_config.i_max_;
  config.i_clamp_min = gains_config.i_min_;

  updateDynamicReconfig(config);
}
/**
 * @brief AdmittanceParamManager::setAdmittanceParams
 * Sends changes of the admittance parameters to the controller.
 * @param active
 * @param inertia
 * @param damping
 * @param stiffness
 * @param dead_zone
 */
void AdmittanceParamManager::setParams(compliant_ros_controller::AdmittanceParamsConfig &config) {
    controller_->activate(config.active);
    controller_->setInertia(config.inertia);
    controller_->setDamping(config.damping);
    controller_->setStiffness(config.stiffness);
    controller_->setTransDeadZone(config.dead_zone_trans);
    controller_->setRotDeadZone(config.dead_zone_rot);
    controller_->setMode(config.mode);
    controller_->setTransSpeedLimit(config.speed_limit_trans);
    controller_->setRotSpeedLimit(config.speed_limit_rot);

    if (config.active) {
        ROS_INFO_STREAM("Admittance params changed to: Active with "
                        << config.inertia << ", " << config.damping << ", " << config.stiffness
                        << ". Dead Zone: " << config.dead_zone_trans << " | " << config.dead_zone_rot
                        << ", Speed Limit: " << config.speed_limit_trans << " | " << config.speed_limit_rot
                        << " Mode: " << config.mode << ".");
    } else {
        ROS_INFO_STREAM("Admittance params changed to: Not active");
    }
    updateDynamicReconfig(config);
}