ROS机器人话题之自定义消息
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机器人话题之自定义消息的更多相关文章
- ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse
ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...
- 【2017.10.13 ROS机器人操作系统】ROS系统常用术语及资源
ROS机器人操作系统是一种后操作系统,提供了类似于软件开发中使用到的中间件的功能. ROS: Robot Operating System 机器人操作系统 Package: 功能包 Stack: 功能 ...
- ros机器人之小乌龟仿真-路径记录
------------恢复内容开始------------ 通过自己不断地摸索,对ros系统有了一定的了解,首先装系统,这一过程中也遇到了很多问题,但通过不断地尝试,经过一天一夜的倒腾,总算是把系统 ...
- ROS 机器人技术 - 广播与接收 TF 坐标
上次我们学习了 TF 的基本概念和如何发布静态的 TF 坐标: ROS 机器人技术 - TF 坐标系统基本概念 ROS 机器人技术 - 静态 TF 坐标帧 这次来总结下如何发布一个自定义的 TF 坐标 ...
- ros机器人开发概述
1. ROS项目开发流程? 参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619 具体项目设计可看看<程序员>杂志的最新一篇 ...
- Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)
Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...
- ROS机器人程序设计(原书第2版)补充资料 教学大纲
ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...
- ROS机器人程序设计-学习小结-
ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...
- ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt!
ROS机器人程序设计(原书第2版)补充资料 (拾) 第十章 使用MoveIt! 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. MoveIt ...
随机推荐
- JAVA优化篇 如何找到运行缓慢的线程
引入 JAVA提供了一些分析DUMP的工具,比如jmap,visualvm 等 JAVA还有寻找线程状态的工具,jstack等 数据库也有检查连接数,连接状态的命令,status,processlis ...
- 《带你装B,带你飞》pytest成神之路2- 执行用例规则和pycharm运行的三种姿态
1. 简介 今天北京下的雪好大好美啊!!!哎呀,忘记拍照片了,自己想象一下吧.言归真传,今天还是开始pytest的学习和修炼,上一篇写完后群里反响各式各样的,几家欢乐几家愁,有的高兴说自己刚好要用到了 ...
- ScheduledThreadPoolExecutor中定时周期任务的实现源码分析
ScheduledThreadPoolExecutor是一个定时任务线程池,相比于ThreadPoolExecutor最大的不同在于其阻塞队列的实现 首先看一下其构造方法: public Schedu ...
- Eclipse中安装LEAP插件
点击eclipse中顶部菜单栏中 Help 项,选择 Install New Software... 项 在弹出安装窗口中点击 Add... 在弹出的添加安装软件的窗口中点击 Local... 选择插 ...
- linux各目录及重要目录的详细介绍
1 目录说明 根目录 (/) /bin bin是Binary的缩写, 这个目录存放着最经常使用的命令,比如ls,cat,mkdir等 /dev dev是Device(设备)的缩写, 该目录下存放的是L ...
- C#.Net ComboBox控件设置DropDownList之后背景颜色问题,以及发现的微软的一个BUG
先说背景颜色问题怎么处理. C#.Net WinForm中如果设置ComboBox的DropDownStyle为DropDownList,控件背景色会变成灰色,并且这个时候ComboBox控件的Bac ...
- 7月17日刷题记录 分治Getting!循环比赛日程表
通过数:1 ┭┮﹏┭┮ qdoj.xyz 1053 分治-循环比赛日程表 其实今天晚上留给编程的时间并不多,做出一道... 不过收获还是非常大的 毕竟本人从来没有学习过分治算法,今天竟然攻克了我人生中 ...
- git与github的简单使用教程
git与github的简单使用教程 一.创建仓库 点击new,进入创建仓库页面 对将要创建的仓库进行一些简单的设置 最后再点击create repository就可以了. 到这我们就创建好了一个仓库. ...
- Google搜索成最大入口,简单谈下个人博客的SEO
个人静态博客SEO该考虑哪些问题呢?本篇文章给你答案 咖啡君在开始写文章时首选了微信公众号作为发布平台,但公众号在PC端的体验并不好,连最基本的文章列表都没有,所以就搭建了运维咖啡吧的网站,可以通过点 ...
- Android栈溢出漏洞利用练习
在Github上看到一个Linux系统上的栈溢出漏洞利用练习项目: easy-linux-pwn.在原项目基础上,我稍微做了一些改动,将这个项目移植到了Android 9.0系统上: easy-and ...