ROS : 参数服务器之动态调参(dynamic_reconfigure)

另外参考链接:

ROS动态参数配置:dynparam命令行工具的使用(示例+代码)_肥肥胖胖是太阳的博客-CSDN博客

参数服务器实现的功能:修改参数后,不需要重新编译,节点启动时生效;

动态调参实现的功能:修改参数后,不需要重新编译,无需重新启动节点;

这个一元堆栈包含dynamic_reconfigure包,它提供了一种方法,可以在任何时候更改节点参数,而无需重新启动节点。

目前,dynamic_reconfigure的重点是提供一种标准方法,将节点参数的子集公开给外部重新配置。客户机程序,例如GUIs,可以查询节点的可重构参数集,包括它们的名称、类型和范围,并向用户提供定制的接口。这对于硬件驱动程序特别有用,但具有更广泛的适用性。

源代码:

(branch: master)

git https://github.com/ros/dynamic_reconfigure.git 

第一部分:动态调参的应用

1.dynparam命令行工具

dynparam工具支持节点的命令行重新配置,以及将它们的配置加载和转储到文件中。要运行dynparam,输入:

$

rosrun dynamic_reconfigure dynparam COMMAND

当前支持的命令是:

    dynparam list : list configurable nodes
    dynparam get : get node configuration
    dynparam set : configure node
    dynparam set_from_parameters : copy configuration from parameter server
    dynparam dump : dump configuration to file
    dynparam load : load configuration from file

具体指令如下

1.罗列所有可以动态调参的节点

$

rosrun dynamic_reconfigure dynparam list

范例:

    ​firefly@firefly:~$ rosrun dynamic_reconfigure dynparam list
    /amcl
    /move_base
    /move_base/TrajectoryPlannerROS
    /move_base/global_costmap
    /move_base/global_costmap/inflation_layer
    /move_base/global_costmap/obstacle_layer
    /move_base/local_costmap
    /move_base/local_costmap/inflation_layer
    /move_base/local_costmap/obstacle_layer
    /velocity_smoother

2.获取一个可以动态调参的节点的动态参数配置

$

rosrun dynamic_reconfigure dynparam get /node

范例:
   

firefly@firefly:~$ rosrun dynamic_reconfigure dynparam get /move_base/local_costmap/inflation_layer
    {'inflate_unknown': False, 'cost_scaling_factor': 20.0, 'inflation_radius': 0.28, 'enabled': True, 'groups': {'cost_scaling_factor': 20.0, 'parent': 0, 'inflation_radius': 0.28, 'groups': {}, 'id': 0, 'name': 'Default', 'parameters': {}, 'enabled': True, 'state': True, 'inflate_unknown': False, 'type': ''}}

    firefly@firefly:~$ rosrun dynamic_reconfigure dynparam get /move_base/TrajectoryPlannerROS
    {'max_vel_theta': 1.0, 'vtheta_samples': 20, 'min_vel_x': 0.0, 'heading_lookahead': 0.325, 'restore_defaults': False, 'heading_scoring': False, 'min_vel_theta': -1.0, 'angular_sim_granularity': 0.025, 'holonomic_robot': False, 'acc_lim_x': 0.2, 'acc_lim_y': 0.0, 'heading_scoring_timestep': 0.8, 'dwa': True, 'oscillation_reset_dist': 0.1, 'escape_vel': -0.1, 'sim_time': 2.5, 'y_vels': '-0.3,-0.1,0.1,-0.3', 'simple_attractor': False, 'acc_lim_theta': 1.8, 'min_in_place_vel_theta': 0.05, 'gdist_scale': 0.3, 'groups': {'max_vel_theta': 1.0, 'simple_attractor': False, 'y_vels': '-0.3,-0.1,0.1,-0.3', 'parent': 0, 'acc_lim_theta': 1.8, 'min_in_place_vel_theta': 0.05, 'dwa': True, 'vtheta_samples': 20, 'min_vel_theta': -1.0, 'heading_lookahead': 0.325, 'gdist_scale': 0.3, 'groups': {}, 'heading_scoring': False, 'min_vel_x': 0.0, 'id': 0, 'angular_sim_granularity': 0.025, 'holonomic_robot': False, 'name': 'Default', 'parameters': {}, 'acc_lim_x': 0.2, 'acc_lim_y': 0.0, 'escape_reset_theta': 1.57079632679, 'restore_defaults': False, 'occdist_scale': 0.8, 'vx_samples': 8, 'heading_scoring_timestep': 0.8, 'state': True, 'sim_time': 2.5, 'pdist_scale': 0.8, 'max_vel_x': 0.2, 'sim_granularity': 0.025, 'type': '', 'escape_reset_dist': 0.1, 'oscillation_reset_dist': 0.1, 'escape_vel': -0.1}, 'escape_reset_theta': 1.57079632679, 'occdist_scale': 0.8, 'vx_samples': 8, 'pdist_scale': 0.8, 'max_vel_x': 0.2, 'sim_granularity': 0.025, 'escape_reset_dist': 0.1}

