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 ...
随机推荐
- mac系统Docker安装Redis教程
在之前介绍过mac系统安装docker,以及docker安装mysql的傻瓜式教程,如果有需要参考的朋友,可以看下面文章: MacOS安装Docker傻瓜式教程 mac系统下docker安装配置mys ...
- $NOIp$普及组做题记录
\([NOIp2014]\) 螺旋矩阵 \(Sol\) 直接模拟,一次走一整行或者一整列.复杂度\(O(n)\). \(Code\) #include<bits/stdc++.h> #de ...
- $Poj2083/AcWing118\ Fractal$ 模拟
$AcWing$ $Sol$ 一年前做过差不多的南蛮图腾,当时做出来还是很有成就感的$OvO$ $N<=7$,就是模拟模拟,预处理一下,$over$ $Code$ #include<bit ...
- 克隆linux系统后,将eth1修改成eth0
使用VMware克隆的linux系统之后,发现网卡信息只有eth1,却没有eth0.将eth1修改成eth0. 1.vi /etc/udev/rules.d/70-persistent-net.rul ...
- spring boot使用拦截器
1.编写一个拦截器 首先,我们先编写一个拦截器,和spring mvc方式一样.实现HandlerInterceptor类,代码如下 package com.example.demo.intercep ...
- matlab数组相除
%数组的除法 clear all %清空MATLAB中的数据 a=[ ] b=[ ] c=a./b %a/b 对应位置相除 d=a.\b %b/a e=a./ %数组与常数相除 f=a/ 运行结果如下
- MySQL数据库(三)
前提要述:参考书籍<MySQL必知必会> 2.1 MySQL简介 2.1.1 什么是MySQL MySQL是一种关系数据库管理系统.负责数据库中数据的存储,检索,管理和处理. 2.1.2 ...
- MySQL定时备份(全量备份+增量备份)
MySQL 定时备份 参考 zone7_ 的 实战-MySQL定时备份系列文章 参考 zmcyu 的 mysql数据库的完整备份.差异备份.增量备份 更多binlog的学习参考马丁传奇的 MySQL的 ...
- Elasticsearch系列---实战零停机重建索引
前言 我们使用Elasticsearch索引文档时,最理想的情况是文档JSON结构是确定的,数据源源不断地灌进来即可,但实际情况中,没人能够阻拦需求的变更,在项目的某个版本,可能会对原有的文档结构造成 ...
- 三、JVM之方法区
一.什么式方法区 方法区,也称非堆(Non-Heap),又是一个被线程共享的内存区域.其中主要存储加载的类字节码.class/method/field等元数据对象.static-final常量.sta ...