![](https://img.kancloud.cn/ff/46/ff46c2c64c4a56f0b920c896d62b95c4_800x387.png)
# 摘要
预计完成时间:10分钟
该单元是5天课程中ROS的预览版。通过对不同部分的介绍,以及每个部分的一些简单示例,您将可以一瞥在课程中学到的内容。
# 开始学习
所以你希望学习ROS,你想快速做到,对吧?我认为这就是为什么你在这里学习,在5天课程的ROS中。别担心,我向您保证,在课程结束时,您会觉得自己可以对机器人做任何事情!但是,这并不容易,你必须尽力而为!
在本课程预览中,您将对课程中将要介绍的不同单元进行简短介绍。这个单元并不是要在30分钟内教你ROS。那并没那么简单!您将只是概述您将在课程中学到的主要内容。通过完成本课程的不同章节,您将能够学习如何编程任何机器人。
但是,为了能够对任何机器人进行编程,您需要学习什么?看看这个章节,你会明白!
*****
# 用ROS编程机器人需要学习什么?
>[danger] ### 首先,您需要学习一些基本概念
在开始学习任何东西之前,总是需要首先介绍一些基本概念。例如,在你知道如何走路之前,你无法学会跑步。在你知道如何说话之前,你不能学会唱歌。对?所以,通过这门课程,你会了解到这些内容。
在本课程的第一部分(基本概念章节)中,您将了解一些在开始处理更复杂的概念之前,所需要学习的ROS基本概念。
>[danger]### 其次,您需要了解主题
为了学习ROS,您需要了解的第一件事是如何使用主题。主题可能是ROS最重要的部分,因此您需要仔细了解它们。
ROS通过主题处理几乎所有的通信。更复杂的通信系统,例如服务或行动,最终依赖于主题。这就是他们如此重要的原因!例如,通过ROS主题,您将能够与机器人进行通信以使其移动,读取机器人的传感器读数等。
在屏幕的右上角,您有模拟窗口。在这个窗口中,您将在课程期间遇到不同的机器人(取决于您所在的章节),这将有助于您学习ROS。在第一章(课程预览)中,您将与可爱的Kobuki合作。我相信你会相处得很好!
所以现在我们已经做了正确的介绍......让我们从第一个例子开始吧!
*****
# 例1.1
**在WebShell编号#1中执行以下命令**,以便开始移动Kobuki机器人。
WebShells就像Linux shell,但在网络上。 默认情况下,它们位于屏幕的右下部分。 您可以在那里键入Linux命令。
在WebShell#1中执行
```
roslaunch publisher_example move.launch
```
每当您想要停止移动机器人时,为了停止程序,只需在WebShell中按Ctrl + C.
注意:您会注意到,即使在停止程序后,机器人仍将继续移动。 为了阻止它,你将不得不执行另一个命令。
现在选择WebShell#2并执行以下命令以停止Kobuki机器人。
在WebShell#2中执行
```
roslaunch publisher_example stop.launch
```
>[danger] 重要提示:在每个示例的最后,您会发现一些有用的注释。 请看看他们!
例1.1的预期结果
![](https://img.kancloud.cn/4c/4d/4c4ddf5bcd18c9b290219fb4226ebeaf_500x281.png)
>[warning]实例1.1的数据
检查以下注释以完成示例:
注1:即使用Ctrl + C终止命令,机器人仍然会继续移动。 这是因为机器人将继续收听您在该主题上发布的最后一条消息。 你会明白这意味着什么。
>[info]例1.1结束
*****
在整个课程中,您将必须执行ROS程序并在模拟机器人上进行测试。
太棒了吧?你可能会对整个过程如何工作有很多疑问......你真正做的是启动一个发布者,这是一个将消息写入主题的ROS程序,在这种情况下写入/ cmd_vel话题。该主题用于将速度命令发送到机器人的基础。因此,通过本主题发送消息,您已使机器人开始移动。
但是......即使我停止了程序,机器人为什么还要继续前进?好吧,那是因为机器人不断听到发布到主题中的最后一条消息,告诉它移动机器人。因此,为了阻止它,你刚刚启动了另一个发布者,在这种情况下,发布了一条消息,告诉机器人停止。
但请稍等,请记住,这只是一个课程预览。您将能够在主题单元(第3章和第4章)中了解有关主题的更多信息。耐心一点!
>[danger]### 第三,您需要了解服务
现在,让我们继续吧。您已经看到主题是ROS的一个非常重要的部分,它们可以让您与机器人进行通信。但这是唯一的方法吗?
你可以想象,答案是否定的。当然! ROS还提供服务。服务允许您为机器人编写特定功能,然后让任何人都可以调用它。例如,您可以创建一个服务,让您的机器人在特定时间段内移动,然后停止。
服务比主题稍微复杂一些,因为它们分为两部分。一方面,您拥有Service Server,它为任何想要使用它的人提供功能(称之为)。另一方面,您拥有服务客户端,即调用/请求服务功能的服务客户端。
让我们看一个如何调用先前创建的服务的示例,这使得Kobuki机器人在一个圆圈中移动4秒钟。
# 例1.2
>[danger] 重要信息:在开始此示例之前,请确保停止在WebShells中运行的所有先前程序(通过按Ctrl + C)。另外,确保Kobuki机器人不动。
在WebShell编号#1中执行以下命令以启动该服务。
```
roslaunch service_demo service_launch.launch
```
在WebShell编号#2中执行以下命令以调用该服务。
```
rosservice call / service_demo“{}”
```
例1.2的预期结果
![](https://img.kancloud.cn/4c/4d/4c4ddf5bcd18c9b290219fb4226ebeaf_500x281.png)
>[warning]实施例1.2的数据
请检查以下注释以完成示例:
注1:服务必须启动并运行才能调用它。因此,请确保在调用之前已启动该服务。
注意2:请记住,您的机器人将从上一个示例中停止的点开始移动。因此,它可能与显示的gif不一致。
>[info]例1.2结束
*****
我打赌你开始对这件事感到激动,对吧?但我相信你还有更多问题。
在上面的例子中,你做了两件事。首先,您启动了该服务,以便为想要呼叫它的任何人提供服务。然后,您执行了一个调用该服务的命令。此服务的目的是将Kobuki机器人移动一圈4秒钟,然后停止它。因此,当您调用该服务时,机器人开始执行此移动。
但请记住,这只是预览单元。在服务单元(第5章和第6章)中,您将学到更多有关服务的知识!
>[danger]### 第四,你需要了解行动
以为你做完了?一点也不!你仍然需要一些东西才能使用ROS。目前,您已经对主题和服务进行了一瞥,您已经了解了它们如何允许您与机器人进行通信。
但是,这还不是全部。 ROS还提供行动。操作类似于服务,从某种意义上说,它们还允许您为机器人编写功能,然后提供它以便任何人都可以调用它。操作和服务之间的主要区别在于,当您调用服务时,机器人必须等到服务结束才能执行其他操作。另一方面,当您调用动作时,您的机器人在执行动作时仍可继续执行其他操作。
还有其他差异,例如允许您在执行操作时提供反馈的操作。但是你会在课程中看到所有这些。现在,让我们尝试一个简单的例子来处理一个动作。
# 例1.3
>[danger]重要信息:在开始本示例之前,请确保停止在WebShells中运行的所有程序(通过按Ctrl + C)。
在WebShell编号#1中执行以下命令以启动操作。
```
roslaunch action_demo action_launch.launch
```
在WebShell编号#2中执行以下命令以“调用”操作。
```
roslaunch action_demo_client client_launch.launch
```
例1.3的预期结果
![](https://img.kancloud.cn/4c/4d/4c4ddf5bcd18c9b290219fb4226ebeaf_500x281.png)
>[warning]实施例1.3的数据
请检查以下注释以完成示例:
注意1:确保通过执行第一个命令启动了Action Server。否则,您将无法拨打电话。
注意2:请记住,您的机器人将从上一个示例中的停止点开始移动。因此,它可能与显示的gif不一致。
>[info]例1.3结束
*****
我确信,在这一点上,你开始对你正在做的事情感到有些困惑。别担心,没关系!
基本上,你在前面的例子中做了两件事。首先,通过发出第一个命令启动Action Server。然后,通过发出第二个命令调用该Action。您可能认为这与前面的服务示例相同,但事实并非如此。它们之间存在一些重要的差异,但您可能无法看到它们。
但是,你现在不必担心。正如我之前告诉过你的那样,这只是一个课程预览,所以当你通过动作单元时,你将更好地理解动作(第7章和第8章)。
最后,您需要知道如何使用调试工具
如果你要开始使用机器人,你需要知道这一件事:你将不得不处理错误。
幸运的是,ROS提供了许多工具,可以帮助您检测正在发生的事情。在下面的示例中,您将了解可能是所有这些工具中最重要的工具:RViz。按照下面的例子快速浏览一下这个神奇的工具吧!
# 例1.4
>[danger]重要信息:在开始本示例之前,请确保停止在WebShells中运行的所有程序(通过按Ctrl + C)。
在WebShell编号#1中执行以下命令以启动RViz。
```
rosrun rviz rviz
```
现在,点击位于IDE窗口右上角的屏幕上的图标,以打开图形界面。
这将在新选项卡中打开图形界面。你应该在这里看到RViz。
![](https://img.kancloud.cn/5c/8b/5c8b2b83c1683d2e5c007334c2f7b720_500x374.png)
现在,请按照以下步骤操作:
#### a)更改base\_link的固定帧。
![](https://img.kancloud.cn/de/db/dedb4874acdaaca62c78fd1d53b4977c_400x163.png)
#### b)单击“显示”部分下方的“添加”按钮。 选择RobotModel选项。
![](https://img.kancloud.cn/74/64/7464def3ed9595eb8c123f0d0e61fcd7_400x340.png)
#### c)现在,重复该过程并选择LaserScan选项。
#### d)从LaserScan选项中选择/ kobuki / laser / scan主题。
![](https://img.kancloud.cn/37/75/377525704767e9e1b81ac121f29fc0ba_400x166.png)
#### e)如果需要,您也可以使用例1.1中启动的程序移动机器人
例1.4的预期结果
注意:为了通过激光束可视化墙壁,机器人必须面向墙壁。 否则,显然,它不会检测到任何东西。
![](https://img.kancloud.cn/7e/4a/7e4a48eb76609bf5f0c3e446bf415b7e_600x547.png)
>[warning]实施例1.4的数据
请检查以下注释以完成示例:
注意1:您可以通过双击顶部栏来最大化RViz窗口。
>[info]例1.4结束
*****
在这一点上,我相信你有很多疑问和怀疑...但是不要着急!
你现在在RViz看到的是你的Kobuki机器人。 这很明显,对吗? 但是在小熊面前出现的红线是什么? 你知道吗?
好吧,这就是Kobuki机器人正在获得的激光读数。 因此,正如您可能已经猜到的那样,红线表示机器人前方的墙壁,激光束正在探测到该墙壁。
太棒了吧? 但这仍然只是您使用RViz可以实现的一小部分。 你必须检查调试工具单元(第9章)以查看更多的RViz!
你认为呢? 想真正了解所有这些是如何工作的? 想成为机器人大师吗? 然后让我们开始吧!