3.给一个节点的动态参数赋值value

    单个参数

$

rosrun dynamic_reconfigure dynparam set /node parameter_name value

 or多个参数(set node_name yaml_dictionary)

$

rosrun dynamic_reconfigure dynparam set wge100_camera "{'camera_url':'foo', 'brightness':58}"

范例:

rosrun dynamic_reconfigure dynparam set /move_base/local_costmap/inflation_layer  inflation_radius 0.01

4.从参数服务器加载数据

rosrun dynamic_reconfigure dynparam set_from_parameters /node

5.将动态参数配置存到yaml配置文件中

rosrun dynamic_reconfigure dynparam set_from_parameters /node

6.从yaml配置文件中加载配置动态参数

$

rosrun dynamic_reconfigure dynparam load /node dump.yaml

第二部分:动态参数服务的建立


2.在C++程序中应用dynamic_reconfigure

    安装dynamic_reconfigure软件包

sudo apt-get install -y ros-kinetic-dynamic-reconfigure

    在参数服务器中添加参数

    使用dynamic_reconfigure动态调节节点参数

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
给下列程序添加注释:void DWAPlannerROS::initialize( std::string name, tf2_ros::Buffer* tf, costmap_2d::Costmap2DROS* costmap_ros) { if (! isInitialized()) { ros::NodeHandle private_nh("~/" + name); g_plan_pub_ = private_nh.advertise<nav_msgs::Path>("global_plan", 1); l_plan_pub_ = private_nh.advertise<nav_msgs::Path>("local_plan", 1); tf_ = tf; costmap_ros_ = costmap_ros; costmap_ros_->getRobotPose(current_pose_); // make sure to update the costmap we'll use for this cycle costmap_2d::Costmap2D* costmap = costmap_ros_->getCostmap(); planner_util_.initialize(tf, costmap, costmap_ros_->getGlobalFrameID()); //create the actual planner that we'll use.. it'll configure itself from the parameter server dp_ = boost::shared_ptr<DWAPlanner>(new DWAPlanner(name, &planner_util_)); if( private_nh.getParam( "odom_topic", odom_topic_ )) { odom_helper_.setOdomTopic( odom_topic_ ); } initialized_ = true; // Warn about deprecated parameters -- remove this block in N-turtle nav_core::warnRenamedParameter(private_nh, "max_vel_trans", "max_trans_vel"); nav_core::warnRenamedParameter(private_nh, "min_vel_trans", "min_trans_vel"); nav_core::warnRenamedParameter(private_nh, "max_vel_theta", "max_rot_vel"); nav_core::warnRenamedParameter(private_nh, "min_vel_theta", "min_rot_vel"); nav_core::warnRenamedParameter(private_nh, "acc_lim_trans", "acc_limit_trans"); nav_core::warnRenamedParameter(private_nh, "theta_stopped_vel", "rot_stopped_vel"); dsrv_ = new dynamic_reconfigure::Server<DWAPlannerConfig>(private_nh); dynamic_reconfigure::Server<DWAPlannerConfig>::CallbackType cb = boost::bind(&DWAPlannerROS::reconfigureCB, this, _1, 2); dsrv->setCallback(cb); } else{ ROS_WARN("This planner has already been initialized, doing nothing."); } }
06-12
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值