1.简介

自定义数据包可以在使用数据的功能包内进行创建,也可以单独创建一个功能包来专门进行自定义数据类型.

1.步骤:

1.创建一个功能包

进入工作空间catkin_ws/src

catkin_create_pkg test_msgs actionlib std_msgs message_generation actionlib_msgs
cd ../
catkin_make

2.创建自定义数据

  • 话题类型:

    在功能包下新建一个msg的文件夹,创建testmsg.msg文件
bool mode
float64 angle
  • 服务类型:

    在功能包下新建一个srv的文件夹,创建testsrv.srv文件
#请求
int64 a
int32 b
---
#应答
int64 sum
  • 动作类型:

    在功能包下新建一个action文件夹,创建testaction.action文件
#定义目标信息
uint32 dish_id
---
#定义结果信息
uint16 total
---
#定义周期反馈信息
float32 feed_msg

3.修改CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(test_msgs) find_package(catkin REQUIRED COMPONENTS
actionlib
message_generation
std_msgs
actionlib_msgs
) add_action_files(
DIRECTORY action
FILES
testaction.action
)
add_message_files(
DIRECTORY msg
FILES
testmsg.msg
)
add_service_files(
DIRECTORY srv
FILES
testsrv.srv
) generate_messages(
DEPENDENCIES
std_msgs
actionlib_msgs
) catkin_package()

4.修改package.xml文件

<?xml version="1.0"?>
<package format="2">
<name>test_msgs</name>
<version>0.0.0</version>
<description>The test_msgs package</description>
<maintainer email="penuel@todo.todo">penuel</maintainer>
<license>TODO</license> <buildtool_depend>catkin</buildtool_depend> <build_depend>actionlib</build_depend>
<build_depend>message_generation</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>actionlib_msgs</build_depend> <build_export_depend>actionlib</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<build_export_depend>message_generation</build_export_depend>
<build_export_depend>actionlib_msgs</build_export_depend> <exec_depend>actionlib</exec_depend>
<exec_depend>std_msgs</exec_depend>
<exec_depend>message_runtime</exec_depend>
<exec_depend>actionlib_msgs</exec_depend> <export>
</export>
</package>

5.最后进行编译 catkin_make

2.使用自定义的数据

  • 话题使用:

    1.发布话题:
#include "ros/ros.h"
#include "test_msgs/testmsg.h"
int main(int argc, char** argv)
{
ros::init(argc,argv,"testmsg_node");
ros::NodeHandle nh;
ros::Publisher pub1 = nh.advertise<test_msgs::testmsg>("/test_msgs_pub",1000);
ros::Rate loop_rate(10);
test_msgs::testmsg test_pub;
while( ros::ok() )
{
test_pub.angle = 50;
test_pub.mode = 10;
pub.publish(test_pub);
ros::spinOnce();
loop_rate.sleep(); }
return 0;
}

CMakeLists.txt:

find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
test_msgs
)

package.xml:

 <buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_depend>test_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<build_export_depend>test_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
<exec_depend>test_msgs</exec_depend>

ROS自定义数据类型的更多相关文章

  1. 通过SQL Server自定义数据类型实现导入数据

    写在前面 在看同事写的代码时看到了SQL Server中可以自定义数据类型,而且定义的是DataTable类型的数据类型. 后我想起了以前我们导入数据时要么是循环insert写入,要么是SqlBulk ...

  2. hadoop的自定义数据类型和与关系型数据库交互

    最近有一个需求就是在建模的时候,有少部分数据是postgres的,只能读取postgres里面的数据到hadoop里面进行建模测试,而不能导出数据到hdfs上去. 读取postgres里面的数据库有两 ...

  3. OSG 自定义数据类型 关键帧动画

    OSG 自定义数据类型 关键帧动画 转自:http://blog.csdn.net/zhuyingqingfen/article/details/12651017 /* 1.创建一个AnimManag ...

  4. Oracle存储过程-自定义数据类型,集合,遍历取值

    摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...

  5. Oracle自定义数据类型 1

    原文 oracle 自定义类型 type / create type 一 Oracle中的类型 类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nva ...

  6. Hadoop-MapReduce之自定义数据类型

    以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置) MR程序就不写了,请看WordCount程序. package cn.genekang.hadoop.m ...

  7. Sql Server 自定义数据类型

    SQLServer 提供了 25 种基本数据类型: ·Binary [(n)]  二进制数据 既可以是固定长度的(Binary),也可以是变长度的.其中,n 的取值范围是从 1 到 8000.其存储窨 ...

  8. 初识Haskell 五:自定义数据类型和类型类

    对Discrete Mathematics Using a Computer的第一章Introduction to Haskell进行总结.环境Windows 自定义数据类型 data type de ...

  9. 如何在Qt中使用自定义数据类型

    这里我们使用下面这个struct来做说明(这里不管是struct还是class都一样): struct Player { int number; QString firstName; QString ...

  10. Java 基础 面向对象修饰符和自定义数据类型

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符如下: public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是 ...

随机推荐

  1. Go语言核心36讲26

    你好,我是郝林.今天我分享的主题是测试的基本规则和流程的(下)篇. Go语言是一门很重视程序测试的编程语言,所以在上一篇中,我与你再三强调了程序测试的重要性,同时,也介绍了关于go test命令的基本 ...

  2. i春秋Blog

    打开是个普普通通的hello world 然后有注册有登录 不多说我们直接注册登录试试 登录后有个POST选项,可以上传东西,先试试上传文字 没什么重要的回显 再上传一个文档试试 爆出提示:这里使用的 ...

  3. K8S kubesphere安装mysql

    原先我们使用Docker按照mysql时候的命令 docker run -p 3306:3306 --name mysql-01 \ -v /mydata/mysql/log:/var/log/mys ...

  4. 如何使用zx编写shell脚本

    前言 在这篇文章中,我们将学习谷歌的zx库提供了什么,以及我们如何使用它来用Node.js编写shell脚本.然后,我们将学习如何通过构建一个命令行工具来使用zx的功能,帮助我们为新的Node.js项 ...

  5. orcl rollup 分组小计、合计

    表数据: select * from group_test; 分组小计.合计: select group_id, decode(concat(job, group_id), null, '合计', g ...

  6. 3.7:基于Weka的K-means聚类的算法示例

    〇.目标 1.使用Weka平台,并在该平台使用数据导入.可视化等基本操作: 2.对K-means算法的不同初始k值进行比较,对比结果得出结论. 一.打开Weka3.8并导入数据 二.导入数据 三.Si ...

  7. 【消息队列面试】15-17:高性能和高吞吐、pull和push、各种MQ的区别

    十五.kafka高性能.高吞吐的原因 1.应用 日志收集(高频率.数据量大) 2.如何保证 (1)磁盘的顺序读写-pagecache关联 rabbitmq基于内存读写,而kafka基于磁盘读写,但却拥 ...

  8. JS基本数据类型——BigInt

    一.JS基本数据类型--BigInt BigInt是ES11引入的新的基本数据类型.BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值,以任意精度表示整数.使用 BigInt解决 ...

  9. 常用BOM操作 DOM操作 事件 jQuery类库

    目录 BOM操作 常用BOM操作 三种弹出框 alert confirm prompt 定时任务 setTimeout 循环定时 setInterval DOM操作 查找标签 直接查找 间接查找 操作 ...

  10. .NET周报【12月第2期 2022-12-15】

    国内文章 九哥聊Kestrel网络编程第一章:开发一个Redis服务器 https://mp.weixin.qq.com/s/HJYnBE-7wbvkAYHxQaq3eQ 我和拥有多个.NET 千星开 ...