ROS-动态参数
前言:在节点外部改变参数的方式有:参数服务器、服务、主题以及动态参数。
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-动态参数的更多相关文章
- vue-router2.0 组件之间传参及获取动态参数
<li v-for=" el in hotLins" > <router-link :to="{path:'details',query: {id:el ...
- PYTHON 函数的动态参数
#普通参数示例 def func(args): print(args) func(123456) #执行结果为123456 如果给多个参数,就会报错 #动态参数示例 def func(*args): ...
- 浅谈在静态页面上使用动态参数,会造成spider多次和重复抓取的解决方案
原因: 早期由于搜索引擎蜘蛛的不完善,蜘蛛在爬行动态的url的时候很容易由于网站程序的不合理等原因造成蜘蛛迷路死循环. 所以蜘蛛为了避免之前现象就不读取动态的url,特别是带?的url 解决方案: 1 ...
- 函数动态参数实现format
变量赋值一种是字符串格式化,一种是通过format的方式 1.字符串格式化 s="i am %s,age %d"%('Jasper',23)print(s) 打印输出:i am J ...
- python函数动态参数详解
Python的动态参数: 1,参数前一个"*":在函数中会把传的参数转成一个元组. def func (*args): print(args) func(123,1,2,'a') ...
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...
- Java vararg(动态参数)的应用
可变参数在JDK 1.5添加,刚才知道的. 以下来自<Java泛型和集合>一书. 将参数打包成一个数组传入方法中是一件让人讨厌的事,在jdk1.5中加入了一个新的功能称为vararg(动态 ...
- javaScript动态参数
javaScript是动态语言,那么动态参数的话也是与生俱来的, 在去取javaScript得参数用的是Arguments这个属性,去取 <script type="text/java ...
- python(3)-函数动态参数
先来看一段代码 def show(*arg): print(arg, type(arg)) if __name__ == "__main__": show(1) show(1,2, ...
- 理解ROS的参数
记住每次操作之前都要在一个单独的终端中运行ros的核心. roscore rosparam命令允许你在ROS的参数服务器上操作和存储数据,参数服务器可以存储整数,浮点数,布尔类型,字典,列表.ROS使 ...
随机推荐
- XML 之 命名空间详解
最近学xml 遇到了点小问题qaq 找了n多的博客大佬,反复看了半小时终于明白了,可能我太蠢了... 基础的知识就不赘述,直接放“栗子”,切重点: <?xml version="1.0 ...
- 在redhat6.4上编译z3求解器
因为项目需要,我们使用到了微软的z3求解器求约束,但是z3求解器在红帽平台上并没有发布编译好的二进制版本,而我们的运行环境是红帽的企业版6.4,因此需要自己编译相应的二进制. z3是由微软公司开发的一 ...
- 关于生sql中的空值
在数据库中的空值无非就是两种形式的表示 一种是什么都没有,一种是以NuLL显示的 , 那么在C# 读取出来怎么判断呢, DtStatus.Rows[0]["FetchCode"]. ...
- STL编程:C++的忠告!
Copy别人的,有少量修改,可以做为一下参考! C++之父Bjarne Stroustrup 写的 The C++ Programming Language (Special Edition) 中各章 ...
- sqlserver 分组 group by
select 名称, COUNT(名称) as 数量之和from 信息group by all 名称
- java 常用API 包装 练习
package com.oracel.demo01; import java.util.Random; public class Swzy { public static void main(Stri ...
- 对服务器磁盘、CPU、内存使用状态,设置163邮件告警
1,桥接模式可上网,首先你的邮箱已经开通yum -y install mailx dos2unix.x86_64 mailx -V[root@localhost ~]# vim /etc/mail. ...
- PowerDesigner工具
PowerDesigner是一款数据库设计与建模工具,开发人员可以在上面设计表结构,而不用一开始就创建数据库中的表,因为设计阶段数据库表结构会经常变动.设计完后可以导出创建所有表的SQL脚本,直接执行 ...
- 算法8-----Different Ways to Add Parentheses(不同括号结果)
题目: Given a string of numbers and operators, return all possible results from computing all the diff ...
- [USACO08FEB]修路Making the Grade 动态规划
对的\(n^3\)的程序调了一个月了,惊了... HSZ学oi\(\Longleftrightarrow\)闭眼学oi 要不是翻旧账还看不见.. 这是有\(n^2\)做法的. 参见LYD的书P244 ...