ROS学习(一)——话题通信的C++与Python实现
ROS学习(一)——话题通信的C++与Python实现
引言:本文分为三个部分,分别为话题通信的理论模型以及其C++与Python的实现代码。
一、理论模型
在我们的实际使用中,需要注意的几个东西就是以下几个概念:(1)话题。(2)订阅。(3)发布。他们其中的关系我们可以用一个例子来表述:假设我们现在正在相亲,我们和女方聊天,现在我们提出了一个问题:“结婚以后房子写谁的名字?”,那么我们这时候的话题就是“房子”,我们就是发布方,而接话的女方就是订阅方。
二、C++实现
1、发布实现:
C++的发布代码分为以下几步:
(1)引入ros/ros.h、std_msgs/String.h头文件
(2)初始化节点:
ros::init(argc,argv,“节点名称”);
(3)创建发布方:我们发布的是String类型的数据,所以模板中是std_msgs::String
ros::NodeHandle nh; //创建句柄
ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name",10); //创建发布对象
std_msgs::String msg; //创建要发布的信息
(4)编写发布逻辑:
ros::Rate rate(1);//1HZ
while(ros::ok())
{msg.data = "hello,world";pub.publish(msg);rate.sleep;ros::spinOnce();
}
(5)配置CMakeLists.txt
add_executable(demopub src/demopub.cpp)
target_link_libraries(demopub${catkin_LIBRARIES}
)
(6)编译
catkin_make
(7)结果演示
2、订阅实现:
C++的订阅代码分为以下几步:
(1)引入ros/ros.h、std_msgs/String.h头文件
(2)初始化节点:
ros::init(argc,argv,“节点名称”);
(3)创建订阅方:其中callback为接受到数据之后的回调函数
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("topic_name",10,callback);
ros::spin(); //!!!非常重要,如果不加,会导致只能接收到一次数据
(4)回调函数:次函数在主函数前编写
void callback(const std_msgs::String::ConstPtr &msg)
{ROS_INFO("消息是:%s",msg->data.c_str()); //将接收到的数据打印
}
(5)配置CMakeLists.txt
add_executable(demosub src/demosub.cpp)
target_link_libraries(demosub${catkin_LIBRARIES}
)
(6)编译
catkin_make
(7)结果演示:
三、Python实现:
python实现步骤相较于C++流程基本一致:
1.发布实现
#! /usr/bin/env python
#导包
import rospy
from std_msgs.msg import Stringif __name__ == "__main__":rospy.init_node("pub_name") #初始化节点pub = rospy.Publisher("topic_name",String,queue_size=10) #创建发布方msg = String() #创建需要发送的信息类rate = rospy.Rate(1)while not rospy.is_shutdown(): //若接收到信息rospy.is_shutdown()返回0msg.data = "hello" pub.publish(msg)rate.sleep()
配置CMakeLists.txt:
catkin_install_python(PROGRAMSscripts/demopub.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
2.订阅实现
#! /usr/bin/env python import rospy
from std_msgs.msg import Stringdef callback(msg):rospy.loginfo("订阅的数据为:%s",msg.data)if __name__ == "__main__":rospy.init_node("sub_name")sub = rospy.Subscriber("topic_name",String,callback,queue_size=10)rospy.spin()
配置CMakeLists.txt:
catkin_install_python(PROGRAMSscripts/demosub.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
ROS学习(一)——话题通信的C++与Python实现相关推荐
- 3.ROS编程学习:话题通信python
目录 1.建立scripts文件夹与python文件 2.发布者实现 3.订阅者实现 4.CMakeList.txt配置 5.添加可执行权限 6.运行roscore+rosrun 7.计算图 8.注意 ...
- 【ROS话题通信】发布者和订阅者
前言 本文记录ROS话题通信的学习过程,便于后续复习.首先明确,ROS中的话题通信,在ROS通信中非常重要,实现了分布式发布接收消息,也是实现了不同编程语言间的解耦,下面记录下自己学习过程中的相关代码 ...
- ROS学习笔记(八): ROS通信架构
ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...
- ROS学习小笔记(Topic通信 ,service通信,参数服务器)
(菜鸡整理的学习笔记,原文链接已经挂上,不小心过来的朋友建议去博主那边学习,谢谢) 原文链接:https://blog.csdn.net/LoongEmbedded/article/details/1 ...
- ROS学习笔记-多机器人通信(1)-实现两台机器通信
ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...
- 13.ROS编程学习:话题发布控制乌龟
目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...
- 【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制
文章目录 前言 ROS系列文章 ROS的通信机制 话题(topic) 发布者 订阅者 消息(Message) 用C++来写话题通信的代码 发布者 订阅者 使用rqt_graph 源码附录 引用说明 参 ...
- ROS笔记(7) 话题通信
ROS笔记(7) 话题通信 1. 话题发布 2. 话题订阅 3. 话题通信 1. 话题发布 节点的话题发布: 初始化ROS节点 向ROS Master 注册节点信息 按照一定频率循环发布消息 使用py ...
- ROS学习笔记6(理解ROS话题)
文章目录 1 启动 1.1 roscore 1.2 turtlesim 1.3 turtel_teleop_key 2 ROS 话题 2.1 使用rqt_graph 2.2 使用rostopic 2. ...
最新文章
- 【收藏】Anaconda详细安装使用教程
- 给键盘上的enter设置事件_Selenium3 + Python3自动化测试系列——鼠标事件和键盘事件...
- a3967驱动_以A3967SLB为核心的步进电机控制系统设计
- java词法分析_Hive源码系列(七)编译模块之词法、语法解析 (中)
- python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案
- 西门子plm_西门子PLM组件之形状搜索(支持工业软件国产自主可控)
- 在页面加载后执行任务
- 1×1的卷积核在卷积层的作用----网络中的网络
- 尤雨溪对 2022 Web前端生态趋势是这样看的
- android访问win10共享文件夹,用手机es文件浏览器访问win10系统共享文件的方法
- xxl-job + el-calendar实现任务日历制作
- pythondecode_Python decoder.decode方法代码示例
- 中国酒店周刊 | 上海万信福朋喜来登、包头茂业万豪、武汉江夏万枫酒店开业...
- chm打开秒退_CHM文件打开方式
- hadoop2和hadoop3的比较
- 性与潜能:性能量是一切天才的创造力源泉
- 状态寄存器传送指令 —— 访问(读写)CPSR寄存器
- (yiyan)玩转异地恋
- ORA-12545 / TNS-12545
- 探索最佳物联网全栈开发之道 | 附 PPT 下载