跳转到内容

Cyberbotics 机器人课程/初学者编程练习

来自维基教科书,开放世界开放书籍

本章包含一系列针对初学者的练习。你不需要任何先前的知识就可以完成这些练习。目标是通过操作你的 e-puck 和 Webots 来学习移动机器人基础知识。首先,你将了解一些 e-puck 设备及其用途。然后,你将学习机器人控制器的概念。最后,你将使用 Webots 模块 BotStudio 编程一个简单的机器人行为。这个模块可以通过图形界面来编程 e-puck 机器人。你将了解如何使用它以及与它相关的概念。

e-puck 探索 [初学者]

[编辑 | 编辑源代码]

E-puck 和 Webots 一章中所述,e-puck 拥有不同的设备。在本文件中,你将使用其中的一些设备:步进电机、LED、加速度计、红外传感器和相机。在本练习中,你将了解每个设备的用途。以下列表快速定义了这些设备。你将在下一章中更详细地了解所有这些设备。

  • 步进电机:步进电机[1] 是一种将全旋转分成多个步骤的电机。e-puck 拥有两个步进电机,每个电机有 1000 步。它们可以达到大约每秒一次的旋转速度。e-puck 的车轮固定在这些电机上。它们用于移动机器人。它们可以独立运动。此外,为了了解车轮的位置,可以使用增量式编码器。e-puck 编码器返回自上次编码器复位以来的步数。例如,这个“设备”可以用于精确地将车轮转动一圈。
  • LED:LED[2] (发光二极管) 是一种小型设备,可以使用少量能量发出光。e-puck 拥有多个 LED。特别是,它周围有 8 个,机身内有 4 个,前面有 1 个。前置 LED 比其他 LED 更强大。这些 LED 的主要目的是提供关于机器人状态的反馈。它们也可以用于照亮环境。
  • 加速度计:加速度计[3] 是一种测量施加在其上的总力的设备,以 3D 向量表示。e-puck 只有一个加速度计。如果你的 e-puck 静止,加速度计至少会指示重力向量。加速度计可以用于检测与墙壁的碰撞或检测机器人跌落。
  • 红外 (IR) 传感器:e-puck 拥有 8 个红外 (IR) 传感器。红外传感器是一种可以产生红外光(超出可见光范围的光)并可以测量接收到的光量的设备。它有两种用途。首先,只测量接收到的光。在这种配置下,红外传感器测量附近环境的光。例如,e-puck 可以检测到从哪个方向的光照射到它。其次,红外传感器发射红外光并测量接收到的光。如果红外传感器前面有障碍物,光会反弹到障碍物上。光差更大。因此,e-puck 可以估计其红外传感器与障碍物之间的距离。
  • 相机:e-puck 前面还配备了一个 VGA 相机。e-puck 使用它来识别其正前方环境。例如,它可以沿着一条线行驶、检测斑点、识别物体等等。

请注意,步进电机和 LED 是执行器。这些设备对环境有影响。相反,红外传感器和相机是传感器。它们测量环境的特定信息。在下一页,你可以看到 机械设计 的照片。

为了成功完成以下练习,你必须了解其他设备的存在。e-puck 由锂离子电池供电。它的运行时间约为 3 小时。你可以使用位于右轮附近的 ON/OFF 开关来打开或关闭你的 e-puck。机器人还具有蓝牙接口,允许与你的电脑或其他 e-puck 进行通信。

最后,e-puck 还有其他设备(例如麦克风和扬声器),在本文件中你不会使用,因为当前版本的 Webots 还不支持它们。


[Q.1] e-puck 的最大速度是多少?请用 cm/s 回答。(提示:车轮半径约为 2.1 cm。参考上面步进电机的定义。)

[Q.2] 将你的 e-puck 与实际的手机进行比较。哪些 e-puck 设备受该行业影响?

[Q.3] 将以下设备分类到执行器类别或传感器类别中:LED、步进电机、红外传感器、相机、麦克风、加速度计和扬声器。


