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 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...
随机推荐
- vector的clear和swap
vector的clear()操作只是清空vector的元素,而不会将内存释放掉 vector<int> vec1{ 1,2,3,4,5 }; vec1.clear(); cout<& ...
- C++ list结构体变量排序
以下内容是自己整理的根据结构体里面的不同变量,对list排序的实例,若有问题可以留言.仅供参考. #include <iostream> #include <list> #in ...
- python之函数名称空间,作用域,嵌套函数
目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1(): def ...
- 为安卓手机刷上手机kali系统Nethunter
kali Nethunter是一个装在手机上的kali,集成了kali的工具包,hid,无线攻击等等. 本文主要叙述如何安装此系统并正确的配置.不让你走弯路. 首先我们拒绝傻瓜安装软件 kali ne ...
- 更改windows系统的快捷键方法
众所周知,windows平台有很多快捷键使用非常的别扭. 现在提供windows 平台快捷键替换的绝佳软件:autohotkey 下载链接:http://ahkscript.org/ 中文帮助站点:h ...
- Keras入门——(3)生成式对抗网络GAN
导入 matplotlib 模块: import matplotlib 查看自己版本所支持的backends: print(matplotlib.rcsetup.all_backends) 返回信息: ...
- 条款01:视C++为一个语言联邦
C++由四部分组成: 1)C. 2)Object-Oriented C++.classes,封装,多态,动态绑定(virtual函数) 3)Template C++.泛型编程. 4)STL. 对于内置 ...
- 「CF161B」Discounts
传送门 Luogu 解题思路 贪心地想一想,我们肯定要让凳子去给价格越高的商品打半价,那么我们就先按照价格排序,但是要优先把凳子排在前面. 然后我们发现一条凳子肯定只能给价格小于等于它本身的物品打半价 ...
- 如何使用Nexus搭建Maven私服
如何使用Nexus搭建Maven私服 听语音 | 浏览:47 | 更新:2016-09-29 10:22 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅最快的到家服务,最优质的电脑清灰! ...
- css 文本溢出省略号
单行溢出显示省略号: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 多行溢出显示省略号: text-overflow: ...