大家好，再次欢迎
观看新视频，在这种情况下，我们将
在第 1 部分中查看罗斯中的第 3 单元服务，但在
开始服务之前，让我
祝贺您，因为您
已经完成了主题单元
我告诉你，这是
罗斯最重要的事情之一，
因为如果你想了解罗斯，你几乎可以掌握任何主题
，祝贺
你，因为你已经在罗斯的学习过程中取得了很大的成就
，然后你
会说好的 如果我们停下来是我
几乎可以做任何事情
为什么我需要很好地学习服务
，因为使用主题 Yates - 您
几乎可以做任何事情，但在某些情况下，
使用主题和服务来实现它会太麻烦太难了，这
将使您的生活 更容易是的 所以
这就是为什么你需要了解
服务然后是的 让我们开始 什么
是服务 顾名思义，服务
基本上是一个提供 func 的 Ross 问题程序
您可以调用此 Ross 服务，以便
在每次一起执行操作时
，
您可以调用 Ross 服务，该服务将
移动机器人
执行一个圆圈，所以
让我们解释一个简单的示例，以便
您可能有更清晰的想法
例如，让我们看一个非常
简单的示例，它是
为了区分主题
服务和操作，因为这可以
帮助您了解什么是服务
以及
服务和主题之间有什么区别是
的 所以让我们是的 让我们来做这个例子
，例如在机器中你有你
自己的个人 bb-8 机器人在这种情况下
让我们谈谈歌舞伎机器人，
因为它是你必须
在主题中使用它的一个所以想象你
有一个歌舞伎罗伯特然后这个
像你
在上一个单元中一样的 cookie 机器人有一个激光传感器
然后说它还有一个
人脸识别系统和一个导航
系统
是的，人脸识别系统是
识别人脸和
导航系统，移动
机器人，然后导航机器人，所以
激光这个激光将把它的
信息发布到一个主题中
一个主题，这是这样完成的，
因为您需要在上一章
中始终可用的内容是
的 将数据转换为主题，因为您需要
随时提供这些数据
随时提供服务，该服务会
告诉您将
在其内部代码中执行其内部程序的内容，并会
告诉您该阶段是男性还是
女性，例如是
t 当您调用该服务时，该
服务会告诉您嘿，我正在
识别男人或我正在识别一个
女人，然后根据您拥有的数据，
您可以做任何您想做的事情，
例如，您可以执行一个程序，说“
你好男人”或“你好” 女人，我不知道
是的，但是服务就是为了那个，所以你
有那个服务，它提供
了一个识别信仰的 ID，然后
你可以打电话给那个服务，那个
服务会告诉你嘿，我正在
识别一个男人，或者我正在识别
例如一个女人是的
然后行动 什么是
行动 你将在下一个单元看到什么行动
但让我们做一个非常简短的
介绍，所以你什么时候会使用
行动，这样你就有了
持续信息的主题，例如
你的激光读数 有一个服务，它
提供了一个你可以随时调用的功能
，它现在会给你一个
响应，最后你有一个动作
，例如可以说它
是使
机器人移动的导航系统 e yes 会让机器人转
一圈并停在
点火点
也可以通过服务实现这一点，这样我
就可以创建一个服务，当我调用它时
，机器人将执行该运动
并停止，是的，
如果您愿意，您可以使用该服务执行此操作，但是
您对服务的体验
如何 必须等到机器人
执行该功能，因此
该服务的功能是
与机器人一起执行圆周运动，
然后当您调用该服务时，您
必须等到它完成才能
继续我们的程序是的，您
必须等到 Sara 在一个动作中完成，
你没有那个限制，所以在一个
动作中，你认为
执行该动作的所有动作，同时
机器人正在做它必须做的任何
动作，在这种情况下你可以 eep 做
其他事情是的，所以你可以保持不你
可以继续拍摄
环境照片是的，例如，这是服务和动作
之间的主要区别
，这
意味着服务是同步的，而
动作是同步的，是的，
所以当你使用服务时 呼叫
服务人员您必须等到
服务完成并给您
响应才能继续执行您的
程序是的，您不必
等待您可以在操作进行时执行其他
操作是的，
这非常重要，好吧 所以是的，
让我们从服务开始，
首先让我们从他的
示例 3.1 开始，所以我们将在
这里执行这些 dis 命令
在这里执行此命令，让我们与网络秀竞争，例如
迷迭香中的一个或
开始演示点大，让我们
在此处执行此命令，您可以看到
机器人启动了movi ng 开始做
运动 是的 在这种情况下运动
好的 所以这里发生了什么 好
它很简单 让我们没关系 所以
这里刚刚发生了什么
所以基本上我们
在这里执行的启动文件 是的 这个开始 抱歉
这个开始演示点 启动文件的
作用是启动两个节点是的
第一个第一个音符是令人毛骨悚然的
一个再现轨迹我们将
看到稍后对这些启动文件有更深的循环
所以不要担心但是
是的这不是很好的启动两个 节点
假设第一个节点
启动服务，因此
任何人都可以调用该
服务 首先启动服务，
您总是需要先启动服务，
然后才能调用它，
然后它正在调用此服务，在
这种情况下，该服务的作用是
执行您在此处看到的动作
使用 Walmart 是的，那么
是的，让我们继续它的示例 3.2，
所以是的，让您想要离开这个
休息室，以便继续执行，
所以我们要检查的第一个命令
是这个 rush service list
命令，所以让我们执行 它在另一个
网上商店中，正如您所看到的，这就像
您看到的带有主题的花名册大列表，
但对于服务，因此此命令或
服务列表为我们提供了一个列表，
其中包含此模拟
提供的所有服务是的，您可以看到是的所有
因此，您可以
从这里的模拟器中的凉亭中的摄像头中看到一些服务
从机器人本身中 是
的，对于控制器来说，加入
关键网络摄像头的空气很好，
正如您
在此名册发布中所看到的那样，您可以看到许多服务 命令我们
得到所有可用服务的列表
是的记住就像花名册但是
对于服务然后是的我们有这个
交叉服务信息命令是的所以这
也是最糟糕的国王
但是 对于服务，因此通过执行
原始服务信息和服务名称，
我们将获得有关
该服务的信息是的，例如，让
我们为该执行轨迹服务执行此操作，
这是这里的服务是的，这是
我们使用此启动文件开始的服务
以及为了执行这些动作而被调用的服务
是的所以
这是执行轨迹服务
所以让我们在这里执行这个命令
是的，并在那里检查有关
此服务的一些信息，我们非常出色，
因此您可以看到我们在这里有一些
信息 是的，第一个是注释，
所以这是提供此服务的注释的名称 是的，
在这种情况下
，提供此执行程序
服务的注释被命名为每个
产生轨迹的人 是的，那么我们在
这里你真的不用担心
现在，我们有类型，所以
这就像扭曲使用的主题消息
哦，是的，这是
该服务使用的消息，在这种
情况下它' s 这个确切的垃圾
消息包含在 EDM 存储库
包中是的
，我们稍后将查看
服务水分，这只是因为
它们
与主题使用的消息略有不同，是的，
但无论如何这种类型定义
消息 此
服务正在使用的消息类型，最后你有
这个弧，它
是参数，是此服务作为输入的参数，
所以当你调用
服务时，你通常会用一个参数调用它
服务将使用的一些信息以执行
其功能
是在这种情况下参数称为
文件是对于这种情况
对于执行器服务的
情况是可以的例如参数是它正在执行的运动的路径
是有限的 是的，
所以我们在文件中有一些有限的运动
，有了这个文件，你
就用这个文件参数，你正在
向服务提供这个运动，所以
当 s 当您调用服务时，
我们在文件中提供此动作
到服务将获得
并执行的服务
在此之前它做了两
件事，首先它启动了一个
他们执行的服务以进入服务，然后
它也调用它所以让我们
更深入地看看这个文件以
分析它
所以让我们停下来
一会儿 让我们在这里执行这些评论
，我们
很好，所以 Ravi 它是演示之一
看到发布 然后你可以做这个剪切
以可视化文件 对不起，
是的，我想我在这里修改了一些东西
Josie 不想要 我们是的，
所以这个名字吃了它的开始演示
午餐好了 是的 所以我们可以在这里调整它的大小
所以你可以看到这是
我们执行的启动文件的内容 是的 所以它
基本上有两个
部分 第一个是这包括在这里
其中包括另一个 l aunch 文件是的，你
可以在里面看到，所以是的，这
是你第一次看到这个，但这是
一个非常普遍的做法，是的，你
可以在一个
大文件中包含其他启动文件是的，你
这样做包含攻击 然后你
指明你想要
包含在这个大管道中的大文件，所以是的，
这个长文件将使用
这个包含标签执行，它将搜索这个
启动服务而不是午餐，它将
执行它是的，这个启动服务
不是启动文件
是启动执行轨迹
服务的启动文件 是的，正如我之前告诉过你的，所以
使用这个第一个启动文件，我正在
做什么来启动服务，
使其可供任何人调用它是的，
然后在这里你有 请注意
，您之前已经看到并且
一直在使用的绘图，在这里您基本上是在
启动一个注释，您正在
启动我们的刷机程序是的
，在这种情况下，这个粗略程序的
作用是调用您拥有星级的服务
在这里，是的，这个程序正在
调用服务，在
联合领导中，
它给出了这个参数，是的，
它给出了这个文件的参数，
你知道执行那个动作的
要领是的，所以是的，你在这里
解释了第一部分 这个
包含它包含另一个
启动服务的午餐文件，然后
你有一个你以前已经看过的基本笔记标签，
是的
，你可以看到它
没有也没有点
扩展这是因为它是一个
CPP 可执行文件是的，所以你显然
是在你将在 Ross 中使用 Python 的分数范围内，
但你也
可以使用 CPP 在这种情况下
程序在 CPP 中，因为它没有这个
Python 扩展是的，是的，这是
执行目标的程序，
您在此处启动的服务
ode 与 Python 代码，
但现在让我们看看如何调用一个
服务，这是 Mrs。 石头让我们
最大化一下，这
是用原始服务代码注释完成的，所以
你指定你的服务调用，然后你
必须指定你想要调用的服务的名称
，然后你
双击你知道要完成的卡车
消息的结构
是的，让我们看看这些示例，
例如，是的，让我们再次尽量减少未命中率
service 的作用是
删除
模拟中的模型，是的，所以
让我们调用该服务，然后尝试调用该
服务，然后按照我们
在此处看到的 Ross 服务调用进行操作，
然后我们将指定该
服务的名称 这个例子是
Percival RIT模型然后我们
双击它必须完成
消息的结构是的这是
我们之前看到的类型
这里是通过这种类型定义它的
类型 是的，
所以在这种情况下是的，在这种类型中，
您定义了参数，在这种
情况下，您
提供给服务的参数信息是
您要删除的模型的名称是的，因此在
我们使用已执行的 III 服务看到的示例中，
我们 提供了包含运动
的文件的路径的信息是的
情况下我们提供的信息
我们提供给服务的参数
是我们想要的模型的名称
这是有限的 这是有限的 这是
在服务消息中的有限 你
稍后会
看到所以现在不要担心你是否有
一些疑问 我相信当我们
通过单位前进时，一切
都会被清除 一切都会变得
更有意义是的
所以是的让我们回到这里然后我们
让我们为已故的模型提供一个
名称在这种情况下
我们要删除的模型的名称是卡菲尔
表是的
好吧让我们介绍一下 这里的咖啡厅
表当然是表的名称，
所以通过执行这些命令，这个
对凉亭服务的调用做了我自己的
服务应该发生的是
模拟中的表是相关的，
所以好吧，让我们看看会发生什么
让我们执行这个命令，正如你
所看到的，是的，模拟中的表已被删除
，是的，这里我
成功通过并且状态消息
成功写入模型是的，所以
这是服务
给我的响应说嘿我可以
成功 删除模型
一切正常所以是的，你
已经看到这有效，所以我
称这个凉亭网络磨牙服务
我已经尝试将它们作为参数
我想删除的模型的名称
和服务所做的就是
位置性和他 当他完成后
谁说嘿任何问题一切顺利
我可以建立线性模型是的你可以
在这里看到如此出色是的在这里你
可以看到一条评论，
如果您愿意，可以执行或 为了检查让
我们在这里使用这个命令来做你可以
在这里看看你有一个循环
添加并添加模拟中的模型的名称
所以
自助餐厅将删除它所以它
不再出现 在这里但是你
有碎屑播放连接 这是
这个相机 这里我们有球管
或一个是这些球
老鼠和蓝色 你需要一个盒子 一个
是这个盒子 这个白色的盒子
另一个是 属性
本身当然所以你可以测试你是否
想要其他
元素不好让我们现在让我们
继续正常
解释然后好的所以我们在
这场战争中看到了一个名为 common 的服务
如何从
公共线路调用服务是的
但是我们用代码编程一个
团队在这种情况下用 Python 代码来做这个 好的
所以在这个演示中添加了红色
这是在这里执行这个代码是的
所以让我们在这里执行这个代码并
注意我们知道的模拟
看到 w 如果发生任何事情就会发生所以
是的，我们会来这里我将执行
这段 Python 代码和
OH
ball one 将其删除，以便您可以看到
称为 ball one 的蓝色碗已
被删除是的，因此它发生了
与
我们使用原始服务调用所做的事情非常相似，但是您
执行了这段 Python 代码，
我什至也得到了成功和
状态消息，就像我到了这里一样是的，
好吧，让我们看看这段
代码 它包含的内容我们
非常棒，所以我们一如既往地拥有非常重要的
总薪酬，然后我们
还将从 Gazebo 消息包中导入此删除模型和
主要模型请求消息
Esper v
目录是的，这很重要，我们
将看到它 接下来我们
要做的是导入
我们将要使用的服务消息 你还记得在上
一单元中 你必须
为重要的扭曲
消息甚至测听信使做一些非常相似的事情
es 所以在这里你正在做同样的但是
对于服务消息是的删除
模型和删除模型请求
消息好的我们正在报告
这个模型因为我们将要
使用它然后像往常一样我们开始
模仿注释是然后一次 程序启动
我们有这个等待服务功能
这是为了等待检查
这个凉亭删除模型服务
是否可用
实际上
已经看到凉亭延迟模型
可用是的所以然后我们可以执行
此代码是的
在这种情况下该服务始终可用所以使用此
功能可以通过等待服务
来确保我们要调用的服务
已启动并正在运行 并准备好被
称为 yes 那么在
这里我们创建让我们看看到服务的连接
是这个服务
代理 respite dot 服务代理我们
创建与服务的连接
然后我们必须指定 t
服务的名称当然是
我们想要连接的服务的名称，我们还
指定了消息的
类型是的，这与您
使用主题的方式非常相似，您
必须指定主题的名称
如果您正在
发布或读取该主题，
那么我们
将轻松用于该主题的
名称或
消息 用户在这种情况下它是删除
模型然后在这里创建
此删除模型请求消息的实例是
然后您
在模型名称中
指定我们在此处指定水的名称
这两个都是一个是所以在这里我们
指定了名称 模型名称，
正如您在代码中看到的那样，
让我们在代码中指定它，就像
这样，是的，因此在 KK 变量中，
我们创建了此删除
模型请求方法的实例，然后在此处
访问模型名称 va 这个 KK
实例方法的 riable 并且我们告诉他
将球存储一个值是然后最后
我们要做的是调用
我们在这里定义的服务删除模型服务
我们调用传递 KK 消息的服务
并开始响应
这个结果值中的服务是
哪个是的，这是房间的响应
当然是这个然后我们打印这个结果，正如
你在这里看到的那样打印逆转是
因为这个打印
当然是的所以我们调用我们调用
传递消息的服务 我们想在这里使用
模型名称的参数，我们
将服务的响应存储在
结果值中，然后最后我们将其打印为
结果，以查看它是否运行
良好，如果它失败了它是的非常好
所以是的这是它的代码 很简单
我想所以是的 让我们继续下
一个是示例 3.6 那么如何知道
您
坐在服务旁边的服务消息的结构 好的 所以是的 在这段
代码中我们使用了这个删除
模型并删除了 m odel request 是的
，这个删除模型请求是
你应该调用
我们在这里创建一个实例的服务的消息，我们
觉得这个消息带有模型名称
变量但是我们怎么知道
要访问哪些变量我们怎么
知道这个消息 有一个名为变量的模型，
所以这是用 Rose 完成的，
首先你必须
超过这个原始服务信息，你知道
这不是消息的类型，
正如我们在这里看到的那样，让我们
在这种情况下再做一次 杂货 等一下
将成为我们的 DS 我会在那里 我们在
所以我要执行凉亭的行服务
信息
我做错了什么
好吧 所以
好吧 我们在这里 我不知道我在做什么
做错了，好吧，是的，我们
执行 rush service info 命令，
指定服务的名称，
在这种情况下它是从属模型
，这样我们就可以
知道服务使用的消息类型的类型
yes 在这种情况下它是 删除
里面的模型消息 Gazebo 消息
包是的 那么现在您知道没有
关于此删除模型
消息的信息 我们可以在此处执行此命令
原始服务 Rose 服务显示是的
这就像 Ross 消息 显示您
在主题中使用它 是的 所以好吧，让我们
在此处保护此评论 你必须
指定包的名称，
你可以在那里看到你的消息
并删除模型是的，Roger 将向
Gazebo 显示模型消息，然后通过
执行此命令，您可以获得
有关此消息的信息，
析构函数是如何定义此消息的
在这种情况下，您可以看到它
分为两部分是的，这是
与主题和主题的一个非常重要的区别，
您只有一个字段，我们
说一个区域，以便在此处定义您
的信息工作室被划分但
这些由这些 这里三行是的，
这是非常重要的，因为
这是任何服务消息的结构
是的所有服务消息都将
被这三行分割 是的，如果您
在这里看到任何包含某些内容的消息，那么三行，然后是
下面的内容，这将始终意味着
这是一条服务消息，
是的，那么正如您在此处看到的，是
的，消息的第一部分是
此处的服务请求，我们 定义
服务的请求 yes 所以我将
调用该服务 yes 这部分
消息称为请求所以它
定义了我将调用该服务的对象 yes
在这种情况下当我调用这个凉亭时
删除模型 yes 我定义了这个模型
名称 是的，正如您所看到的，这是这里的视频
，代码也是如此，在调用服务之前
我填写了这个模型名称变量
是的所以
我在调用服务之前在消息请求中失败了是的
和这个请求 在这种情况下，消息的部分
是此模型的发现，
名为变量yeah，它存储了
我们要删除的模型的名称，
因此这是消息的第一部分，
消息的请求，然后
是 s 消息的第二部分这三行下面的部分是消息的
响应是的所以这
部分定义
了服务的响应在这种情况下我们有两个
变量一个叫做成功的boodle
和一个字符串 称为
状态消息是的，这正是
这个是的，所以当我调用服务时，
服务响应以这种形式给我一个响应，
成功为真或
假，因为它是一个公牛和状态
消息变量，它包含
在这个字符串中 案例是读取
模型成功删除模型是的所以我
禁用了这个成功并且这个状态
消息是unstring是的
当我们使用它时保存我到这里原始服务代码
我也有这个成功这是一个
状态消息是的所以这是
这里非常重要的服务消息有两
部分，第一部分称为
请求，它定义您将
调用服务的对象我们需要将哪些变量
传递给该服务，您称之为
什么 es，消息的第二部分
称为响应，它定义了
希望的响应，我们希望
服务
在完成所有必须做的事情后会如何回复您是
非常重要的优秀是的所以
让我们继续前进让我们继续
好吧是的 我们基本上到了最后，
在这里你有一个练习这个练习
3.1 让我们阅读它，但我会让你
一个人呆着你知道怎么做因为我
认为你需要尝试
自己做所以是的，首先创建一个
打包以便放置食物
代码 好的，因此您将创建一个
您正在运行的桶然后
您将创建一个
必须启动执行轨迹服务的
休息室文件
一个服务，你
显然必须启动它然后你
必须创建我们自己的文件来启动
执行轨迹服务服务
服务是的，这是在
你开始时做的第一个演示中启动的服务
是的，
所以您还需要
在大文件中启动该服务是的，您可以
在播放较小时检查示例 2.3
以便启动它，以便您
可以查看是否需要，然后您将需要
获取以下信息 服务使用什么类型的
消息，是的，你
已经在单元的开头
使用原始服务，
你可以获得信息性的 DS，然后
你必须在示例 3.5 中创建这样的代码
，所以你 必须
创建一个 Python 代码并将这段代码复制粘贴到
这里是的，就像这样，那么你将
不得不修改这段代码，而不是
调用这个删除模型，让我们
加深它的模型服务来调用
执行轨迹服务是的，所以你
必须调用 服务当然做
你说的那种类型，我们不会枢轴
模型将是另一个你必须
检查它是如何的，显然
参数也不会是模型名称，所以你
必须检查人类使用的
是什么，是的 怎么填怎么办 你
需要考虑这个论点，为此你
可以看看这里，因为正如你
在单元开头看到的，当
我们检查这些执行者内部
服务时，这个论点让我们
在这里看看非常好原始服务介绍
现在它 不会是的 不好 无论如何让我们这样做
但现在它会给我一条错误
消息 你会看到不服务是的
为什么很好 因为这个服务现在它
没有运行 它在我执行这个命令时在这里运行
现在它是
现在开始，如果我绝对使用此
命令，我将获得信息，因为
现在我已经启动了服务
执行解除此 WOM 臂是
此文件中的有限内容
是的，因此您需要通过此服务传递的参数
是此文件的路径
最后你必须
有一个很长的包和 Python
文件是的然后通过启动这个午餐
文件，你必须首先启动
执行树服务，然后调用
你的 Python 文件，该文件将
使用代码调用执行树服务
是的，使用使用 Python 代码的代码，所以
这是你必须做的练习
，如果你被卡住了
，你不知道你不知道该怎么做，
如果你愿意，你可以有一个循环 以及此练习的解决方案
是的 所以如果您来到这里
并单击此链接，您将
能够查看如何解决此练习的解决方案
但我真的
鼓励您尝试自己解决它，
因为这是 你
将学到最多的方式是的所以什么是的
，就是这样，我会让你一个人呆着，我
会在下一部分见到你，即
紧急服务第 2 部分所以再见