[P.1] 在你的真实 e-puck 上找到这些设备的位置。(提示:查看图 Epuck devices.png

机器人控制器 [入门]

[edit | edit source]

为了理解机器人控制器的概念,你将扮演机器人控制器的角色。你将感知来自机器人传感器的感官信息,并能够控制机器人的执行器。在本练习中,你不会实际编程机器人的行为,但你仍然会控制机器人。

打开世界文件

[edit | edit source]

首先,你需要打开本练习的世界文件。世界文件包含模拟的整个环境,即机器人的形状、地面的形状、障碍物的形状以及一些通用信息,例如相机的方向,甚至重力矢量的方向。在模拟窗口(下图中的窗口 (1))中,点击文件 | 打开菜单并打开

.../worlds/beginner_robot_controller.wbt

你也可以通过点击模拟窗口工具栏上的打开按钮来打开世界文件。e-puck 模型及其环境将在 Webots 中加载。在模拟窗口中,你可以看到一个绿色的板子上有一个 e-puck。

Webots 窗口和模拟相机

[edit | edit source]

Webots 可以显示多个窗口。其中一些已经介绍过。你将特别关注其中的两个(如图所示)

  • 模拟窗口 (1):这个窗口可能是最重要的一个。它显示了模拟的 3D 表示。在本例中,你可以看到一个虚拟的 e-puck 及其虚拟环境。如果你想修改相机的方向,只需用鼠标左键点击并拖动到面板中的任意位置即可。类似地,你可以使用鼠标右键修改相机的位置(注意 Mac OS X 用户:如果你有一个单按钮鼠标,请按住 Ctrl 键并点击以模拟右键点击)。最后,你也可以使用鼠标滚轮设置缩放比例。此窗口中还有两个重要的按钮:播放/停止按钮和复位按钮。使用第一个按钮,可以播放或停止模拟,使用第二个按钮,可以重置整个模拟。
  • 机器人窗口 (2):此窗口显示 e-puck 的 2D 表示。此窗口的目的是在模拟过程中实时可视化传感器值和执行器值。带有机器人窗口的图显示了可以观察到的值的含义。红色的整数对应电机速度。它们最初应该为零。下面的绿色值对应编码器。红外传感器测量的光强度由绿色整数表示。而红外传感器与障碍物之间的距离由蓝色整数表示。因此,请注意绿色值和蓝色值表示的是同一个设备。红色或黑色矩形对应于分别打开或关闭的 LED。最后,加速度计由一个 2D 矢量表示,它对应于 e-puck 的倾斜度,以及一个滑块,它表示加速度的范数。此窗口还包含一个下拉菜单,用于配置蓝牙连接。


[P.1] 使用相机,确定你的虚拟 e-puck 的前后位置。(提示:相机放置在 e-puck 的前方)

[P.2] 尝试将模拟窗口的相机放置在 e-puck 的屋顶上,以便看到它前方的情况。然后,使用复位按钮。

模拟窗口 (1) 和机器人窗口 (2)
机器人窗口的描述

e-puck 运动

[edit | edit source]

点击开始/停止按钮,检查模拟是否正在运行。然后,点击虚拟的 e-puck 以选中它。选中 e-puck 后,会出现白色线条。它们表示你的物体用于物理模拟的边界。你还会注意到红色线条。它们表示红外传感器的方向。而洋红色的线条对应于相机的视野。此外,你可以在模拟窗口的左上角一个小窗口中观察相机的值。

在键盘上,分别按“S”键和“X”键,以增加或减少左侧电机的速度值。尝试按“D”键和“C”键来修改右侧电机的速度。现在你可以像遥控玩具一样移动虚拟机器人。请注意,一次只能按下一个键。


[P.3] 尝试使用这四个按钮来沿着板子周围的黑带移动。

[Q.1] 容易吗?有什么困难吗?

[Q.2] e-puck 有多种运动方式。你能列出它们吗?(例如:e-puck 可以向前移动)

[Q.3] 尝试使用键盘箭头和“R”键。这些命令有什么用?解释它们与第一个命令的区别。它们更实用吗?为什么?

盲动 [挑战]

[edit | edit source]

本小节的目的是扮演机器人控制器的角色。机器人控制器只感知机器人传感器测量的值,对其进行处理,然后向机器人执行器发送一些命令,如图所示。请注意,传感器值由环境修改,而机器人可以使用其执行器来修改环境。

机器人控制器接收传感器值(例如:红外传感器、相机等)并发送执行器命令(电机、LED 等)

[P.4] 隐藏模拟窗口(但是,此窗口必须保持选中状态,以便键盘输入有效。隐藏它的方法是将其部分移出屏幕)并只查看传感器值。现在尝试仅使用红外传感器信息,像以前一样沿着墙壁移动。

[Q.4] 什么信息有用?从什么阈值开始,你观察到墙壁离机器人很近?

让我们移动你的真实机器人

[edit | edit source]

你可能面前有一个真实的 e-puck,并且你想要看到它移动!Webots 可以通过蓝牙连接与 e-puck 通信。它可以接收来自 e-puck 传感器的某些值,并发送一些值来命令 e-puck 执行器。因此,Webots 可以扮演控制器的角色。这种操作模式称为远程控制会话。

为了继续,请首先配置你的蓝牙连接,如 蓝牙配置 部分中所述。使用开始/停止按钮停止模拟。使用 ON/OFF 开关打开你的 e-puck。然后,在机器人窗口中,从下拉菜单中选择你的蓝牙连接。在 e-puck 后面,一个橙色的 LED 应该会亮起。最后,按开始/停止按钮来运行程序。你的 e-puck 应该像模拟中一样工作。

[Q.5] 观察来自真实 e-puck 的传感器值。它们与虚拟传感器值相似吗?

[Q.6] 将电机速度设置为10|10。当真实的e-puck缓慢移动时,它会振动。这在模拟中不会发生。你能解释一下这种现象吗?

你的进度

[edit | edit source]

恭喜!你完成了第一个练习,并踏入了机器人世界。你已经学到了很多

  • 什么是传感器、执行器和机器人控制器。
  • 机器人控制器必须能够解决哪些类型的问题。
  • e-puck 的基本器件有哪些。特别是步进电机、LED、红外传感器、加速度计和摄像头。
  • 如何在模拟和现实中运行你的移动机器人,什么是远程控制会话。
  • 如何使用 Webots 执行一些基本操作。

移动你的 e-puck [初学者]

[edit | edit source]

你已经了解了什么是机器人控制器。在接下来的练习中,你将使用图形编程界面 BotStudio 创建简单的行为。此模块集成在 Webots 中。本练习的目的是通过发现 e-puck 的移动可能性来介绍 BotStudio。

打开世界文件

[edit | edit source]

与第一个练习类似,打开以下世界文件

.../worlds/beginner_move_your_epuck.wbt

将打开两个窗口。第一个是您知道的模拟窗口。你应该观察到与以前类似的世界,只是棋盘的大小是两倍。这是因为 e-puck 需要空间移动。第二个窗口是 BotStudio 窗口(见图)。如果 BotStudio 窗口没有自动打开,请双击模拟窗口中的机器人以打开它。

BotStudio 界面

"前进" 状态

[edit | edit source]

BotStudio 窗口由两个主要部分组成。左侧部分是自动机的图形表示。您将在下一个练习中学习如何使用此部分并理解自动机概念。右侧部分以二维形式表示 e-puck。在此表示中,您可以实时观察 e-puck 传感器的值。此外,您可以设置执行器的命令。此界面还具有一个下拉菜单,用于选择蓝牙连接以创建远程控制会话。此菜单类似于您在上面看到的机器人窗口的两个下拉菜单。在顶部,有一个工具菜单。此菜单使您能够创建、加载、保存或修改自动机。最后一个按钮(上传按钮)在 e-puck 上执行您的自动机。

在 BotStudio 窗口中,选择 "前进" 状态(白色区域中间的蓝色矩形),只需单击它即可。选定的矩形将变成黄色。在 BotStudio 窗口的右侧,您可以修改执行器的命令,即电机速度和 LED 状态。如果要更改电机速度,请单击并拖动两个黄色滑块。您可以将此值设置为 -100 到 100 之间。0 对应于零速度,即车轮不会转动。正值应使车轮向前转动,负值应使车轮向后转动。如果要更改 LED 的状态,请单击其对应的灰色圆圈(红色 -> 开启,黑色 -> 关闭,灰色 -> 无修改)。

将 "前进" 状态配置如下:所有 LED 都亮着,电机速度为 -30|30。通过单击上传按钮将其上传到虚拟 e-puck 上。如果模拟正在运行,虚拟 e-puck 应该相应地更改其执行器的值。请注意,当模拟启动时,BotStudio 的右侧显示红外传感器。

[P.1] 设置虚拟 e-puck 的执行器,使其能够前进、后退、沿着曲线移动和绕自身旋转。

[Q.1] 对于这些动作中的每一个,两个速度之间有什么联系?(例如:前进:right_speed = left_speed 且 right_speed > 0 且 left_speed > 0)

[Q.2] e-puck 上有 17 个 LED。e-puck 周围有 9 个红色 LED(背面 LED 是双倍的)、1 个正面红色 LED、4 个内部绿色 LED、2 个 LED(绿色和红色)用于电源和 1 个橙色 LED 用于蓝牙连接。找到它们的位置以及使用哪个按钮或操作可以打开它们。(提示:其中一些不受您的控制,而一些是链接在一起的,即它们不能独立打开或关闭)

真实的 e-puck 的红外传感器

[edit | edit source]

本小节的目的是与您的真实 e-puck 创建远程控制会话。这部分类似于之前练习中使用真实机器人的小节。由于使用 BotStudio 窗口而不是机器人窗口,所以只有两个区别。对于选择蓝牙连接,只有一个下拉菜单而不是两个。因此,请选择您的蓝牙连接,而不是窗口右上角的模拟项目。然后,您必须单击上传按钮以启动远程控制会话。


[P.2] 设置执行器,使 e-puck 不移动。通过创建远程控制会话,在您的真实 e-puck 上尝试此配置。将您的手放在真实 e-puck 周围,并在 BotStudio 窗口中观察红外传感器值的修改。

[Q.3] 当在 1 cm 处有障碍物(例如:一张白纸)时,前左红外传感器的值为多少?在 3 cm 处?在 5 cm 处?在 10 cm 处?从哪个距离开始,很难将障碍物与噪声区分开来?[4]

简单行为:有限状态机 (FSM) [初学者]

[edit | edit source]

在前面的练习中,你学习了如何配置单个状态。但还不能谈论行为,因为你的机器人不会与其环境交互,即它会移动,但没有任何反应。本练习的目标是创建一个简单的行为。您将发现什么是自动机,它如何与机器人控制器概念相关,以及如何使用 BotStudio 构建自动机。

有限状态自动机

[edit | edit source]

有限状态自动机 (FSM)[5] 是行为的模型。它是编程机器人控制器的可能方法。它由有限数量的状态和它们之间的一些转换组成。在我们的例子中,状态对应于机器人的执行器配置(车轮速度和 LED 状态),而转换对应于传感器值的条件(红外传感器和摄像头),即自动机可以在哪些条件下从一个状态转移到另一个状态。一个状态特别重要:初始状态。它是模拟从哪里开始的状态。在本课程中,自动机将具有与 FSM 相同的含义。

BotStudio 使您能够以图形方式创建一个自动机。当创建自动机时,您可以在虚拟或真实的 e-puck 上测试它。您将在以下练习中观察到,这种简单的编程方式能够创建各种行为。

打开世界文件并移动物体

[edit | edit source]

打开以下世界文件

.../worlds/beginner_finite_state_machine.wbt

这一次,有两个障碍物。您可以通过选择所需的对象,并按住Shift键拖放来移动对象(障碍物、e-puck甚至墙壁)。当您想要重置模拟时,可以按下反转按钮。

创建状态转换

[编辑 | 编辑源代码]

在BotStudio窗口中,使用新建状态按钮创建两个状态。使用右侧的文本框将第一个状态命名为“前进”,第二个状态命名为“停止”。您可以通过拖放相应的矩形来更改状态的位置。更改这些状态的电机速度(前进状态->电机速度:45|45,停止状态->电机速度:0|0)。现在,您将创建您的第一个状态转换。单击新建状态转换按钮。从“前进”状态创建一个链接到“停止”状态(方向很重要!)。在此状态转换中,您可以指定自动机在什么条件下可以从“前进”状态切换到“停止”状态。通过单击状态转换的文本字段来选择它。它会变成黄色。将其重命名为“前方障碍物”。通过拖动两个最高的红色滑块,更改前方红外传感器的条件值,使其每个传感器都为“>5”。您应该获得一个类似于图中“第一个自动机”所描绘的自动机。选择初始状态(“前进”状态),然后通过单击上传按钮在您的虚拟e-puck上测试此自动机。

第一个自动机

[Q.1] e-puck的行为是什么?

[Q.2] 在“前进”状态下,使用哪个执行器命令?在“前方障碍物”状态转换中,测试了红外传感器的哪些条件值?

[P.1] 在真实的e-puck上执行相同的自动机。

您完成了第一个避碰算法,即您的e-puck不会碰到任何墙壁。这种算法是碰撞检测算法的良好替代方案,因为碰撞会导致机器人降级。当然它并不完美,您可以考虑许多情况下,您的机器人仍然会接触到某些东西。

U形转弯

[编辑 | 编辑源代码]

在本节中,您将扩展您的自动机以在检测到障碍物后执行U形转弯(绕自身旋转180度)。在您的自动机中添加一个名为“U形转弯”的新状态。在此状态下,将电机速度设置为30|-30。从“停止”状态添加一个名为“计时器1”的状态转换到“U形转弯”状态。选择此状态转换。这一次,不要更改红外传感器的条件,而是通过移动绿色圆圈中间的黄色滑块,在该条件下添加一个延迟(1 [s])。图“计时器条件”描绘了您应该获得的结果。

计时器条件

[P.2] 运行模拟(始终将“前进”状态作为初始状态)在虚拟e-puck和真实的e-puck上。

为了执行完美的U形转弯,您仍然需要在e-puck转弯足够时停止它。从“U形转弯”状态添加一个新的计时器(“计时器2”)状态转换到“前进”状态(见下图)。

自动机中的循环

[Q.3] 对于“计时器2”状态转换的哪个延迟,机器人可以执行完美的U形转弯?对于真实的机器人来说,它是一样的吗?为什么?

[Q.4] 您创建了一个包含循环的自动机。这种结构的优点是什么?

[Q.5] 想象一下以下两个状态:“前进”状态和“停止”状态。如果要测试前方红外传感器的值以从“前进”状态切换到“停止”状态,则有两种可能性:要么创建一次状态转换,在其中一起测试两个前方红外传感器的值,要么创建两次状态转换,在其中独立地测试两个红外传感器的值。这两种解决方案有什么区别?

在本练习中,您一步一步地创建了一个自动机。但是,上面没有提到一些BotStudio技巧。

  • 要将红外传感器的“大于”条件切换为“小于”条件(反之亦然),请单击红外传感器滑块的灰色部分。
  • 如果您不想更改状态中的电机速度,请单击电机滑块的黄色矩形。矩形应该消失,电机速度将保持其先前值。
  • 如果您要删除状态转换的条件,请将其设置为0。该值应该消失。
  • 有一个未提及的滑块。该滑块与相机有关。您将在练习 [sec:Line-following] 中详细了解此主题。

你的进度

[编辑 | 编辑源代码]

通过前两个练习,您学习了

  • 什么是有限状态机,以及它与机器人行为之间的关系
  • 如何使用BotStudio
  • 如何设计一个简单的有限状态机

以下练习将训练您自己创建有限状态机。

更好的避碰算法 [初学者]

[编辑 | 编辑源代码]

在这一步,您了解了什么是自动机。现在,您将通过参数估计练习来强化这些知识。自动机的结构是给定的(状态和状态转换),但它不包含任何参数,即执行器命令和传感器值的条件未设置。您将通过经验来设置这些参数。

打开世界文件

[编辑 | 编辑源代码]

打开以下世界文件

.../beginner_better_collision_avoidance_algorithm.wbt

您可能需要增加BotStudio窗口的大小才能看到整个自动机。

避碰自动机

[编辑 | 编辑源代码]

请注意,您可以通过单击BotStudio窗口中的另存为按钮来保存自动机。您也可以通过单击加载按钮来加载它。

[P.1] 从给定的自动机开始(见图)。它只有结构,即有状态和状态转换,但它们的參數未设置。找到每个状态和每个状态转换的参数,以使e-puck避开障碍物。

一个更好的避碰自动机

[P.2] 对真实e-puck重复此操作。

[Q.1] 描述你的研究方法。

闪烁的e-puck [初学者]

[edit | edit source]

到目前为止,你只是修改了现有的自动机。现在是时候创建它们了。在本实践练习中,你将通过操作LED来设计自己的自动机。

打开世界文件

[edit | edit source]

打开以下世界文件

.../worlds/beginner_blinking_epuck.wbt

你可能需要增加BotStudio窗口的大小以查看整个自动机。在模拟窗口中,如果你看不到所有LED,可以通过左键单击来移动摄像头围绕机器人移动。对于本练习,直接在真实的e-puck上操作更方便。

修改自动机

[edit | edit source]

[Q.1] 在不启动自动机的情况下,描述e-puck的行为。通过运行模拟来验证你的理论。

[P.1] 修改当前自动机,以添加以下行为:8个LED将顺时针点亮并熄灭,它们将持续亮0.2 [s]。

[P.2] 修改当前自动机,以添加以下行为:当用手遮住真实的e-puck时,LED会反向点亮。仅使用4个LED来实现此功能(前后左右)。

创建你自己的自动机

[edit | edit source]

设计自动机的一种方法是首先识别可能的执行器配置,为每种配置创建一个状态,设置这些状态的参数,建立从一个状态到另一个状态的条件,为每个条件创建一个转换,最后设置这些条件的参数。不幸的是,这并不总是那么容易。例如,在一个自动机中,可以有两个具有相同执行器命令的状态。事实上,如果你看到一个人在街上奔跑,没有任何背景,你不知道他是要赶公共汽车还是从着火的大楼里逃生。他看起来一样,但他的内部状态不同。

[P.3] 创建一个新的自动机(在BotStudio中按下新建图形按钮)。只选择以下四个LED:前LED、后LED、左LED和右LED。目标是点亮对应于障碍物侧面的LED。请注意,如果机器人两侧都有障碍物,则应点亮两个LED!不要做三侧或四侧有障碍物的情况。

[Q.2] 如果我建议通过使用e-puck周围的8个LED以及最多8个障碍物的所有情况来重复练习,你会怎么做?为什么?你在BotStudio中发现了什么限制?

*E-puck舞蹈* [初学者]

[edit | edit source]

本练习的目标是通过创建e-puck舞蹈,让你的虚拟e-puck在舞池上点燃火焰。你可以想象舞蹈是一系列节奏相同的动作。你可以在有限状态自动机中轻松地对它进行建模。

打开世界文件

[edit | edit source]

打开以下世界文件

.../worlds/beginner_epuck_dance.wbt

这将打开一个迪斯科舞池。此外,这里已经有一个关于你能达成的成就的小例子。我希望你能找到一个比现有e-puck舞蹈更好的舞蹈。

想象你的舞蹈

[edit | edit source]

[P.1] 观察现有的舞蹈。自动机具有循环形状。每次转换的时间相同。创建一个新的自动机或修改现有的自动机。首先,选择一个节奏。示例中选择的节奏是每秒一次移动。这意味着每个计时器都设置为1[s]。然后,你应该为你在全局循环期间想要看到的每个动作创建一个状态(请注意,如果你想要在主循环期间两次执行相同的动作,你必须创建两个状态)。然后,你必须根据你的节奏设置状态参数。最后,使用计时器转换将每个状态链接起来。(提示:为了产生美丽的舞蹈,LED是受欢迎的。你也可以执行半动作)

循线 [初学者]

[edit | edit source]

本练习的目标是探索BotStudio中提供的最后一个设备:摄像头。使用e-puck摄像头,你可以获取有关其前方地面信息。BotStudio“实时”计算出e-puck前方黑色线条的中心。摄像头是另一个e-puck传感器,前线条的中心是此摄像头的传感器值。

线性摄像头

[edit | edit source]

e-puck的前面有一个摄像头。它的分辨率为480x640。由于技术原因,它具有480的宽度和640的高度。用于循线的最重要信息是摄像头的最后一行(参见名为“线性摄像头的视野”的图形)。因此,只有摄像头的最后一行从e-puck发送到Webots。最后,将一个算法应用于此最后一行,以便找到黑色线条的中心。

线性摄像头的视野

问题是e-puck只能看到前方大约5.5厘米,并且只能看到大约4.5厘米宽的线条。此外,此信息每秒刷新大约2次。信息量太少了!

[Q.1] 想象一下,每5秒,在你前方4米处,你只能看到一条3米宽的、始终保持相同角度的线条。你会使用什么策略来循线?想象一下,这条线很复杂。循线最重要的因素是什么?

打开世界文件

[编辑 | 编辑源代码]

打开以下世界文件

.../worlds/beginner_linear_camera.wbt

这将打开一个大型世界。地面上绘制了一条黑线。请注意,为了更逼真,e-puck 摄像头的值存在噪声(高斯噪声)。实际上,真正的摄像头不会获取完美的值。真正的摄像头总是存在一些噪声,它来自多种因素。

循线自动机

[编辑 | 编辑源代码]

在 BotStudio 界面中,您还会发现一个关于摄像头的条件(称为“BotStudio 中的线性摄像头条件”),它由一个滑块表示。该值代表机器人前方黑线的中心。当选择一个转换时,您可以通过拖动滑块来更改关于摄像头的条件,并且可以通过单击文本字段来更改测试的方向(例如,“<5”变为“>5”)。请注意,如果机器人前方没有线,中心值可能会错误。

BotStudio 中的线性摄像头条件

[P.1] 在模拟和现实中运行给定的自动机。要创建一个真实的环境,您可以在一张大白纸上用粗黑笔绘制一条线(例如:A2 格式)。黑线必须远离纸张边界。

[P.2] 观察两个条件的方向(大于或小于)。

[P.3] 尝试通过更改状态和转换的参数来尽可能快地让 e-puck 前进。

拉力赛 [初学者] [挑战]

[编辑 | 编辑源代码]

打开以下世界文件

.../worlds/beginner_rally.wbt

[P.1] 创建一个自动机,它可以完成这条路径的完整转弯。(提示:调整您的速度!)


  1. 更多信息:步进电机
  2. 更多信息:发光二极管
  3. 更多信息:加速度计
  4. 噪声是无意的干扰。更多信息:噪声
  5. 来源和更多信息:有限状态自动机
华夏公益教科书