前言:在节点外部改变参数的方式有:参数服务器、服务、主题以及动态参数。

1.新建cfg文件

在chapter2_tutorials包下新建cfg文件夹,在cfg文件夹下新建chapter2.cfg文件,添加如下代码:

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

from dynamic_reconfigure.parameter_generator_catkin import *

gen = ParameterGenerator()  

gen.add("int_param", int_t, 0, "int parameter", 1, 0, 10)
gen.add("double_param", double_t, 0, "double parameter", .1, 0.0, 1.0)
gen.add("bool_param", bool_t, 0, "bool parameter", True)
gen.add("str_param", str_t, 0, "string parameter", "chapter2_tutorials")

size_enum = gen.enum([ gen.const("Low",      int_t, 0, "Low is 0"),
                       gen.const("Medium",     int_t, 1, "Medium is 1"),
                       gen.const("High",      int_t, 2, "Hight is 2")],
                     "Select from the list")

gen.add("size", int_t, 0, "Select from the list", 1, 0, 3, edit_method=size_enum)

exit(gen.generate(PACKAGE, "chapter2_tutorials", "chapter2"))    

--------------------------------

其中:

gen = ParameterGenerator()  #创建一个动态参数生成器,后面就可以往该变量中添加可以动态配置的参数;
gen.add("int_param", int_t, 0, "int parameter", 1, 0, 10)  # (参数名,数据类型,回调函数掩码,参数说明,默认值,最小值,最大值);
exit(gen.generate(PACKAGE, "chapter2_tutorials", "chapter2"))    #用于生成头文件并退出程序(?,包名,头文件名称)。

吐槽:

不得不吐槽,《ROS机器人高效编程(原书第3版)》在最后一行“chapter2_”这里多了个"_",导致编译时总是找不到头文件!

2.获取权限

因为文件由ros自动执行,所以需要使用chmod命令使文件可由任何用户执行

chmod a+x cfg/chapter2.cfg

3.修改Cmakelist.txt文件

find_package(catkin REQUIRED COMPONENTS
 message_generation
 roscpp
 std_msgs
 dynamic_reconfigure)

 generate_dynamic_reconfigure_options(
   cfg/chapter2.cfg
      )

4.新建.cpp文件

在chapter2_tutorials包下新建example4.cpp文件,添加如下代码:

#include "ros/ros.h"
#include <dynamic_reconfigure/server.h>
#include <chapter2_tutorials/chapter2Config.h>

void callback(chapter2_tutorials::chapter2Config &config, uint32_t level)
{
    ROS_INFO("Reconfigure Request: %d %f %s %s %d",
        config.int_param,
        config.double_param,
        config.str_param.c_str(),
        config.bool_param?"True":"False",
        config.size);
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "examole5_dynamic_reconfigure");
    dynamic_reconfigure::Server<chapter2_tutorials::chapter2Config> server;
    dynamic_reconfigure::Server<chapter2_tutorials::chapter2Config>::CallbackType f;
    f = boost::bind(&callback, _1, _2);
    server.setCallback(f);
    ros::spin();
    ;
}

5.修改cmake文件

add_executable(example41 src/example4.cpp)
target_link_libraries(example41 ${catkin_LIBRARIES})

6.运行

roscore
rosrun chapter2_tutorials example41
rosrun rqt_reconfigure rqt_reconfigure

--------------------------------

显示如下:

当调节滑动条后,显示显示如下:

马赛克$ rosrun chapter2_tutorials example41
[ INFO] [1546338804.944767450]: Reconfigure Request: 1 0.100000 chapter2_tutorials True 1
[ INFO] [1546338822.578500410]: Reconfigure Request: 1 0.370000 chapter2_tutorials True 1
[ INFO] [1546338824.890332107]: Reconfigure Request: 2 0.370000 chapter2_tutorials True 1

-END-

