ROS提供了丰富的内建消息,std_msgs包定义了一些基本的类型。

具体例子

首先定义一个消息类型的文件叫做Complex

例Complex.msg

float32 real
float32 imaginary

Complex.msg文件位于basic包的msg目录中,定义了两个相同类型的值

一旦消息被定义了,我们就需要运行catkin_make命令和source devel/setup.bash命令来产生语言相关的代码,这能够使得我们可以用这些消息实现计算机 和其他平台的无缝通信。

为了让ROS生成语言相关的代码,我们需要确保已经告知构建系统新消息的定义。

需要向package.xml文件中添加以下代码来实现

<build_depend>message_generation<build_depend>
<exec_depend>message_runtime</run_depend>

接下来,我们需要更改CMakeLists.txt文件

更改如下

需要在fins_package()调用的末尾添加message_generation,这样catkin就知道了去那寻找message_generation包:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)

告知catkin我们将运行时使用消息,即在catkin_package()调用末尾调加message_runtime catkin_package(
CATKIN_DEPENDS message_runtime
)
在add_message_flies()调用的末尾调加消息定义文件Complex.msg来告知catkin我们要编译它
add_message_files(
FILES
Complex.msg
)

最后在CMakeLists.txt文件中,需要确保去掉generation_message()调用的注释,并包含 了消息的所赖的所有依赖项

generation_message(
DEPENDENCIES
std_msgs
)

我们已经告知catkin需要知道的一切,然后到catkin工作空间的根目录下使用命令catkin_make编译它,还需运行source devel/setup.bash

还会生成python类代码,不过我没找到

这样的话就定义了自己的消息类型

使用新定义的消息

例message_publisher.py

发布者:

 #!/usr/bin/env python
import rospy
from basic.msg import Complex
from random import random rospy.init_node('message_publisher')
pub=rospy.Publisher('complex',Complex,queue_size='number')
rate=rospy.Rate() while not rospy.is_shutdown():
msg=Complex()
msg.real=random()
msg.imaginary=random() pub.publish(msg)
rate.sleep()

导入你的新消息类型就像导入其他标准的消息类型一样,然后你就能创建消息类的实例了,一但你创建了一个实例,就能给不同的字段赋值,任何没有显示赋值的字段的值都视为未定义

例message_subscriber.py

订阅者:

 #!/usr/bin/env python
import rospy
from basic.msg import Complex
def callback(msg):
print 'Real:',msg.real
print 'Imaginary:',msg.imaginary
print rospy.init_node('message_subscriber')
sub=rospy.Subscriber('complex',Complex,callback)
rospy.spin()

然后运行节点就能看到消息发布被订阅了

如下

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws$ rosrun basic message_subscriber.py
Real: 0.704654157162
Imaginary: 0.752943456173 Real: 0.425590842962
Imaginary: 0.338110715151 Real: 0.839413583279
Imaginary: 0.193065851927 Real: 0.748129308224
Imaginary: 0.966568589211 Real: 0.105406813323
Imaginary: 0.329872667789 Real: 0.735990107059
Imaginary: 0.0604162067175 Real: 0.208381637931
Imaginary: 0.373496472836 Real: 0.959863781929
Imaginary: 0.433356046677 Real: 0.11781616509
Imaginary: 0.00478984974325 Real: 0.0790134221315
Imaginary: 0.709028303623 Real: 0.11989364773
Imaginary: 0.0398832447827

然后rosmsg命令能让你看到某个消息类型的内容

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws$ rosmsg show Complex
[basic/Complex]:
float32 real
float32 imaginary

ROS机器人话题之自定义消息的更多相关文章

  1. ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...

  2. 【2017.10.13 ROS机器人操作系统】ROS系统常用术语及资源

    ROS机器人操作系统是一种后操作系统,提供了类似于软件开发中使用到的中间件的功能. ROS: Robot Operating System 机器人操作系统 Package: 功能包 Stack: 功能 ...

  3. ros机器人之小乌龟仿真-路径记录

    ------------恢复内容开始------------ 通过自己不断地摸索,对ros系统有了一定的了解,首先装系统,这一过程中也遇到了很多问题,但通过不断地尝试,经过一天一夜的倒腾,总算是把系统 ...

  4. ROS 机器人技术 - 广播与接收 TF 坐标

    上次我们学习了 TF 的基本概念和如何发布静态的 TF 坐标: ROS 机器人技术 - TF 坐标系统基本概念 ROS 机器人技术 - 静态 TF 坐标帧 这次来总结下如何发布一个自定义的 TF 坐标 ...

  5. ros机器人开发概述

    1.       ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...

  6. Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)

    Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...

  7. ROS机器人程序设计(原书第2版)补充资料 教学大纲

    ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...

  8. ROS机器人程序设计-学习小结-

    ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...

  9. ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt!

    ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt! 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. MoveIt ...

随机推荐

  1. cocos2dx Quaternion 四元数(1/2)

    这篇文章只是我学完四元数之后的一些理解,其实是对别人理解的理解,有些地方我理解但是没有写下来,如果真的想深入的学习四元数,建议从学习复数开始. 这个知识点需要几何想象的天赋和学习的耐心,缺一不可,慢慢 ...

  2. $Poj3208$ 启示录 数位统计$DP$

    Poj  AcWing Description Sol  这题长得就比较像数位$DP$叭. 所以先用$DP$进行预处理,再基于拼凑思想,通过"试填法"求出最终的答案. 设$F[i] ...

  3. springboot + freemarker 实现计算器

    使用RequestParam("") 接受参数 其后参数有自动类型转换的作用 @RequestParam("firstNumber") double first ...

  4. 【5min+】 什么?原来C#还有这两个关键字

    系列介绍 简介 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的. ...

  5. 【GeneXus】开发移动APP时,如何使用Canvas进行布局?

    当我们开发移动端APP的时候,经常遇到一种布局方式,那就是层级的布局,比如:一张照片我想在照片的上面显示它的名称,但不影响我照片展示的布局大小,也就是这个名称是浮在照片上的,如图: 如果要实现这样的布 ...

  6. 小程序的<label>标签

    用来改进表单组件的可用性. 使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件. for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件. 目前可以绑定的控件 ...

  7. JMeter——jmx脚本文件解析

    <!--Jmeter版本信息--> <?xml version="1.0" encoding="UTF-8"?> <jmeterT ...

  8. java 方法定义 调用

    一.定义 格式: 修饰符 返回值类型 方法名(参数){ return } 相比之下python方法的定义简单多了 public static 是修饰符 二.调用 方法名(); 注意:要在main方法中 ...

  9. Bootstrap 常用网站

    https://www.bootcss.com/  中文官方文档 https://www.bootcdn.cn/     BootCDN http://www.fontawesome.com.cn/ ...

  10. 异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门

    . 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...