ROS大型工程学习(一) 必须了解的基本文件
一、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大型工程学习(一) 必须了解的基本文件的更多相关文章
- ROS大型工程学习(二) 怎么阅读大型工程
基本思路是由点到面,由浅到深. 1.首先从launch文件入手. 文件中会看到比如: <node ns="> <rosparam command="load&qu ...
- ROS大型工程学习(三) ROS常用命令行
1.rosbag 对ros包进行操作的命令. (1)录制包: rosbag record -a //录制数据包,所有topic都录制 rosbag record /topic_name1 /topic ...
- ROS大型工程学习(四)一键安装所有缺失的依赖!!!
在正文之前,我必须向rosdep道个歉,前面那篇常用命令行中没有它的位置,现在单独写一篇补充!! 突然发现rosdep有个惊人的功能, rosdep install --from-paths src ...
- ROS入门学习
ROS学习笔记 ROS入门网站; ROS入门书籍 ROS主要包含包括功能包.节点.话题.消息类型和服务; ROS功能包/软件包(Packages) ROS软件包是一组用于实现特定功能的相关文件的集合, ...
- ROS actionlib学习(三)
下面这个例子将展示用actionlib来计算随机变量的均值和标准差.首先在action文件中定义goal.result和feedback的数据类型,其中goal为样本容量,result为均值和标准差, ...
- ROS actionlib学习(二)
在ROS actionlib学习(一)中的例子展示了actionlib最基本的用法,下面我们看一个稍微实际一点的例子,用actionlib计算斐波那契数列,并发布反馈(feedback)和结果(res ...
- ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改
ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...
- ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)
ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...
- Java学习-040-级联删除目录中的文件、目录
之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...
随机推荐
- PHP PDO_MYSQL 链式操作 非链式操作类
<?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +-------------------------------------- ...
- 「SDOI2009」HH的项链
「SDOI2009」HH的项链 传送门 数据加强了,莫队跑不过了. 考虑用树状数组. 先把询问按右端点递增排序. 然后对于每一种贝壳,我们都用它最右一次出现的位置计算答案. 具体细节看代码吧. 参考代 ...
- uniGUI之MainModule(12)
1]必须设置. 一个 user 一个, 在此放数据库控件是各 user 独立 2]常用属性: 应用 MainModule 正确的方法是将连接组件放置在 MainModule 上, 并将数据集放在窗体 ...
- list的三个子类的特点
- 【jmeter】NO-GUI模式运行的过程及报错解决方法(转)
1.什么都不需要设置(若非得想配置点什么的话,那请看备注) 2.将脚本抛到Linux里 3.执行 jmeter -n -t /opt/day7_buildbug.jmx -l result.jtl - ...
- 如何在linux中解压.rar文件
在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本 步骤: 1.http://www.rarsoft.com/rar/rarlinux-4.0.1.tar.gz 从这个网址 ...
- 安装redis集群
1.搭建集群需要使用到官方提供的ruby脚本. 需要安装ruby的环境. 安装ruby yum install ruby yum install rubygems 2.将ruby包redis-3.0. ...
- UOJ192 最强跳蚤
题目链接 problem 给出一个n个点带边权的树,问有多少对\((u,v)\)满足\(u\)到\(v\)路径上边权的乘积为完全平方数. \(n\le 10^5,w\le 10^8\) solutio ...
- 关于Burp Suite Intruder 的四种攻击方式
以下面这一段参数为例,被§§包围的部分为需要破解的部分: user=§ss§&password=§zxcv§&imageField.x=17&imageField.y=1 (1 ...
- 1-8SpringBoot之切面AOP
SpringBoot提供了强大AOP支持,我们前面讲解过AOP面向切面,所以这里具体AOP原理就补具体介绍: AOP切面主要是切方法,我们一般搞一些日志分析和事务操作,要用到切面,类似拦截器: @As ...