一、Cmake文件

阅读工程,首先点开CMakeLists 文件,会定义一些库和可执行文件。首先看可执行文件,rosrun的就是这个节点navigator

add_executable(navigator src/navigator.cpp src/RobotNavigator.cpp)

launch文件中写的也是这个节点,比如以下。name是自己取的,pkg是包的名字,type是cmake里可执行文件的名字(node的名字)

 <node name="Navigator" pkg="csc_nav2d_navigator" type="navigator" output="screen">
<rosparam file="$(find csc_nav2d_working)/param/navigator.yaml"/>
<rosparam file="$(find csc_nav2d_working)/param/global_costmap_params_scan.yaml" command="load" />
</node>

比如点开navigator这个可执行文件,发现是一个main函数文件,编译后会变成可执行文件。

 #include <ros/ros.h>
#include <csc_nav2d_navigator/RobotNavigator.h>
using namespace ros;
int main(int argc, char **argv)
{
ros::init(argc, argv, "Navigator");
ros::NodeHandle n; RobotNavigator robNav; ros::spin(); return ;
}

二、cfg文件

官方文档见http://wiki.ros.org/dynamic_reconfigure/Tutorials

以下程序转载自https://blog.csdn.net/qq_31356389/article/details/79131175

 #!/usr/bin/env python
PACKAGE = "ROS_Test1" from dynamic_reconfigure.parameter_generator_catkin import * gen = ParameterGenerator() gen.add("int_param", int_t, , "int parameter", , , );
gen.add("double_param", double_t, , "double parameter", ., 0.0, 1.0);
gen.add("bool_param", bool_t, , "bool parameter", True);
gen.add("str_param", str_t, , "string parameter", "ROS_Test1"); size_enum = gen.enum([ gen.const("Low", int_t, , "Low is 0"),
gen.const("Medium", int_t, , "Medium is 1"),
gen.const("High", int_t, , "Hight is 2")],
"Select from the list") gen.add("size", int_t, , "Select from the list", , , , edit_method=size_enum) exit(gen.generate(PACKAGE, "ROS_Test1", "Test1_"))

解读:

第2行 :ROS_Test1 为要配置动态参数的包的名字

第4、6行:导入参数生成器。

第8-18行:添加动态参数:

gen.add(name, type, level, description, default, min, max)

name: 参数的名称

type: 参数类型

level:一个传递给回调的位掩码

description: 一个描述参数

default: 节点启动的初始值

min: 参数最小值

max: 参数最大值

第13行:定义一个整数,其值由枚举设置。为此,调用gen.enum并将其传递给常量列表,后跟该枚举的描述。定义完成后可以将参数设置为“Low”或“Medium”,而不是0或1。

第20行:生成必要的文件并退出。第二个是可以运行的节点的名称(仅用于生成文档),就是改成自己的包的名字。第三个参数是生成的文件将获得的名称前缀,例如<name>Config.h或者<name>Config.py 。

再举个例子:转载至https://blog.csdn.net/u010945141/article/details/81225087

 #!/usr/bin/env python
# -*- coding: utf- -*- # 指定包名
PACKAGE = "dynamic_tutorials" from dynamic_reconfigure.parameter_generator_catkin import * # 生成参数配置实例
gen = ParameterGenerator() # 设置参数
# add(self, name, paramtype, level, description, default=None, min=None, max=None, edit_method='')
# @paramtype: 支持4类 int_t, double_t, str_t, bool_t
# @level: 还不太清楚这个参数的用法
gen.add("int_param", int_t, , "An Integer parameter", , , )
gen.add("double_param", double_t, , "A double parameter", ., , )
gen.add("str_param", str_t, , "A string parameter", "Hello World")
gen.add("bool_param", bool_t, , "A Boolean parameter", True) # 通过enum设置枚举型参数
size_enum = gen.enum([ gen.const("Small", int_t, , "A small constant"),
gen.const("Medium", int_t, , "A medium constant"),
gen.const("Large", int_t, , "A large constant"),
gen.const("ExtraLarge", int_t, , "An extra large constant")],
"An enum to set size") gen.add("size", int_t, , "A size parameter which is edited via an enum", , , , edit_method=size_enum) # 生成必要文件并退出程序
# generate(pkgname, nodename, name)
# 第二个参数是使用这个配置文件的节点名(只是用来生成文档)
# 第三个参数必须与配置文件同名
exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials"))

