ROS机器人之话题(一)
将消息发布到话题上
首先建立一个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机器人之话题(一)的更多相关文章
- 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机器人开发实践学习笔记3
摘要: 刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young t ...
- 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 ...
随机推荐
- $vjudge\ CSP-S$专题专练题解
照例先放个链接$QwQ$ $A$ $QwQ$之前写过题解辣. 重新说下趴,就给横坐标纵坐标也开点,然后每个点连向对应横纵坐标边权为$0$,相邻横坐标点之间连边,相邻纵坐标点之间连边,跑个最短路就完事$ ...
- 洛谷$P3324\ [SDOI2015]$星际战争 网络流+二分
正解:网络流+二分 解题报告: 传送门$QwQ$ 其实我第一反应是费用流来着,,,但是仔细想了下发现我不会实现各个武器之间独立同时?而且攻击是连续的答案可能是小数嘛$QwQ$. 所以显然不是递推就二分 ...
- 洛谷$P$1486 郁闷的出纳员 $[NOI2004]$ $splay$
正解:$splay$ 解题报告: 传送门! 依然先考虑要呲呲些什么操作鸭$QwQ$ 其实就只要一个删除区间,一个查询第$k$大,还一个插入就欧克? 删除区间的话直接旋转下根什么的然后直接把子树删了就好 ...
- js获取当前农历时间
<template> <div class="gaia-header"> <img alt="gaia_logo" src=&qu ...
- 1045 快速排序 (25 分)C语言
著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 N 个互不相同的正整数的排列,请问 ...
- 个性化重排--Personalized Re-ranking for Recommendation
推荐中的个性化重排--Personalized Re-ranking for Recommendation 这篇文章是阿里在ResSys'19发表的,主要贡献是在重排序阶段,引入了用户的相关信息,很符 ...
- Windows系统下批处理快速创建WIFI
为什么要用cmd这种古老的东西创建wifi呢,电脑管家.360安全卫士都有这种插件,一键开启关闭,多方便啊! 开始用的也是电脑管家的免费wifi插件,但是我越来越不能忍它极慢的启动关闭过程,每一次看着 ...
- OOP之重载
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的. 属性的重载通过调用类中的__set,__get,__isset,__unset方法来分别实现对不存在属性的赋值.读取.判断属性是否设 ...
- [AI开发]小型数据集解决实际工程问题——交通拥堵、交通事故实时告警
这篇文章其实主要是想介绍在深度学习过程中如何使用小型数据集,这种数据集样本数量一般在1000以下,有时候甚至只有几百.一般提到神经网络,大家都会说数据量越丰富,准确性越高,但是实际工作中,可能收集不了 ...
- APICloud发布低代码开发平台
云原生的出现,致使传统IT模式正在集中向云架构.云开发转型,其中在企业业务的互联网化.数字化进程中尤为突出,并衍生出“敏捷开发”.“快速迭代”的刚性需求.面对双模IT,如何打造全新的IT团队与模式?并 ...