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实现相关推荐

  1. 3.ROS编程学习:话题通信python

    目录 1.建立scripts文件夹与python文件 2.发布者实现 3.订阅者实现 4.CMakeList.txt配置 5.添加可执行权限 6.运行roscore+rosrun 7.计算图 8.注意 ...

  2. 【ROS话题通信】发布者和订阅者

    前言 本文记录ROS话题通信的学习过程,便于后续复习.首先明确,ROS中的话题通信,在ROS通信中非常重要,实现了分布式发布接收消息,也是实现了不同编程语言间的解耦,下面记录下自己学习过程中的相关代码 ...

  3. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  4. ROS学习小笔记(Topic通信 ,service通信,参数服务器)

    (菜鸡整理的学习笔记,原文链接已经挂上,不小心过来的朋友建议去博主那边学习,谢谢) 原文链接:https://blog.csdn.net/LoongEmbedded/article/details/1 ...

  5. ROS学习笔记-多机器人通信(1)-实现两台机器通信

    ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...

  6. 13.ROS编程学习:话题发布控制乌龟

    目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...

  7. 【ROS入门-4】嘴对嘴讲解ROS的核心概念——ROS话题通信机制

    文章目录 前言 ROS系列文章 ROS的通信机制 话题(topic) 发布者 订阅者 消息(Message) 用C++来写话题通信的代码 发布者 订阅者 使用rqt_graph 源码附录 引用说明 参 ...

  8. ROS笔记(7) 话题通信

    ROS笔记(7) 话题通信 1. 话题发布 2. 话题订阅 3. 话题通信 1. 话题发布 节点的话题发布: 初始化ROS节点 向ROS Master 注册节点信息 按照一定频率循环发布消息 使用py ...

  9. 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. ...

最新文章

  1. 【收藏】Anaconda详细安装使用教程
  2. 给键盘上的enter设置事件_Selenium3 + Python3自动化测试系列——鼠标事件和键盘事件...
  3. a3967驱动_以A3967SLB为核心的步进电机控制系统设计
  4. java词法分析_Hive源码系列(七)编译模块之词法、语法解析 (中)
  5. python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案
  6. 西门子plm_西门子PLM组件之形状搜索(支持工业软件国产自主可控)
  7. 在页面加载后执行任务
  8. 1×1的卷积核在卷积层的作用----网络中的网络
  9. 尤雨溪对 2022 Web前端生态趋势是这样看的
  10. android访问win10共享文件夹,用手机es文件浏览器访问win10系统共享文件的方法
  11. xxl-job + el-calendar实现任务日历制作
  12. pythondecode_Python decoder.decode方法代码示例
  13. 中国酒店周刊 | 上海万信福朋喜来登、包头茂业万豪、武汉江夏万枫酒店开业...
  14. chm打开秒退_CHM文件打开方式
  15. hadoop2和hadoop3的比较
  16. 性与潜能:性能量是一切天才的创造力源泉
  17. 状态寄存器传送指令 —— 访问(读写)CPSR寄存器
  18. (yiyan)玩转异地恋
  19. ORA-12545 / TNS-12545
  20. 探索最佳物联网全栈开发之道 | 附 PPT 下载

热门文章

  1. 李彦宏偷换概念还是危言耸听?
  2. 色盲悖论_关于被色盲
  3. 自适应OCXO漂移校正算法(翻译)
  4. 计算机开机总要按f1键,华硕主板开机需要按F1键怎么解决?华硕主板开机按f1的解决方法...
  5. 【光线追踪系列十四】蒙特卡洛积分与重要性采样
  6. c++之open_cv 图像的载入、显示与输出
  7. dns劫持解决办法、dns劫持是什么、dns劫持原理
  8. xyplorer的完美设置
  9. 程序员什么时候适合创业呢?
  10. SEM竞价员一天的工作流程了解一下?