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

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. XML 之 命名空间详解

    最近学xml 遇到了点小问题qaq 找了n多的博客大佬,反复看了半小时终于明白了,可能我太蠢了... 基础的知识就不赘述,直接放“栗子”,切重点: <?xml version="1.0 ...

  2. 在redhat6.4上编译z3求解器

    因为项目需要,我们使用到了微软的z3求解器求约束,但是z3求解器在红帽平台上并没有发布编译好的二进制版本,而我们的运行环境是红帽的企业版6.4,因此需要自己编译相应的二进制. z3是由微软公司开发的一 ...

  3. 关于生sql中的空值

    在数据库中的空值无非就是两种形式的表示 一种是什么都没有,一种是以NuLL显示的 , 那么在C# 读取出来怎么判断呢, DtStatus.Rows[0]["FetchCode"]. ...

  4. STL编程:C++的忠告!

    Copy别人的,有少量修改,可以做为一下参考! C++之父Bjarne Stroustrup 写的 The C++ Programming Language (Special Edition) 中各章 ...

  5. sqlserver 分组 group by

    select 名称, COUNT(名称) as 数量之和from 信息group by all 名称

  6. java 常用API 包装 练习

    package com.oracel.demo01; import java.util.Random; public class Swzy { public static void main(Stri ...

  7. 对服务器磁盘、CPU、内存使用状态,设置163邮件告警

    1,桥接模式可上网,首先你的邮箱已经开通yum -y install mailx dos2unix.x86_64  mailx -V[root@localhost ~]# vim /etc/mail. ...

  8. PowerDesigner工具

    PowerDesigner是一款数据库设计与建模工具,开发人员可以在上面设计表结构,而不用一开始就创建数据库中的表,因为设计阶段数据库表结构会经常变动.设计完后可以导出创建所有表的SQL脚本,直接执行 ...

  9. 算法8-----Different Ways to Add Parentheses(不同括号结果)

    题目: Given a string of numbers and operators, return all possible results from computing all the diff ...

  10. [USACO08FEB]修路Making the Grade 动态规划

    对的\(n^3\)的程序调了一个月了,惊了... HSZ学oi\(\Longleftrightarrow\)闭眼学oi 要不是翻旧账还看不见.. 这是有\(n^2\)做法的. 参见LYD的书P244 ...