将消息发布到话题上

首先建立一个basic包(名称自己定)其命令为:

1、创建功能包,应用catkin_create_pkg命令

     cd  ~/catkin_ws/src                      #切换到代码空间,也就是工作空间的src目录

 catkin_create_pkg  basic  std_msgs  rospy   roscpp     #创建功能包,并指定有三个功能包依赖

每次创建完包都要记得编译

catkin_make                        #编译

source   devel/setup.bash                   #设置环境变量

然后在basic 包下声明一个话题,名称为topic_publisher.py

基本代码

 #!/usr/bin/env python
import rospy
from std_msgs.msg import Int32
rospy.init_node('topic_publisher')
pub = rospy.Publisher('counter',Int32)
rate = rospy.Rate()
count =
while not rospy.is_shutdown():
pub.publish(count)
count +=
rate.sleep()

1.#!/usr/bin/env python

这是所谓的shebang(工作环境),告诉系统这是一个pythin文件,应该传给python解释器,但是在linux系统下需要给他增加权限:chmod u+x topic_publisher.py

2.import rospy

负责导入我们的基本功能

3.from std_msgs_msg import Int32

使用32位的整数,这在ROS的标准消息包std_msgs中有定义,为了导入正常,需要从<包名>.msg导入,这是定义存储的地方。

因为我们使用的是来自其他包的信息,我们需要在package.xml文件中加入一个依赖:<depend package="std_msgs" />

如果没有这个依赖可能节点无法运行(我没加也运行好了)

4.初始化节点,用Publisher声明

pub=rospy.Publiisher('counter',Int32)

赋予话题一个名字(counter),消息类型Int32

5在话题上发布消息

rate=rospy.Rate(2)

count=0

while not rospy.is_shutdown():

pub.pubulish(count)

count+=1

rate.sleep()

设置速率,每秒发两次,如果节点已经被关闭则is_shutdown()函数返回一个True,反之返回一个Flase.

检查一切是否工作正常首先打开一个终端启动:roscore

再打开另一个终端运行:rostopic list     这是查看当前系统中可用的话题

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws$ rostopic list
/counter
/rosout
/rosout_agg

再打开一个终端运行上述节点:rostopic basic topic_publisher.py

运行如果出现以下错误

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws/src$ rosrun basic topic_publisher.py
/home/qqtsj/catkin_ws/src/basic/src/topic_publisher.py:: SyntaxWarning: The publisher should be created with an explicit keyword argument 'queue_size'. Please see http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers for more information.
pub = rospy.Publisher('counter',Int32)

则在pub = rospy.Publisher('counter',Int32) 中Int32后面加上queue_size = 'number',就可以了。

再进一步,你可以使用rostopic echo来查看话题上发布消息

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws$ rostopic echo counter -n
data:
---
data:
---
data:
---
data:
---
data:
---

-n 5选项告诉rostopic只打印出五条信息 ,不加这个,他将会一直打印下去。

也可用:rostopic hz counter   去检验我们发布消息的速率

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws/src/basic$ rostopic hz counter
subscribed to [/counter]
average rate: 2.000
min: .500s max: .500s std dev: .00000s window:
average rate: 2.000
min: .500s max: .500s std dev: .00004s window:
average rate: 2.000
min: .500s max: .500s std dev: .00005s window:
average rate: 2.000
min: .500s max: .500s std dev: .00005s window:
average rate: 2.000
min: .500s max: .500s std dev: .00008s window:
average rate: 2.000
min: .500s max: .500s std dev: .00017s window:
average rate: 2.000
min: .500s max: .500s std dev: .00015s window:
average rate: 2.000
min: .500s max: .500s std dev: .00014s window:
average rate: 2.000
min: .500s max: .500s std dev: .00013s window:
average rate: 2.000
min: .500s max: .500s std dev: .00013s window:
^Caverage rate: 2.000

Ctrl+c终止运行

有发布就有订阅

订阅一个话题

topic_subscriber.py

订阅一个counter话题并打印他们接收到消息的最小节点

 1 #!/usr/bin/env python
import rospy
from std_msgs.msg import Int32
def callback(msg):
print msg.data
rospy.init_node('topic_subscriber')
sub=rospy.Subscriber('counter',Int32,callback)
rospy.spin()

确保发布者节点仍在运行并且仍在counter话题上发布消息,然后在另一个终端启动订阅者节点

如图

qqtsj@qqtsj-Nitro-AN515-:~/catkin_ws/src/basic$ rosrun basic topic_subscriber.py 

Ctrl+c 终止运行

这样完成了话题消息的发送和订阅

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机器人开发实践学习笔记3

    摘要: 刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young t ...

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

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

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

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

  6. ros机器人开发概述

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

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

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

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

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

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

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

随机推荐

  1. VC++取MD5算法记录下以后用得到(转)

    这个是网上扒下来的 作者已经无法知道是谁了 MD5.h #ifndef MD5_H #define MD5_H #include <string> #include <fstream ...

  2. $Poj1737\ Connected\ Graph$ 计数类$DP$

    AcWing Description 求$N$个节点的无向连通图有多少个,节点有标号,编号为$1~N$. $1<=N<=50$ Sol 在计数类$DP$中,通常要把一个问题划分成若干个子问 ...

  3. SingletonPattern(单例模式)-----Java/.Net

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一. 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创建自己的 ...

  4. 1053 住房空置率 (20 分)C语言

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为"可能空置&quo ...

  5. Python 植物大战僵尸代码实现: 图片加载和显示切换

    游戏介绍以前很火的植物大战僵尸游戏, 本想在网上找个python版本游戏学习下,无奈没有发现比较完整的,那就自己来写一个把.图片资源是从github上下载的,因为图片资源有限,只能实现几种植物和僵尸. ...

  6. JavaScript数据类型 - Symbol

    ES5:对象的属性名只能是字符串,当给对象添加新属性时,很容易造成属性名冲突,从而覆盖了原有的属性. ES6:所以ES6中引入了symbol数据类型,他表示独一无二的值,避免了属性名的冲突,此时对象的 ...

  7. makefile个人理解

    makefile makefile抽象层面的理解 学习某一样东西之前一定要明确学习的目的,即学习了这项工具能解决一些什么问题,其优势是什么? makefile的优势就是能够动态根据文件的新旧来决定是否 ...

  8. tomcat 介绍及环境搭建

    一.tomcat介绍 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型 系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选. ...

  9. Codeforces - A. Watermelon

    A. Watermelon time limit per test 1 second memory limit per test 64 megabytes input standard input o ...

  10. Go的内存对齐和指针运算详解和实践

    uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough t ...