AI for Youth Academy 青少年AI研究计划

第一年 · 第02周

第二章:绘制机器人的旅程

上周,你学习了坐标如何帮助我们准确描述事物在地图上的位置。本周,我们要更深入:不仅要知道事物在哪里,还要知道它们相距多远——以及为什么这在编程机器人导航时很重要。

想象你是一个机器人。你可以看到地图上的目标,但你能弄清楚如何到达那里吗?让我们来探索吧!

快速复习:坐标平面

记得上周:一个坐标平面就像一张宝藏地图,有两条数轴在中心交叉。

  • 水平线是X轴(左和右)。
  • 垂直线是Y轴(下和上)。
  • 它们交叉的地方叫做原点,标记为(0, 0)。

这个地图上的任何点都可以用两个数字描述:(x, y)。第一个数字告诉你左右移动多远,第二个告诉你上下移动多远。

距离问题

挑战:你的机器人坐在A点,需要移动到B点。你知道两点在地图上的位置,但你的机器人需要知道:我需要移动多远?

如果A点在(1, 2),B点在(4, 6),你不能只说"向前移动"。你需要计算这两点之间的距离

数学的解决:这周在课堂上,我们将学习如何计算坐标平面上任意两点之间的精确距离。这将帮助我们将机器人编程为从一个检查点精确移动到另一个检查点!

为什么这对你的机器人很重要

当你编程LEGO SPIKE Prime机器人时,你会告诉它类似的事情:

  • "向前移动5个单位到达检查点。"
  • "转90度,然后移动3个单位。"

但机器人怎么知道要移动多远?它使用电机旋转。如果你知道距离和机器人轮子的大小,你可以精确计算电机需要转动多少度。

如果一次完整的轮子旋转(360°)让机器人移动17.6厘米,
那么移动44厘米:

电机度数 = (44 ÷ 17.6) × 360 = 900°

这周,你将使用像move_for_degrees(900)这样的辅助函数来告诉机器人要移动多远。数学让它精确!

💻 电脑设置:准备编码!

在我们能够编程SPIKE Prime机器人之前,我们需要设置电脑。你有两个选择:

选项1:桌面应用(推荐)

下载并安装LEGO Education SPIKE App。这可以离线工作,有你需要的所有功能。

下载SPIKE App →

注意:支持Windows、Mac、iPad、Chromebook和Android平板电脑。

选项2:浏览器版本

如果你无法安装应用,可以使用浏览器版本。确保你可以访问:

spike.legoeducation.com →

注意:需要Chrome、Edge或Safari。需要网络连接。

从Word Blocks到Python

去年的学生使用Word Blocks编写他们的解决方案,这是一种可视化编程界面,让编码感觉像用LEGO积木搭建。这是他们的代码样子:

显示机器人移动编程的Word blocks代码

Word Blocks直观易懂——你可以通过看积木就知道机器人会做什么。但今年,我们要使用Python。这是用Python编写的相同程序:

from hub import port
import runloop, motor_pair

async def main():
    # write your code here
    motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)
    await motor_pair.move_for_degrees(motor_pair.PAIR_1, 360, 0, velocity = 360)

runloop.run(main())

为什么用Python而不是Word Blocks?

如果Word Blocks那么直观,为什么会有人用Python?好问题!以下是一些常见原因:

  • 可扩展性:当程序变大时,Word Blocks变得混乱且难以管理。文本代码即使有数百行也能保持组织良好。
  • 精确和控制:Python让你对每个细节有细粒度的控制。你可以创建复杂的计算、自定义函数和Word Blocks中很繁琐的高级逻辑。
  • 现实世界技能:专业工程师、数据科学家和AI研究人员使用像Python这样的文本语言。现在学习它为真实职业打开大门。
  • 协作:代码可以使用Git等工具轻松共享、审查和版本控制。这对团队项目至关重要。
  • 库和资源:Python有数千个库,涵盖从机器学习到Web开发的所有内容。Word Blocks仅限于内置功能。

📖 阅读文档

编程的一个关键技能是学习阅读文档。文档告诉你如何使用不同的函数以及它们的参数意味着什么。

看看我们Python代码中的这一行:

await motor_pair.move_for_degrees(motor_pair.PAIR_1, 360, 0, velocity = 360)

move_for_degrees函数接受几个参数。第一个360是电机应该旋转的度数。这是机器人将移动多远。

让它更容易:创建辅助函数

使用度数不方便。在规划机器人路径时,我们用现实世界距离思考,比如"向前移动50厘米",而不是"旋转电机1,028度"。

这是我们可以创建自己的辅助函数来将距离转换为度数的地方:

WHEEL_CIRCUMFERENCE = 17.5

# 输入必须与WHEEL_CIRCUMFERENCE使用相同的单位
def degreesForDistance(distance_cm):
    # 如果需要,添加齿轮比乘数
    return int((distance_cm/WHEEL_CIRCUMFERENCE) * 360)

现在不用手动计算度数,我们可以直接写:

degrees = degreesForDistance(50)  # 向前移动50厘米!

Python解锁战略优势

这是一个为什么Python在比赛中有用的强大例子:通过用Python编写代码,我们可以把更多工作留给程序,在开始时更战略性地定位机器人。

显示Python编程战略优势的替代机器人起始位置

替代起始点:使用Python,我们可以在代码中处理复杂的移动和计算,允许我们在比赛运行时将机器人定位在更有优势的起始位置。

在Word Blocks中,复杂的导航和计算更难管理,通常迫使团队将机器人定位在更简单(但不那么优化)的起始位置。有了Python处理精确计算、条件逻辑和像degreesForDistance()这样的辅助函数的能力,我们可以自信地从给我们战略优势的位置开始——即使它们需要更复杂的初始移动。

这只是文本编程如何开启可视化积木无法实现的可能性的一个例子。随着你的程序变得越来越复杂,Python的力量变得越来越有价值!