深入理解ROS中的Topics, Services和Actions(含示例)


不知道听谁说的:之后的人工智能会和机器人强烈结合,是下一个十年的技术趋势

“ROS – 机器人操作系统 机器人操作系统 (ROS) 是一套软件库和工具,可帮助您构建机器人应用程序。从驱动程序到先进的算法,以及强大的开发者工具,ROS 可满足您下一个机器人项目的所有需求。而且它完全开源。”

ROS 和 ROS 2 简介

ros-robot-operating-system 深入理解ROS中的Topics, Services和Actions(含示例) 学习笔记 机器人 ROS

ROS: Robot Operating System 机器人操作系统

  • ROS(机器人操作系统) 是一个灵活的机器人软件开发框架。它提供工具、库和约定,用于简化在各种机器人平台上构建复杂且可靠的行为。
  • ROS 2 是 ROS 的下一代版本,解决了实时性能、安全性和多平台支持等问题。其底层使用 DDS(数据分发服务)实现可扩展且可靠的通信。

可以到官网学习:ros.org

ROS 中的核心通信概念

  • Topics(主题) – 用于节点间异步传输流式数据。
  • Services(服务) – 用于同步的请求/响应通信。
  • Actions(动作) – 用于带反馈和可取消的长时间运行任务。

1. Topics(主题)

什么是 Topics?

  • Topics 提供发布/订阅通信模式。
  • 一个节点发布数据,其他节点订阅。
  • 非常适合用于持续流数据(如传感器数据)。

主要特点

通信模式 发布 / 订阅
方向 单向
同步性 异步
典型用途 图像、激光、IMU、状态信息

示例代码

# 发布者(Publisher)
pub = rospy.Publisher('/chatter', String, queue_size=10)
pub.publish("你好,世界!")

# 订阅者(Subscriber)
def callback(msg):
    rospy.loginfo(msg.data)
sub = rospy.Subscriber('/chatter', String, callback)

2. Services(服务)

什么是 Services?

  • 提供一种同步、请求-响应的通信方式。
  • 适用于执行一次性任务,并获得返回值。
  • 客户端请求,服务器响应。

主要特点

通信模式 请求 / 响应
方向 双向
同步性 同步(阻塞)
典型用途 获取传感器快照、配置设置、参数查询

示例代码

# 服务端(Server)
def handle_add(req):
    return req.a + req.b

service = rospy.Service('add_two_ints', AddTwoInts, handle_add)

# 客户端(Client)
rospy.wait_for_service('add_two_ints')
add = rospy.ServiceProxy('add_two_ints', AddTwoInts)
resp = add(1, 2)

3. Actions(动作)

什么是 Actions?

  • 适合需要反馈、持续时间较长并可中断的任务。
  • 如导航、机械臂运动等。
  • 由客户端发送“目标”,服务器处理并定期反馈进度。

主要特点

通信模式 目标 / 状态 / 反馈
方向 双向
同步性 异步 + 反馈机制
典型用途 导航、移动、长任务控制

示例代码

# 发送目标
client = actionlib.SimpleActionClient('move_base', MoveBaseAction)
client.wait_for_server()
goal = MoveBaseGoal()
goal.target_pose.header.frame_id = "map"
goal.target_pose.pose.position.x = 1.0
client.send_goal(goal)
client.wait_for_result()

# 服务器
def execute_cb(goal):  
    # 执行任务
    feedback = MoveBaseFeedback()  
    result = MoveBaseResult()  
    server.set_succeeded(result)  

server = actionlib.SimpleActionServer('move_base', MoveBaseAction, execute_cb, False)  
server.start()

ROS 中 Action 和 Service 的区别

特性 Service(服务) Action(动作)
通信模式 请求 / 响应 目标 / 反馈 / 结果
是否同步 是(阻塞) 否(非阻塞)
任务持续时间 长时间运行
支持反馈
可取消
适用场景 快速查询或配置 需要进度反馈的长任务,如导航

类比

  • Service 类似于调用函数并等待返回结果
  • Action 类似于在后台启动任务并持续检查进度

结语

  • Topics、Services 和 Actions 是 ROS 中进行节点间通信的三大机制。
  • 合理选择通信方式将帮助构建更加稳定、高效的机器人系统。

ROS (Robot Operating System) 机器人操作系统

英文:ROS Topics, Services and Actions Explained with Clear Examples

本文一共 830 个汉字, 你数一下对不对.
深入理解ROS中的Topics, Services和Actions(含示例). (AMP 移动加速版本)
上一篇: C++的左值/lvalue, 右值/rvalue和右值引用/rvalue references
下一篇: C与C++: restrict关键字及其在编译器优化中的作用

扫描二维码,分享本文到微信朋友圈
f41fe787e9627e4c46960db07675c743 深入理解ROS中的Topics, Services和Actions(含示例) 学习笔记 机器人 ROS

评论