想把自己学过的东西慢慢整理成文章,一是巩固自己,二是分享知识。

教程参考的是wiki.ros.org

目录:
1.创建功能包
2.写发布者代码,配置编译规则
3.写订阅者代码,配置编译规则
4.编译功能包
5.运行节点

1.在catkin_ws中创建功能包

在catkin_ws目录下打开终端

catkin_create_pkg beginner_tutorials rospy roscpp std_msgs

cd ~/catkin_ws

catkin_make

source devel/setup.bash

2.写发布者代码(Python) publisher/talker

在功能包下创建talker.py文件

> mkdir talker.py

可以直接在文本里写,还是在VS Code里写比较方便
talker.py代码:

#!/usr/bin/env python
#license removed for brevity
import rospy
from std_msgs.msg import Stringdef talker():pub = rospy.Publisher('chatter', String, queue_size=10)rospy.init_node('talker', anonymous=True)rate = rospy.Rate(10) # 10hzwhile not rospy.is_shutdown():hello_str = "hello world %s" % rospy.get_time()rospy.loginfo(hello_str)pub.publish(hello_str)rate.sleep()if __name__ == '__main__':try:talker()except rospy.ROSInterruptException:pass

代码大意:定义节点为“chatter”的发布者,声明节点用字符串消息类型发布chatter话题,创建talker节点,发布频率为10hz,每秒10次,节点活动的话,继续发布消息,消息内容是“hello world+时间”,在日志中记录消息,发布。

3.写订阅者代码(Python) listener/subscriber

在功能包下创建listener.py文件

> mkdir listener.py

listener.py代码:

import rospy
from std_msgs.msg import Stringdef callback(data):rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)def listener():rospy.init_node('listener', anonymous=True)rospy.Subscriber('chatter', String, callback)rospy.spin()
if __name__ == '__main__':listener()

跟发布者类似,但引入一种新的基于回调的订阅消息机制。
都写完之后,添加以下内容到CMakeList.txt里的这个位置,意思要设置需要编译的代码和生成可执行文件

catkin_install_python(PROGRAMS scripts/talker.py DESTINATION
${CATKIN_PACKAGE_BIN_DESTINATION} )

catkin_install_python(PROGRAMS scripts/talker.py scripts/listener.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )

4.编译功能包

将两个Python文件设置为程序可执行文件
在catkin_ws目录下catkin_make

5.运行节点

启动roscore节点
启动两个终端分别运行两个节点:

rosrun beginner_tutorials talker.py
rosrun beginner_tutorials listener.py

实现效果:

ROS编程(一)写一个最简单的发布者订阅者相关推荐

  1. Java入门知识,写一个最简单java程序

    本文目录 一.Java语言的简介 二.写一个最简单Java程序 1.Notepad配置 2.最简单的Java程序 3.代码分析 4.编译与编译常见错误 5.执行java程序 一.Java语言的简介 0 ...

  2. Day14作业 三、编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包)

    三.编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包) 写一个测试类:创建一个集合,里面装6个学生(有三个班级class01,class02,class03) 例如:list. ...

  3. c语言用矩形法计算积分,C++编程:写一个用矩形法求定积分的通用函数

    C++编程:写一个用矩形法求定积分的通用函数 分别求: 说明:sina,cos,exp 函数已在系统的数学函数库中,程序开头要用#indlude 以下是此题的[c++源代码],需要[c源代码]请点击进 ...

  4. 用JAVA写一个最简单的飞翔的小鸟

    如果你想写一个最简单的飞翔的小鸟的 Java 程序,可以先了解 Java 的图形绘制功能.Java 提供了一个叫做 Graphics 的图形绘制类,可以用来绘制图形.填充颜色.画线等. 你可以通过创建 ...

  5. 利用taichi写一个最简单的SPH(光滑粒子动力学)

    简介 参考doyub Kim那本<Fluid Engine Development>写一个最简单的弱可压SPH. 目前有BUG, 粒子太散了 效果展示 CSDN有图片大小限制,大概就这样 ...

  6. java语言简单代码_java语言编程如何实现一个最简单程序?

    在编程语言中,实践出结果是最重要的,其他的什么都是为此做准备,下面我们就来看看该如何编译一个最简单的java程序. 首先,启动你的编程软件,如eclipse等,具体可以网上了解, 再来,创建一个新的j ...

  7. python写一个很简单的Atm机系统,使用pickle模块和json模块来保存数据

    我做的是一个很简单的Atm系统,很多都没约束条件 目的: 用面向对象思维来处理 运用文件的读写 文件的读写用pickle模块和json模块来处理 pickle模块: pickle模块处理数据功能很强大 ...

  8. Unity自学第一天, 新手小白进!写一个最简单的脚本让方块旋转起来

    Unity自学入坑第一天 今天开始自学unity,如何让场景中的基本方块开始旋转起来,一个非常简单的小sample,作为入门,本人纯纯新手小白,之后会继续更新所有自学记录 在场景中添加一个方块,左边空 ...

  9. linux写一个最简单的操作系统,自己动手编写一个简单的操作系统

    有人可能担心自己既没有学过计算机原理,也没有学过操作系统原理,更不懂汇编语言,对C语言也一知半解,能写操作系统吗?答案是没问题.我将带大家一步一步完成自己的操作系统.当然如果学一学上述内容再好不过. ...

最新文章

  1. 写个Vue小组件,图片滚动
  2. OSPF的route-id选举
  3. 【转】Extending Lync Server routing with MSPL
  4. 3.10 十进制转换为二进制
  5. Quantumas,作者太NB了,俺发现俺菜得跟猪一样!!!
  6. 的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术
  7. mysql8.0版本的服务器名称_云服务器Mysql安装配置
  8. RocketMQ源码解析-PullConsumer取消息(1)
  9. javascript DOM 方法
  10. Dreamweaver cs6 网页设计教程笔记
  11. 温故而知新,可以为师矣
  12. paddlepaddle 9 MC Dropout的使用
  13. php扩容方案,PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
  14. 收藏一个Ping的小工具类,可用于网络中检测目的设备是否在线
  15. java word 题目导入_Java导入导出Excel和Word
  16. OJ每日一练——爱跑步的师兄
  17. WIN10手动替换系统文件
  18. PSTN与VoIP相关知识
  19. 考研复试英文自我介绍模板(学长已上岸)
  20. 永不磨灭的设计模式(有这一篇真够了,拒绝标题党)

热门文章

  1. 【数学建模】清风视频笔记4、拟合算法
  2. mysql经典案例练习
  3. ceisum禁止鼠标左键和右键拖动,滚轮缩放事件
  4. css中border边框纹理,使用CSS3实现的几种纹理图案和大象拼图
  5. sqlsever回滚操作_SqlServer 事务回滚(1)
  6. QT在线安装过程中,无法下载存档,解决方法
  7. 数据分析思维学习1:业务指标、数据获取、数据仓库、数据治理、数据分析方法
  8. 应用计算机技术和人工智能技术 根据,计算机人工智能技术的应用与发展
  9. Revit 安装补丁的下载链接
  10. html 换行特殊符号,html中的换行符号