Python ROS服务和信息

Python ROS服务和信息,python,c++,robotics,ros,Python,C++,Robotics,Ros,我正在使用ROS系统,我是一个初学者。 我在ROS中遇到了服务和消息(srv和MSG)。从roswiki中,我了解到msg用于定义传递的消息类型,而服务是关于请求和响应的。如果我弄错了,请纠正我 然而,我无法理解何时使用它们。我认为如果我用Python编写C++和其他处理模块的模块可能会很有用,也许我可以使用SRV和MSGS来实现这2个模块之间的通信。然而,than ROS也有发布者和订阅者系统,可以使用它们来代替 其次,当我们使用srv时,我们不仅需要定义MSG,还需要定义可以独立使用的MSG

我正在使用ROS系统,我是一个初学者。 我在ROS中遇到了服务和消息(srv和MSG)。从roswiki中,我了解到msg用于定义传递的消息类型,而服务是关于请求和响应的。如果我弄错了,请纠正我

然而,我无法理解何时使用它们。我认为如果我用Python编写C++和其他处理模块的模块可能会很有用,也许我可以使用SRV和MSGS来实现这2个模块之间的通信。然而,than ROS也有发布者和订阅者系统,可以使用它们来代替


其次,当我们使用srv时,我们不仅需要定义MSG,还需要定义可以独立使用的MSG?

首先,让我向您指出:

这是
Ros
给出的第一个例子

发布者和订阅者是用于实现节点交互的实体。发布者将消息发布到某个频道,而订阅者收听此类频道以获取可能由发布者发送的消息。发布者使用消息发布到频道,消息中包含不同类型的数据,具体取决于试图实现的内容。订阅者接收这些消息并自动执行
回调函数
,以实现对数据有用的功能

现在让我在这里指出:

这是一个类似的例子,但这一次,服务用于实现通信。消息的情况是,一旦节点发布了消息,整个通信过程就结束了,节点将继续其剩余的工作。另一方面,客户端(使用服务)与服务器通信;他们将消息发布到服务器,然后等待该服务器的响应

示例:

  • 假设您有两个节点:第一个节点创建并发布随机整数,第二个节点获取这些数字并在屏幕上发布它们的平方。您可以想象,我们只需要消息:第一个节点不必等待第二个节点的应答。第一个节点将使用发布服务器提供整数,而第二个节点将使用订阅服务器获取这些整数并执行一个函数,该函数将发布它们的平方
  • 想象一下你想用ROS实现一个tic-tac-toe游戏:现在你想有3个节点:其中两个节点是相同的,它们代表两个玩家,而第三个节点将是处理棋盘的AI。现在AI将棋盘发布给玩家,但它也需要等待答案;答案将是当前玩家将选择的移动。这就是为什么这里必须使用服务
    如果您确保了解一个包含消息的简单程序和一个包含服务的简单程序,那么您可以通过创建示例来扩展您的知识,如上面所示。只有这样,你才能完全掌握它的全部细节。

    首先,让我在这里告诉你:

    这是
    Ros
    给出的第一个例子

    发布者和订阅者是用于实现节点交互的实体。发布者将消息发布到某个频道,而订阅者收听此类频道以获取可能由发布者发送的消息。发布者使用消息发布到频道,消息中包含不同类型的数据,具体取决于试图实现的内容。订阅者接收这些消息并自动执行
    回调函数
    ,以实现对数据有用的功能

    现在让我在这里指出:

    这是一个类似的例子,但这一次,服务用于实现通信。消息的情况是,一旦节点发布了消息,整个通信过程就结束了,节点将继续其剩余的工作。另一方面,客户端(使用服务)与服务器通信;他们将消息发布到服务器,然后等待该服务器的响应

    示例:

  • 假设您有两个节点:第一个节点创建并发布随机整数,第二个节点获取这些数字并在屏幕上发布它们的平方。您可以想象,我们只需要消息:第一个节点不必等待第二个节点的应答。第一个节点将使用发布服务器提供整数,而第二个节点将使用订阅服务器获取这些整数并执行一个函数,该函数将发布它们的平方
  • 想象一下你想用ROS实现一个tic-tac-toe游戏:现在你想有3个节点:其中两个节点是相同的,它们代表两个玩家,而第三个节点将是处理棋盘的AI。现在AI将棋盘发布给玩家,但它也需要等待答案;答案将是当前玩家将选择的移动。这就是为什么这里必须使用服务
    如果您确保了解一个包含消息的简单程序和一个包含服务的简单程序,那么您可以通过创建示例来扩展您的知识,如上面所示。只有这样,你才能完全掌握它的全部细节。

    ROS发布/订阅是多对多(就连接而言)和单向的 数据传输。它是异步的,这意味着您的代码不会阻塞,您需要实现一个异步操作的回调函数

    另一方面,ROS服务是同步的和一对一的双向数据传输,这意味着客户端阻塞并等待服务器的响应

    考虑以下情况:

  • 设想一个机器人和一个带有机器人模型的模拟器。模拟器需要实时更新机器人的模型(当真实世界中的机器人更改配置时,模拟器需要更新模型以反映该更改,以便模拟器中的机器人模型始终与真实机器人的当前配置保持最新)
  • <