将消息发布到话题上

首先建立一个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. 洛谷$P2153\ [SDOI2009]$ 晨跑 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 题目好长昂,,,大概概括下$QwQ$.就说有$n$个节点$m$条边,然后要求每次走的路径都不一样,问最多能走多少次,然后在次数最多的前提下问路径最短是多少$ ...

  2. $HDU1846\ Brave\ Game$ 博弈论

    正解:博弈论 解题报告: 传送门! 巴什博奕板子题鸭$QwQ$ 就有个结论,是说当$(m+1)\mid n$时先手必败,否则必胜 这个瞎证明一下就能出来 就考虑当$(m+1)\mid 1$时,若先手取 ...

  3. Spring的BeanPostProcessor后置处理器与bean的生命周期

    前言 本文将把Spring在Bean的生命周期中涉及到的后置处理器一一梳理出来,并简要说一下功能,至于每个后置处理器在实际扩展中的用处,还要后续慢慢探索总结. 正文 下面一步步跟进探寻那些后置处理器们 ...

  4. Java网络编程——UDP聊天程序

    UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...

  5. 个性化重排--Personalized Re-ranking for Recommendation

    推荐中的个性化重排--Personalized Re-ranking for Recommendation 这篇文章是阿里在ResSys'19发表的,主要贡献是在重排序阶段,引入了用户的相关信息,很符 ...

  6. .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法

    行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...

  7. 虚拟机安装LEDE旁路由实现软路由功能

    如何在虚拟上安装LEDE软路由,接下来我们一步一步操作. 1.首先到https://firmware.koolshare.cn/ 下载虚拟机下专用盘如图标记均可 2.虚拟机创建 选择下载好的文件 保持 ...

  8. 28.python操作excel表格(xlrd/xlwt)

    python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...

  9. 【LC_Lesson3】---回文数的判别

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  10. 【PCIE-4】---PCIE中部分概念或问题总结(很基础很重要)

    前面三小节,介绍了PCIE的基本知识和概念,以及扫描流程.在不求甚解的情况下,我想各位小伙伴应该对PCIE有了个宏观的认识,OK,那么本章我们在之前的基础上,再单独把一些概念和更深层次的问题摘出来具体 ...