ROS-动态参数的更多相关文章

  1. vue-router2.0 组件之间传参及获取动态参数

    <li v-for=" el in hotLins" > <router-link :to="{path:'details',query: {id:el ...

  2. PYTHON 函数的动态参数

    #普通参数示例 def func(args): print(args) func(123456) #执行结果为123456 如果给多个参数,就会报错 #动态参数示例 def func(*args): ...

  3. 浅谈在静态页面上使用动态参数,会造成spider多次和重复抓取的解决方案

    原因: 早期由于搜索引擎蜘蛛的不完善,蜘蛛在爬行动态的url的时候很容易由于网站程序的不合理等原因造成蜘蛛迷路死循环. 所以蜘蛛为了避免之前现象就不读取动态的url,特别是带?的url 解决方案: 1 ...

  4. 函数动态参数实现format

    变量赋值一种是字符串格式化,一种是通过format的方式 1.字符串格式化 s="i am %s,age %d"%('Jasper',23)print(s) 打印输出:i am J ...

  5. python函数动态参数详解

    Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...

  6. Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色

    上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...

  7. Java vararg(动态参数)的应用

    可变参数在JDK 1.5添加,刚才知道的. 以下来自<Java泛型和集合>一书. 将参数打包成一个数组传入方法中是一件让人讨厌的事,在jdk1.5中加入了一个新的功能称为vararg(动态 ...

  8. javaScript动态参数

    javaScript是动态语言,那么动态参数的话也是与生俱来的, 在去取javaScript得参数用的是Arguments这个属性,去取 <script type="text/java ...

  9. python(3)-函数动态参数

    先来看一段代码 def show(*arg): print(arg, type(arg)) if __name__ == "__main__": show(1) show(1,2, ...

  10. 理解ROS的参数

    记住每次操作之前都要在一个单独的终端中运行ros的核心. roscore rosparam命令允许你在ROS的参数服务器上操作和存储数据,参数服务器可以存储整数,浮点数,布尔类型,字典,列表.ROS使 ...

随机推荐

  1. 实现model中的文件上传FTP(一)

    由于在django的model中配置了filefield或者imagefield配置了upload_to参数只能将用户上传的文件上传到项目本地,就算重定向到项目外也只是直接读取文件系统,这样对未来的项 ...

  2. 洛谷P4413 [COCI2006-2007#2] R2(可持久化平衡树维护NTT)

    题意翻译 设S=(R1+R2)/2,给定R1与S (-1000<=R1,S<=1000)(−1000<=R1,S<=1000) ,求R2. 感谢@Xeonacid 提供的翻译 ...

  3. P1410 子序列

    题目描述 给定一个长度为N(N为偶数)的序列,问能否将其划分为两个长度为N/2的严格递增子序列, 输入输出格式 输入格式: 若干行,每行表示一组数据.对于每组数据,首先输入一个整数N,表示序列的长度. ...

  4. Windows Phone - 按钮/button 控件

    System.Windows.Controls.Button   button控件一.button控件的各种样式的展示可以通过 …… 来给控件定义公共的样式调用样式的方法:在Button控件上添加样式 ...

  5. py2exe打包OpenCV,找不到libiomp5md.dll

    问题:py2exe打包OpenCV,找不到libiomp5md.dll 解决方法:把 libiomp5md.dll 从numpy/core/ 里面复制到 python27/DLLS/文件夹!!!

  6. css3 y轴翻转效果

    这个小例子是hover的时候可一看到div沿着y轴转动一圈 思路:css写好动画transiton: all 1s; hover的时候给他一个状态transform:rotateY(180deg); ...

  7. Find Bugs

    为什么没有早点知道有这么好用的插件呢?

  8. 系统A一定会按照自我的样子改造世界

    A一定会按照自己的样子去构建系统A1,A1一定还会按照自己的样子去构建系统A1.1,A1.1一定还是会按照自我的样子去构建A1.1.1……我们编程,我们改造世界,我们的方向是被注定要朝着构建人造人的方 ...

  9. jq遍历 下拉框

    var selectA1 = $("select[name=A1]"); //从A1下拉框中 搜索值 $(selectA1).children("option" ...

  10. Illegal instruction 问题的解决方法

    写的程序在一些arm板子上可以运行, 可在一些板子上出现 Illegal instruction 这个一般是 arm指令不匹配的问题. 在编译参数中, 加上  -march=armv4t  就可以解决 ...