不知道听谁说的:之后的人工智能会和机器人强烈结合,是下一个十年的技术趋势。
“ROS – 机器人操作系统 机器人操作系统 (ROS) 是一套软件库和工具,可帮助您构建机器人应用程序。从驱动程序到先进的算法,以及强大的开发者工具,ROS 可满足您下一个机器人项目的所有需求。而且它完全开源。”
ROS 和 ROS 2 简介
- 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 个汉字, 你数一下对不对.上一篇: C++的左值/lvalue, 右值/rvalue和右值引用/rvalue references
下一篇: C与C++: restrict关键字及其在编译器优化中的作用
扫描二维码,分享本文到微信朋友圈
