ROS编程(一)写一个最简单的发布者订阅者
想把自己学过的东西慢慢整理成文章,一是巩固自己,二是分享知识。
教程参考的是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编程(一)写一个最简单的发布者订阅者相关推荐
- Java入门知识,写一个最简单java程序
本文目录 一.Java语言的简介 二.写一个最简单Java程序 1.Notepad配置 2.最简单的Java程序 3.代码分析 4.编译与编译常见错误 5.执行java程序 一.Java语言的简介 0 ...
- Day14作业 三、编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包)
三.编程题 写一个Student类,属性:名字,年龄,分数,班级 (注意分包) 写一个测试类:创建一个集合,里面装6个学生(有三个班级class01,class02,class03) 例如:list. ...
- c语言用矩形法计算积分,C++编程:写一个用矩形法求定积分的通用函数
C++编程:写一个用矩形法求定积分的通用函数 分别求: 说明:sina,cos,exp 函数已在系统的数学函数库中,程序开头要用#indlude 以下是此题的[c++源代码],需要[c源代码]请点击进 ...
- 用JAVA写一个最简单的飞翔的小鸟
如果你想写一个最简单的飞翔的小鸟的 Java 程序,可以先了解 Java 的图形绘制功能.Java 提供了一个叫做 Graphics 的图形绘制类,可以用来绘制图形.填充颜色.画线等. 你可以通过创建 ...
- 利用taichi写一个最简单的SPH(光滑粒子动力学)
简介 参考doyub Kim那本<Fluid Engine Development>写一个最简单的弱可压SPH. 目前有BUG, 粒子太散了 效果展示 CSDN有图片大小限制,大概就这样 ...
- java语言简单代码_java语言编程如何实现一个最简单程序?
在编程语言中,实践出结果是最重要的,其他的什么都是为此做准备,下面我们就来看看该如何编译一个最简单的java程序. 首先,启动你的编程软件,如eclipse等,具体可以网上了解, 再来,创建一个新的j ...
- python写一个很简单的Atm机系统,使用pickle模块和json模块来保存数据
我做的是一个很简单的Atm系统,很多都没约束条件 目的: 用面向对象思维来处理 运用文件的读写 文件的读写用pickle模块和json模块来处理 pickle模块: pickle模块处理数据功能很强大 ...
- Unity自学第一天, 新手小白进!写一个最简单的脚本让方块旋转起来
Unity自学入坑第一天 今天开始自学unity,如何让场景中的基本方块开始旋转起来,一个非常简单的小sample,作为入门,本人纯纯新手小白,之后会继续更新所有自学记录 在场景中添加一个方块,左边空 ...
- linux写一个最简单的操作系统,自己动手编写一个简单的操作系统
有人可能担心自己既没有学过计算机原理,也没有学过操作系统原理,更不懂汇编语言,对C语言也一知半解,能写操作系统吗?答案是没问题.我将带大家一步一步完成自己的操作系统.当然如果学一学上述内容再好不过. ...
最新文章
- 写个Vue小组件,图片滚动
- OSPF的route-id选举
- 【转】Extending Lync Server routing with MSPL
- 3.10 十进制转换为二进制
- Quantumas,作者太NB了,俺发现俺菜得跟猪一样!!!
- 的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术
- mysql8.0版本的服务器名称_云服务器Mysql安装配置
- RocketMQ源码解析-PullConsumer取消息(1)
- javascript DOM 方法
- Dreamweaver cs6 网页设计教程笔记
- 温故而知新,可以为师矣
- paddlepaddle 9 MC Dropout的使用
- php扩容方案,PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
- 收藏一个Ping的小工具类,可用于网络中检测目的设备是否在线
- java word 题目导入_Java导入导出Excel和Word
- OJ每日一练——爱跑步的师兄
- WIN10手动替换系统文件
- PSTN与VoIP相关知识
- 考研复试英文自我介绍模板(学长已上岸)
- 永不磨灭的设计模式(有这一篇真够了,拒绝标题党)