• 四、ROS2通信机制(话题)


    1 话题

    话题即ROS2中Topic通信方式,Topic通信模型是一种发布订阅模型

    1.1 话题的发布订阅模型

    A节点创建一个发布者Publisher来发布一个话题,B节点创建一个订阅者Subscriber来订阅A节点发布的话题。显然这是一个一对一的模型,除此以外,ROS2中话题通信还可以是1对n,n对1,n对n的。

    1.2 话题通信需要注意的规则

    1、话题名字是关键,发布订阅接口类型要相同。举个例子、发布的是字符串,接受也要字符串
    2、同一个节点可以订阅多个话题,也可以发布多个话题
    3、同一个话题可以有多个发布者

    1.3 ROS2话题相关命令行界面(CLI)工具

    查看指令 ros2 topic -h
    返回系统中当前活动的所有主题列表 ros2 topic list
    返回系统中当前活动的所有主题列表及其消息类型ros2 topic list -t
    打印实时话题内容 ros2 topic echo /话题名
    查看主题信息 ros2 topic info /话题名
    查看消息类型 ros2 interface show xxx
    手动发布命令 ros2 topic pub arg

    1.4 编写一个话题发布者流程

    1、导入消息类型

    from std_msgs.msg import String
    
    • 1

    2、声明并创建发布者

    #10是队列大小
    self.pub_novel = self.create_publisher(Strng, "话题名", 10)
    
    • 1
    • 2

    3、编写发布逻辑发布数据

    #时间周期
    self.timer_period = 5
    #定义一个回调
    def timer_callback(self):
    	msg = String()
    	msg.data = "xxxxxx"
    	self.pub_novel(msg)
    	self.get_logger().info("发布了一个话题消息, 内容是%s" % msg.data)
    #创建一个定时器,每一个周期去调用这个函数
    self.timer = self.create_timer(self.timer_period, self.timer_callback)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1.5 编写一个话题订阅者流程

    1、导入订阅的话题接口类型

    from std_msgs.msg import String,UInt32
    
    • 1

    2、传建订阅回调函数

    def recv_callback(self, money):
    	self.get_logger().info("收到话题")
    
    • 1
    • 2

    3、声明并创建订阅者

    self.sub = self.create_subscription(UInt32, "话题名", self.recv_callback, 10):
    	pass
    
    • 1
    • 2
  • 相关阅读:
    如何实现视频提取伴奏?看完包你学会~
    Document Object Model
    解决MySQL8.0本地计算机上的MySQL服务启动后停止没有报告任何错误
    什么是数据湖?全面解读数据湖与数据仓库的区别
    (附源码)ssm某物流公司的员工信息管理系统 毕业设计 261625
    ERR_NETWORK_CHANGED
    c++ 学习之 强制类型转换运算符 const_cast
    Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)
    关于DevExpress的设置记录
    sql注入
  • 原文地址:https://blog.csdn.net/weixin_44014982/article/details/128035176