注意:看到这里,突然想到功能包编译过程中经常报cfg的错误,这个时候就需要给cfg文件加权限,格式如下:

chmod  +x  包含路径的文件名

ok

ROS大型工程学习(一) 必须了解的基本文件的更多相关文章

  1. ROS大型工程学习(二) 怎么阅读大型工程

    基本思路是由点到面,由浅到深. 1.首先从launch文件入手. 文件中会看到比如: <node ns="> <rosparam command="load&qu ...

  2. ROS大型工程学习(三) ROS常用命令行

    1.rosbag 对ros包进行操作的命令. (1)录制包: rosbag record -a //录制数据包,所有topic都录制 rosbag record /topic_name1 /topic ...

  3. ROS大型工程学习(四)一键安装所有缺失的依赖!!!

    在正文之前,我必须向rosdep道个歉,前面那篇常用命令行中没有它的位置,现在单独写一篇补充!! 突然发现rosdep有个惊人的功能, rosdep install --from-paths src ...

  4. ROS入门学习

    ROS学习笔记 ROS入门网站; ROS入门书籍 ROS主要包含包括功能包.节点.话题.消息类型和服务; ROS功能包/软件包(Packages) ROS软件包是一组用于实现特定功能的相关文件的集合, ...

  5. ROS actionlib学习(三)

    下面这个例子将展示用actionlib来计算随机变量的均值和标准差.首先在action文件中定义goal.result和feedback的数据类型,其中goal为样本容量,result为均值和标准差, ...

  6. ROS actionlib学习(二)

    在ROS actionlib学习(一)中的例子展示了actionlib最基本的用法,下面我们看一个稍微实际一点的例子,用actionlib计算斐波那契数列,并发布反馈(feedback)和结果(res ...

  7. ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改

    ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...

  8. ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)

    ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...

  9. Java学习-040-级联删除目录中的文件、目录

    之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...

随机推荐

  1. 刷题56. Merge Intervals

    一.题目说明 题目是56. Merge Intervals,给定一列区间的集合,归并重叠区域. 二.我的做法 这个题目不难,先对intervals排序,然后取下一个集合,如果cur[0]>res ...

  2. 导航栏协议方法UINavigationControllerDelegate

    关于UINavigationControllerDelegate: Delegate中一共有6个方法.其中两个跟控制器ViewController的跳转有关.有两个跟屏幕的旋转有关.有两个跟导航栏动画 ...

  3. zabbix监控 -mysql数据库

    1.禁用安装防护[root@mysql213 ~]# vi /etc/selinux/config #关闭安装 SELINUX=disabled 2.授权zabbix监控账号 mysql -uroot ...

  4. 入门学习C链接

    参考链接:http://c.biancheng.net/view/465.html 在里面链接下载了:code:block,还有C语言入门的PDF文件. 常看网站:https://www.cnblog ...

  5. Intent的常用属性action和category

    设置隐式跳转 首先在我们按钮监听器中添加 Intent i=new Intent(); //参数为字符串,可以添加包名.活动名 i.setAction("com.example.aaaaa. ...

  6. 第1节 storm编程:1、storm第一天上次课程内容回顾

    上次课程内容回顾:1.kafka的基本介绍:kafka是一个消息队列2.消息队列的作用:解耦3.kafka与传统消息队列的对比: 传统消息队列:支持事务 kafka的特点:比较快,比较快的两个原因:顺 ...

  7. 与(&)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

  8. 如果不想在django 的settings中保存mysql数据库的密码

    如题,你可以编写一个配置文件,用'OPTIONS' 将该配置文件导入进来,这样你发布到git上的源码上就没有你的数据库密码了. 这是django推荐的方法. # settings.py DATABAS ...

  9. log4j, common-logging, slf4j 关系

    最近因为项目原因,认真学习了一下 log4j 相关内容,主要是从网上找资料,以及追踪原代码.   关于如何使用,网上有很多资料,这里不做具体介绍.下面介绍一下这些工具的关系.   log4j 是最强大 ...

  10. Kotlin 学习 (一)

    开始学习kotlin mark入门资料一篇: Kotlin入门第一课:从对比Java开始 未完待续...