Raspberry Pi 上 ROS 服务器/客户端通过GPIO 驱动硬件

ROS 服务

现在,想象一下你在你的电脑后面,你想从这个服务中获取天气。

你,在你身边,被认为是客户端,在线天气服务是服务器。您将能够通过带有 URL 的 HTTP 请求访问服务器。将 HTTP URL 视为 ROS 服务。

首先,您的计算机将向服务器发送请求。该请求将包含一条消息,在这种情况下是您的位置。然后服务器将处理请求,并发送响应。响应还将包含一条消息。

注意,为了通信,客户端发送的请求必须是一个位置,否则服务器将无法处理数据。并且服务器必须发回天气,否则客户端将无法理解响应是什么。

一项服务的多个客户

我们现在有一个客户端和一个服务器通过 ROS 服务进行通信。

但是,如果我们有多个客户呢? 这不是问题,所有客户端都会通过 HTTP URL 向服务器发送一个包含位置的请求。 然后服务器将处理请求并将响应发送回每个客户端。 请注意,同一服务不应超过一台服务器。

如您所见,在此示例中,我们有 3 个不同的计算机节点,一个节点用于天气服务。 HTTP URL 可以看作是一个 ROS 服务。

计算机节点包含一个服务客户端。该服务客户端将调用 ROS 服务并发送一个带有位置的请求。

另一方面,天气服务包含一个 ROS 服务服务器,它将处理所有请求并通过 ROS 服务发回响应。

同样,节点内的所有客户端和服务器都不知道彼此。他们只看到 ROS 服务接口。

机器人的例子

现在,让我们看另一个例子,这次直接处理机器人技术。此示例可以是真实 ROS 应用程序的一部分。

假设您的应用程序中有一个控制 LED 面板的节点。

该节点正在处理硬件以打开和关闭 LED。当然,您希望该节点能够与其他 ROS 节点通信。例如,其他节点可以要求此节点打开或关闭特定 LED。

在本例中,您创建了一个名为“Set Led”的 ROS 服务。在 Led 面板节点内,您为此 ROS 服务创建一个服务服务器。

现在,您有另一个处理电池的节点。其中一项功能是检查电池电量是否不足,并在发生时通知用户。为此,电池节点将包含一个用于“Set Led”服务的服务客户端。

想象一下,电池电量不足。当检测到时,电池节点将向 ROS 服务发送请求。它将发送一个 LED 编号和一个状态。

作为 LED 面板节点的服务器将期望接收该信息。如果数据结构与预期相同,则节点可以处理信息,并根据要求打开第三个 LED。

完成后,服务器将发回响应。 此处的此响应将包含成功标志。 在整个 ROS 服务过程中,电池节点都在等待。 收到此成功标志后,电池节点知道请求的操作已成功完成。

就这样,通讯结束了。服务器仍在运行并等待新请求。

稍后,在给电池充电后,电池节点检测到电池现在已充满。然后它将决定向“Set Led”服务发送一个新请求,以关闭第三个 LED。

服务器接收此请求,执行操作,并返回一个成功标志。通讯完成。

示例到此为止。您现在应该对什么是 ROS 服务以及何时应该使用它们有了更好的了解。

什么是ROS服务

ROS 服务是一个客户端/服务器系统。

以下是 ROS 服务的一些主要特征:

  • 它是同步的。客户端发送请求,并阻塞直到收到响应。
  • 您应该仅将 ROS 服务用于计算和快速操作。 例如,客户端将发送一些数据,并接收另一条数据,就像我们在天气服务中看到的那样。 您还可以将服务用于快速操作,例如,如果您想启用或禁用执行器,或任何立即操作。 由于服务调用被阻塞,你不希望你的客户端被卡住太久。
  • 服务由名称和一对消息定义。一条消息是请求,一条消息是响应。您必须尊重通信双方的数据格式。
  • 至于节点和主题,您可以直接在 ROS 节点内创建服务客户端和服务器,例如使用 c++ 的 rosccp 库和 Python 的 rospy 库。
  • 最后,也是很重要的一点,一个服务服务器只能存在一次,但可以有多个客户端。基本上,服务将在您创建服务器时创建。

本文介绍

在本教程中,我将向您展示如何在 Raspberry Pi 上编写完整的 ROS 服务。

您将看到如何创建 ROS 服务的两端:客户端和服务器。此外,为了让它更有趣,我们将使用 Raspberry Pi GPIO 驱动真正的硬件(使用中断)。

这是本教程的目标:当用户按下按钮时打开 LED,当用户松开按钮时关闭它。

Raspberry Pi

您可以使用 Raspberry Pi 4 或更早版本:3B、3B+。

设置

Raspberry Pi 上的 ROS 服务服务器

代码

代码分解

Raspberry Pi 上的 ROS 服务客户端

代码

代码分解

Raspberry Pi 上测试 ROS 服务

测试应用程序

调试您的 Raspberry Pi ROS 服务

参考链接

详情参阅 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值