ROS 自定义消息类型方法
流程
1、在package中新建文件夹名为msg
2、在msg文件夹中创建消息(此处以my_msg.msg)为例,注意的是要以msg为后缀名
内容举例如下:
int32 data1
float64 date2
关于消息内容,需要注意的是如果类型错误,那么将不能生成头文件。例如float64写成了float,那么编译时将会出现错误:xxx.h: No such file or directory;而不会告诉你是哪里出错了,我曾经就遇到过这么坑的问题,所以这点需要注意。
3、修改CmakeList.txt 和package.xml
3.1、在package.xml中添加编译、运行依赖项
3.2、CmakeList.txt
find_package()中添加message_generation
find_package(catkin REQUIRED COMPONENTS
message_generation
roscpp
rospy
std_msgs
)
add_message_files()中添加my_msg.msg
add_message_files(FILES
my_msg.msg
)
generate_messages()添加std_msgs
generate_messages(DEPENDENCIES
std_msgs
)
catkin_package()添加message_runtime
catkin_package(
CATKIN_DEPENDS
message_runtime)
最后在add_executable(xxx src/xxx.cpp)后面添加一行
add_dependencies(xxx ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) #该项让编译器知道要注意编译顺序
target_link_libraries(xxx
${catkin_LIBRARIES}
)
否则仍可能生成不了my_msg.h头文件
如何使用?
1、包含头文件
#include<package_name/my_msg.h>
2、定义变量
package_name::my_msg msg
ROS 链接同一个工作空间的其他包的头文件
正确调用其他package头文件的方法如下:
1.在A_package包的package.xml中添加编译和运行的依赖库,如下:
<build_depend>B_package</build_depend>
<run_depend>B_package</run_depend>
2.在A_package包的CMakeList.txt中的find_package添加B_package如下:
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs B_package )
主要添加”B_package”,其他已有的package项不用添加
3.在A_package包的CMakeList.txt中的include_directories添加${catkin_INCLUDE_DIRS}如下:
include_directories(include ${catkin_INCLUDE_DIRS})
部分工程已经有该项,不用重复添加
4.此时在调用该头文件则不会出错
#include <B_package/testB.h>
自定义消息类型嵌套
当消息类型发生嵌套时,要包含被且套的消息的包
generate_messages(DEPENDENCIES
std_msgs
B_package )
ROS 自定义消息类型方法的更多相关文章
- ros自定义消息
ros自定义消息可以根据自身项目需求定义和封装想要的数据类型和数据结构.具体可以参考维基百科关于ros自定义消息部分 这里我只是记录自定义消息的要点部分: 1.首先要在工作空间下功能包中创建一个msg ...
- Swift语言之类型方法
Swift语言有很多特性,其中之一就是类型方法,相对于其他比较流行的编程语言(C#.Java),在Swift中类型方法最大的特征在于它的可继承性,我们举个例子说明: 俗话说,龙生龙凤生凤老鼠生儿会打洞 ...
- 深入学习golang(3)—类型方法
类型方法 1. 给类型定义方法 在Go语言中,我们可以给任何类型(包括内置类型,但不包括指针和接口)定义方法.例如,在实际编程中,我们经常使用[ ]byte的切片,我们可以定义一个新的类型: type ...
- Swift编程语言学习12 ——实例方法(Instance Methods)和类型方法(Type Methods)
方法是与某些特定类型相关联的函数.类.结构体.枚举都能够定义实例方法:实例方法为给定类型的实例封装了详细的任务与功能.类.结构体.枚举也能够定义类型方法:类型方法与类型本身相关联.类型方法与 Obje ...
- Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解
Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全 Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...
- 线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步
假设多个线程共享一个静态变量,如果让每个线程都执行相同的方法每次让静态变量自增1,这样的做法线程安全吗?能保证自增变量数据同步吗?本篇体验使用lock语句块和Interlocked类型方法保证自增变量 ...
- java中Object转换成int或String类型方法
转载: http://www.cnblogs.com/1020182600HENG/p/6137206.html Object obj = getObject(); if(obj instanceof ...
- Java_无参数无返回类型方法及练习
无参数无返回类型方法语法格式: public static void 方法名称(){ 方法体; } class Method03{ /*练习3:输出1-100中的每个数,要求使用无参无返回类型的方法完 ...
- DataTable 更改在有数据列的类型方法
原文:DataTable 更改在有数据列的类型方法 /// <summary> /// 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改 ...
随机推荐
- 三.Python数据类型详述
Python第三节数据类型详述 一.多变量赋值 python允许多变量赋值 多变量赋相同的值a = b = c = 1 多变量赋不同的值a, b, c = 1, 2, "fuckyou&qu ...
- 小白如何在Windows下使用Redis
一.redis下载按装 Nuget 可以直接下载 redis 将下来的包拷贝到自已需要的目录如我放到桌面文件夹“近期需要\Redis应用\redis-64.3.0.503” 操作 cmd进入命令操作 ...
- 遍历对象不能通过for循环因为对象无序 可以通过for -n
遍历对象不能通过for循环因为对象无序 可以通过for -n var json={ "name":“小明”, “age”:“10”, “sex”:"男" }; ...
- Jmeter-【JSON Extractor】-响应结果中三级key取值
一.请求返回样式 二.取第三个option 三.查看结果
- Perl 循环
Perl 循环 有的时候,我们可能需要多次执行同一块代码.一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了更为复杂执行路径的多种控制结构. 循环语 ...
- ETL详解
ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...
- Impala的安装和使用
通过本地yum源进行安装impala 所有cloudera软件下载地址 http://archive.cloudera.com/cdh5/cdh/5/ http://archive.cloudera. ...
- NX二次开发-UFUN获得图纸页数量UF_DRAW_ask_num_drawings
#include <uf.h> #include <uf_draw.h> #include <uf_ui.h> UF_initialize(); //获得有多少张图 ...
- NX二次开发-UFUN获取点在面上U,V方向的位置UF_MODL_ask_face_parm【转载】
NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_modl.h> #include <u ...
- HDU5923-Prediction-有继承味道的并查集
目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门 原题目描述在最下面. 有一个n个节点m条边的无向图和一个m个节点的有根树(根为1).树上每 ...