一、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. Altium Designer中,将多个工程下的原理图和PCB合并在一起

    TDD双向放大器的设计分为三部分:LNA部分.PA部分和控制开关部分.为了调试方便,已经在三个Altium工程里面分别设计了三部分.现在需要合并成一个板子,为了保留已有的布局布线的工作量,采用这个办法 ...

  2. Python学习第六课——基本数据类型一之tuple and dict

    元组 (tuple) tu=(11,22,(123,456),[22,55],) # 一般定义元组的时候最后面加一个, # 元组不能被修改或者删除 v = tu[0] # 也可以根据索引取值 prin ...

  3. POJ 1487:Single-Player Games 浮点数高斯消元

    Single-Player Games Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1287   Accepted: 36 ...

  4. threading 多线程

    # coding:utf- import time from threading import Thread def foo(x):#这里可以带参数def foo(x) print "foo ...

  5. redis-String字符串

    存储类型:可以用来存储字符串.整数.浮点数. 常用命令: 1. SET key value [EX seconds] [PX milliseconds] [NX|XX] 1.1 EX seconds ...

  6. php面向对象的三大特性——封装、继承、多态

    1.封装 目的:为了使类更加安全,类里面的成员变量对外界隐藏 做法: 1)将成员变量变成私有的: 2)在类中做方法间接访问成员变量: 3)在方法里面加控制条件. 例: class ren{ priva ...

  7. BugFix系列---开篇介绍

      这个系列的文章,主要目的在于积累总结实际开发中遇到的错误,记录下来自己的解决思路,用来提升自己. 不出意外,应该会持续不断的记录更新,在整个开发openstack的过程中,抓住机会吸取开源界大牛的 ...

  8. 浅谈Spring发展史

    1 码农的春天----------Spring来了 Spring官网 :http://www.springframework.org 关于Spring的发展起源要回溯到2002年,当时正是Java E ...

  9. Unity Scene视图下 输出物体坐标等信息

    using UnityEditor; using UnityEngine; [CustomEditor(typeof(GameObject))] public class MyEditor : Edi ...

  10. gym 101911

    A. Coffee Break 题意:每天有m小时,你喝咖啡需要花一小时,你想在n个时刻都喝过一次咖啡,老板规定连续喝咖啡的间隔必须是d以上,求最少需要多少天才能喝够n次咖啡,并输出每个时刻第几天喝. ...