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 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...
随机推荐
- 执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
注意: 采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci 在运行sql语句时,出现以下问题: [Er ...
- maven缺失ojdbc6解决方案 :Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错
问题已解决,感谢博主,给您磕头了. | | 解决方法就是把缺少的 jar 手动添加到本地仓库中,再重新引入依赖即可.详情请参考以下链接. | | 转发自: https://blog.csdn.net/ ...
- 常见Http状态码大全详解
HTTP状态码的分类 HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用.HTTP状态码共分为5种类型: 具体如下: 状态码 内容 详细内容 信息告知 - ...
- 记一个 protobuf 的 jar 包冲突
尝试使用 spark 以 bulkload 的方式写 HBase 时,遇到一个问题,错误堆栈如下 19/02/02 09:00:43 ERROR Utils: Aborting task java.l ...
- 分析配置DispatcherServlet类时load-on-startup标签作用
<servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org. ...
- 十九 Spring的JDBC模版使用: 模版的CRUD的操作
Spring的JDBC模版使用: 模版的CRUD的操作 保存操作 修改操作 删除操作 查询操作 import com.ithheima.jdbc.domian.Account; @RunWith(Sp ...
- 【剑指Offer面试编程题】题目1370:数组中出现次数超过一半的数字--九度OJ
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2 ...
- 【剑指Offer面试编程题】题目1513:二进制中1的个数--九度OJ
题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例. 对于每个输入文件,第一行输入一个整数T,代表测试样例的数量.对于每个测试样例输入为一个 ...
- Java泛型与数组深入研究
Java中的泛型与数组平时开发用的很多,除了偶尔遇到"NullPointerException"和"IndexOutOfBoundsException"一般也不 ...
- Docker 镜像文件的导入和导出
使用save命令 保存镜像 docker save -o name_by_you.tar exist_images 将文件copy到另一台机器 使用load命令将镜像文件保存到本地仓库 docker ...