将消息发布到话题上

首先建立一个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. Prometheus + Grafana 部署说明之「安装」

    说明 在前面的Prometheus学习系列文章里,大致介绍说明了Prometheus和Grafana的一些使用,现在开始介绍如何从头开始部署Prometheus+Grafana,来监控各个相关的指标数 ...

  2. vc++ 监控指定路径下文件变化

    参考MSDN文档 https://docs.microsoft.com/zh-cn/windows/desktop/api/winbase/nf-winbase-readdirectorychange ...

  3. 多vps管理面板

           iis7远程桌面连接工具,又叫做iis7远程桌面管理软件,是一款绿色小巧,功能实用的远程桌面管理工具,其界面简洁,操作便捷,能够同时远程操作多台服务器,并且多台服务器间可以自由切换,适用 ...

  4. 曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上)

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  5. 漏洞挖掘 | 远程WWW服务支持TRACE请求

    允许TRACE方法 漏洞描述 目标WEB服务器启用了TRACE方法.TRACE方法是HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的 ...

  6. K8s生产架构

    部分图片显示问题,特附上有道云笔记中的链接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4 ...

  7. JWT实现授权认证

    目录 一. JWT是什么 二. JWT标准规范 三. 核心代码简析 四. 登录授权示例 五. JWT 使用方式 六. JWT注意事项 一. JWT是什么 JSON Web Token(JWT)是目前最 ...

  8. Fastadmin 如何引入 layui 模块

    FastAdmin基于RequireJS进行前端JS模块的管理,因此如果我们需要再引入第三方JS插件,则必按照RequireJS的规则进行载入.如果你还不了解什么是RequireJS,可以先简单了解下 ...

  9. java小项目之:象棋,羡慕你们有对象的!

    象棋,是我国传统棋类益智游戏,在中国有着悠久的历史,属于二人对抗性游戏的一种,由于用具简单,趣味性强,成为流行极为广泛的棋艺活动.中国象棋是中国棋文化也是中华民族的文化瑰宝. 象棋还有很多口诀,这是最 ...

  10. 【Java基础总结】IO流

    字节流 1. InputStream 字节输入流 代码演示 InputStream in = System.in; System.out.println("int read(byte b) ...