ROS2核心概念

节点

创建节点流程

  • 编程接口初始化
  • 创建节点并初始化
  • 实现节点功能
  • 销毁节点并关闭接口
#!/usr/bin/env python3
import rclpy # ROS2 Python接口库
from rclpy.node import Node # ROS2 节点类
import time """
创建一个HelloWorld节点, 初始化时输出“hello world”日志
"""
class HelloWorldNode(Node):
def __init__(self, name):
super().__init__(name) # ROS2节点父类初始化
while rclpy.ok(): # ROS2系统是否正常运行
self.get_logger().info("Hello World") # ROS2日志输出
time.sleep(0.5) # 休眠控制循环时间 def main(args=None): # ROS2节点主入口main函数
rclpy.init(args=args) # ROS2 Python接口初始化
node = HelloWorldNode("node_helloworld_class") # 创建ROS2节点对象并进行初始化
rclpy.spin(node) # 循环等待ROS2退出
node.destroy_node() # 销毁节点对象
rclpy.shutdown() # 关闭ROS2 Python接口

发布/订阅模型

话题数据传输的特性是从一个节点到另外一个节点,发送数据的对象称之为发布者,接收数据的对象称之为订阅者,每一个话题都需要有一个名字,传输的数据也需要有固定的数据类型。

消息接口

最后,既然是数据传输,发布者和订阅者就得统一数据的描述格式,不能一个说英文,一个理解成了中文。在 ROS 中,话题通信数据的描述格式称之为消息,对应编程语言中数据结构的概念。比如这里的一个图像数据,就会包含图像的长宽像素值、每个像素的RGB等等,在ROS中都有标准定义。

消息是ROS中的一种接口定义方式,与编程语言无关,我们也可以通过.msg后缀的文件自行定义,有了这样的接口,各种节点就像积木块一样,通过各种各样的接口进行拼接,组成复杂的机器人系统。

 
 
  • 话题通信接口的定义使用的是.msg文件,由于是单向传输,只需要描述传输的每一帧数据是什么就行,比如在这个定义里,会传输两个32位的整型数,x、y,我们可以用来传输二维坐标的数值。

  • 服务通信接口的定义使用的是.srv文件,包含请求和应答两部分定义,通过中间的“---”区分,比如之前我们学习的加法求和功能,请求数据是两个64位整型数a和b,应答是求和的结果sum。

  • 动作是另外一种通信机制,用来描述机器人的一个运动过程,使用.action文件定义,比如我们让小海龟转90度,一边转一边周期反馈当前的状态,此时接口的定义分成了三个部分,分别是动作的目标,比如是开始运动,运动的结果,最终旋转的90度是否完成,还有一个周期反馈,比如每隔1s反馈一下当前转到第10度、20度还是30度了,让我们知道运动的进度。

最新文章

  1. System进程(pid=4)占用80端口的解决方案
  2. Orchard part8
  3. excel表格中关于 撤销工作表保护密码
  4. windows下的C/C++精确计时
  5. 转载 a href=#与 a href=javascript:void(0) 的区别
  6. [Angular 2] Create Shareable Angular 2 Components
  7. 一张图读懂Java多线程
  8. Android开发中用到的框架、库介绍
  9. sql server日期字段值的比较
  10. yii2 windows 安装
  11. 5.IP选路,动态选路
  12. Nginx负载均衡搭建(Window与Linux)
  13. 【Unity3D技术文档翻译】第1.4篇 AssetBundle 依赖关系
  14. APIO 2014
  15. php cli模式和浏览器访问下加载php.ini文件的注意事项[架构篇]
  16. Eclipse布局问题小记
  17. [xdoj] 1310 DSKer的卡牌游戏
  18. SqlDataAdapter介绍【五】
  19. svn在commit后报错:is scheduled for addition, but is missing
  20. 随web应用启动而自启动的后台线程

热门文章

  1. 这些 JavaScript 笔试题你能答对几道?
  2. 血药谷浓度能否区分经TNF拮抗剂诱导获得缓解和低活动度的RA患者
  3. JZOJ 6664. 【2020.05.28省选模拟】最优化
  4. LeetCode-1609 奇偶树
  5. Linux操作命令(四) 1.which命令 2.whereis命令 3.locate命令
  6. 随机颜色,加载loading效果,节流,应用周期函数,wxs
  7. docker问题记录解决
  8. 【Redis的三种数据删除策略】定时定期惰性,超出内存就自动清理
  9. 在ubuntu的docker中apt-get update更新失败:GPG error: https://developer.download.nvidia.cn/compute/cuda/repos/ubuntu180,,,,,
  10. rocketmq集群配置