资料介绍
描述
我家里有 Alexa,我的两个孩子喜欢乐高积木。我从没想过我可以做些什么来帮助我提高我的开发技能,并且可以让我的孩子从如此有趣的角度看待我的工作。他们总是告诉我他们想玩乐高机器人,我不会说开发这个解决方案提供的所有功能很容易,所以我不得不告诉他们构建伟大的东西需要时间。现在我看到他们在玩它,我知道这个项目不知何故对他们产生了影响,而不仅仅是对我。
这个项目有两个主要部分。一个是Alexa技能,一个是Lego Mindstorms机器人。让我们在下面看看它们。
ALEXA技巧
该技能是在定义了意图和槽的 Alexa 开发控制台中开发的。
要创建技能,请登录 Alexa 开发控制台并单击创建技能。
为其命名,选择自定义模型,并选择提供您自己的后端资源,因为我们将使用我们自己的 Lambda 函数而不是 Alexa 托管技能功能。
在您创建的技能中粘贴您将在提供的 GitHub 存储库中找到的 json 技能模型定义并保存模型。三种不同的语言有三种 json 模型。
技能的服务端点是 AWS Lambda 函数。在端点部分,您将需要引入 Lambda 函数的 ARN(请参阅下面的 lambda 函数创建部分),并且您将需要使用可在此处找到的技能 ID。
Custom Interface Controller 接口和 Alexa Presentation Language (APL) 接口已启用,可以与 Alexa Gadget (Lego Mindstorm) 通信,并管理 Amazon Echo 显示(如果设备有显示)。
语言和声音
这是一项自定义 Alexa 技能,提供两种语言版本,即英语(美国和英国)和西班牙语 (ES)。
语言英语(美国)和英语(英国)的技能模型定义相同。西班牙语 (ES) 中的技能具有相同的意图和槽类型,但示例话语被翻译,因为槽值同义词保持相同的槽值。这样,当从 Alexa 设备接收指令时,我们可以对所有语言使用相同的 Lambda 函数处理程序。
我只介绍了西班牙语,但可以使用相同的方法添加任何其他语言。
Lambda 函数的语音文件夹中有两个 json 文件,其中包含英语 (en-US.json) 和西班牙语 (es-ES.json) 的 Alexa 语音表达式,Alexa 将回复用户请求,或者乐高头脑风暴事件。考虑到 Alexa 设备请求的“区域设置”属性,将选择这两者之一,该属性指示在 Echo 设备中选择的语言。
回声设备中有两种主要声音,一种是作为技能助手的每种语言的 Alexa 默认声音,另一种是代表乐高机器人声音的男性声音(美国的 Justin,ES 的 Enrique 和英国的 Brian) .
交互模型:调用、意图和槽
调用模型是英文的“lego battle”和西班牙文的“batalla de lego”。
定义了 12 个意图和 14 个槽。
goSomewhere 意图允许用户在乐高战场中移动机器人。机器人可以去 6 个地方,即家、直升机场、停车场、火车站、港口和颜色线。
机器人有 4 种武器可用,即枪、锤子、刀片和采摘器。changeTool intent 允许用户告诉 Alexa 武器发生了变化,useTool intent 用于命令机器人对指定目标使用武器,或者在当前位置和方向使用武器,以防没有目标定义。
findColor 意图为用户提供了让机器人在颜色线中找到特定颜色的能力。
setSpeed 意图允许用户在慢速、正常或快速之间进行选择。
setTarget 是定义机器人攻击目标的意图。定义了 5 个目标:飞机、船、拖拉机、树和移动目标。
最后一个自定义 intent 是 remoteControl,它可以被触发以在 echo 设备屏幕中打开遥控器,如果它有的话。使用该遥控器,用户可以触摸屏幕上使用 APL 渲染的不同箭头,将机器人向前、向后、向左和向右移动 90º。
还有 5 个默认的内置意图可用。普通嫌疑犯。
已经为每个意图定义了示例话语,试图涵盖用户可能提出这些请求以管理 Lego Battle 领域中的 Lego 机器人的许多可能方式。
定义了一组 14 种槽类型,以收集技能正常工作所需的相关槽,例如 placeToGo、finalTool、target、speed 和 colorFind,但其他一些类型用于涵盖可能的不同用户表达。
并非只有一个值对每个槽类型有效,定义了多个同义词以涵盖更多场景。
您可以在提供的 GitHub 存储库的 /lego/models/ 文件夹中找到技能的 json 定义。为特定的技能语言交互模型加载它们,保存并构建它们将使一切正常工作,一旦启用了上述接口并连接了 Lambda 函数端点。
Lambda 函数端点
要创建 Lambda 函数,您需要登录 AWS 控制台 Lambda 服务并创建一个新函数。
选择 Author from scratch,为其命名并单击 Create function。
在下一个屏幕中,您需要单击添加触发器。在此屏幕中,您可以复制 Alexa 技能开发控制台中需要的函数 ARN 来定义 Lambda 端点。
添加 Alexa Skill Kit 触发器时,启用技能 ID 验证,以便只接受来自该技能的请求。可以在 Alexa 技能开发控制台的端点部分找到此技能 ID。引入它并单击添加。
在此之后,您可以部署可以在提供的 GitHub 存储库 (/lego/lambda/) 中找到的 nodeJs 代码,然后一切都将在与 Alexa 技能相关的方面发挥作用。不要忘记安装所需的节点模块。“npm install”将安装 package.json 中列为依赖项的所有模块。
唯一缺少的部分是 Alexa 语音服务中的 Alexa Gadget 产品创建以及 Lego Mindstorms 构建和配置。在解释之前,让我们更深入地了解提供的 nodeJs 代码片段。
在本地克隆 Github 存储库并使用 Visual Studio Code 或您首选的开发应用程序打开它。
乐高文件夹包含:
-
包含 2 个 APL 文档的文档文件夹将在 Alexa 设备屏幕中呈现。
我们已经制造了所有可用的武器。
这是一个巨大的乐趣!
除此之外,我还添加了两个传感器:颜色传感器和触摸传感器,因此 Track3r 现在能够跟踪颜色线中的颜色,并且当它在战场上失去位置时也可以重置到原位。
这里有一些颜色传感器如何连接到积木的图片。
颜色传感器扩展一些其他图像来解释如何连接乐高机器人中的触摸传感器。
触摸传感器扩展EV3程序块设置
我已按照 LEGO MINDSTORMS 语音挑战中的说明进行操作:设置页面 ( https://www.hackster.io/alexagadgets/lego-mindstorms-voice-challenge-setup-17300f ) 以设置 EV3 开发环境并准备与 Echo 设备和 Alexa 配合使用的 EV3 程序块。
下载 ev3dev 软件,闪存 SD 卡并连接到 EV3 程序块(在我的例子中使用电缆)。在 Visual Studio Code 中安装 ev3dev-browser 扩展,您可以连接设备、发送工作区文件并使用 SSH 终端执行 python 程序。
上面提供的链接中的说明非常详细。
Lego Mindstorms 中的蓝牙存在一些已知问题,因此如果您在 EV3 程序块中看不到蓝牙,请尝试重新启动它并拔下所有连接的传感器,如果它仍然无法正常工作,请尝试重新刷新您的 SD 卡。
Python代码
传输到 Ev3 Brick 并执行以通过蓝牙从 Alexa Echo 设备接收控制指令的代码具有以下结构:
EV3 Python代码结构有两个文件夹:
-
images文件夹包含从https://sites.google.com/site/ev3devpython/learn_ev3_python/screen/bmp-image-collection 下载的 .bmp 图像。我们的想法不是展示所有功能的所有代码,而是解释其中的一些功能,以便让关于如何开发所有体验的主要想法变得更加清晰。图片中的代码被简化为最相关的代码行,因此只是提供一个想法,建议在提供的 Github 存储库中查看完整代码。
在 Lambda nodeJs 函数中的 LaunchRequest 响应管理期间,Alexa 向 Ev3 brick 发送一个带有特定令牌的 CustomInterfaceController.StartEventHandler 指令,以使 brick 中的事件能够发送到带有该令牌的 Alexa Echo 设备并被其接受。
打开技能时出现的另一个功能是 APL 文档渲染。我正在使用一个名为 sequence.json 的 APL 文档,可以在文档文件夹中找到它。主要属性如下所示。
该文档是一个带有容器的模板,容器具有水平序列组件,图像组件通过数据源中的 listImages 数组绑定到文档。另一个容器包含将在 SpeakItem 命令中使用的不可见文本组件。
在 Lego Ev3 Brick 中执行 lego.py 程序时,会初始化所有电机、传感器、Ev3 功能和 python 变量。之后是一段简短的图像和一个显示机器人还活着的命令。
创建 show_image 函数是为了方便在 Ev3 Brick 液晶屏幕上显示图像,从图像文件夹中获取图像。
在导入了 ColorSensor 类并创建了它的一个实例之后,与颜色相关的变量被初始化,并创建了一个线程来管理颜色搜索例程。
当接收到类型为“findColor”的自定义指令时,颜色将保存在变量中并调用 findColor 函数。在此函数中,机器人移动到颜色线并将 findColorIOn 变量设置为 True,使代码执行 while 例程以在与上述线程关联的 _find_color 函数中搜索指定的颜色。机器人开始沿着颜色线移动。如果检测到颜色,则电机停止,并向 Alexa 发送 FindColor 事件,并在负载中检测到颜色。如果未找到颜色,则发送相同的事件,但在这种情况下,颜色“无”作为有效负载。
让我们看一下管理 findColor Intent 的 Lambda nodeJs 代码。
一旦收到 findColor 意图,就会计算响应,并构建指令类型 findColor 以发送到小工具。
机器人位置和场地中的不同位置使用 X 和 Y 轴值定义。方向是介于 0 和 2*pi 弧度之间的值。机器人从位置 (1, 1) 和方向 0 开始,这也是起始位置。
从初始点到目标点的移动距离是 X 轴行程和 Y 轴行程的斜边。使用反正切计算方向,然后要进行的转弯是方向与当前方向的差值。
一旦计算出这一点,就会执行移动,开始转向面向目标点,向前移动计算出的距离,然后再次转向以进入目标位置位置方向。
一旦到达那个新位置,就会调用 setPosition 函数来为下一次移动保留新位置。
转弯和移动功能考虑了轮子的半径和机器人轮子之间的距离。使用一些数学方程式可以计算出电机必须移动的度数。
setPosition 函数使用小工具类中定义的内部变量来保持机器人在场地中的最终位置。
关于负责 goSomewhere 意图的 nodeJs 代码,没有什么新的可说的。
让我们看一下用于这些意图的特定 python 和 nodeJs 代码。
当武器是枪时,它会在不离开位置的情况下开火。只是方向发生了变化。
当定义的目标是移动目标时,机器人必须首先找出目标在哪里。在这种情况下,目标是红外传感器遥控信标。机器人反应的信标信号是通道 4 中的信标信号。
函数 facingTarget 计算信标的方向。由于红外传感器位于机器人的后部,因此我们将 pi 弧度与航向返回值相加,转换为弧度。
距离考虑到大约有70cm的红外范围,所以红外传感器距离函数给出的值乘以7。
我只会评论更多关于 useTool nodeJs 代码的内容,因为 setTarget 和 changeTool 意图与已经解释过的其他意图相比没有什么特别之处。
当收到 useTool 意图并且用户提供武器名称和要执行的操作时,代码会检查这两者是否相关联,这样您就不会尝试发射锤子或砸碎枪支。
在这种情况下,呈现的 APL json 文档是 arrows.json。它是一个带有背景图像的容器和另一个带有围绕箭头图像的 TouchWrapper 组件的容器,这些组件发送以按下箭头的方向作为参数的事件。
当用户按下其中一个箭头时,TouchWrapprer 中生成的事件将被发送并在收到时进行分析,以便将自定义指令发送到触发移动动作的 Ev3 小工具。
RemoteControl 和 Touchevent 处理程序调用 getRemoteControl 和 getClicked 资源函数来获取向用户返回正确响应所需的信息,以及发送到小工具的指令。当用户单击按钮时,机器人位置设置为“家,甜蜜的家”。
在以下 python 代码行中,您可以看到 TouchSensor 类是如何实例化的,以及管理被按下按钮的线程是如何创建的以及它是如何工作的。
如果遥控器已被使用,则 remoteControl 变量的值为 True,然后,如果按下按钮,位置将设置为主页,HomeButton 事件将发送到 Alexa。
InfraredSensor 类的一个实例被创建并用于定义按下通道 1 和通道 2 中的每个按钮时需要触发的内容。
这里模拟了您如何使用 FireTV 在电视中看到技能运行,但由于该小工具未通过蓝牙连接到 FireTV,因此乐高机器人没有提供任何响应。
-
images文件夹包含从https://sites.google.com/site/ev3devpython/learn_ev3_python/screen/bmp-image-collection 下载的 .bmp 图像。我们的想法不是展示所有功能的所有代码,而是解释其中的一些功能,以便让关于如何开发所有体验的主要想法变得更加清晰。图片中的代码被简化为最相关的代码行,因此只是提供一个想法,建议在提供的 Github 存储库中查看完整代码。
- LEGO EV3 Baby Yoda-Alexa控制的EV3机器人
- 由Mindstorms EV3和Alexa提供支持的LEGO Target Practice
- 由Alexa控制的Lego Mindstorms EV3机器人
- 使用LEGO MINDSTORMS EV3 Amazon Alexa构建的Shelly解决方案
- 基于DSP的自适应多通道有源噪声控制算法 24次下载
- 440Hz窄带(5Hz)声控开关电路 38次下载
- 声控继电器驱动电路原理图免费下载 29次下载
- 声控延时灯的PCB原理图免费下载 81次下载
- DSP在有源噪声控制中有怎么样的应用 11次下载
- 基于Lego颜色传感器的寻线小车程序 204次下载
- 辅导学生安装声控开关
- sk-6声控电路
- 声控电路及制作
- 声控彩灯电路及制作
- 声控玩具猫电路及制作
- 声控灯是如何做到声控的呢 声控灯的电路原理解析 6891次阅读
- 声控集成电路SK-2构成的声控电子警犬电路 2619次阅读
- 声控电路BB一5构成的声控开关电路 3869次阅读
- SM401声控集成块构成的声控闪光电路 3628次阅读
- 声控集成电路SL517构成的声控开关电路 3754次阅读
- 声控灯的电路构成及工作原理分析 3.9w次阅读
- 声控灯电路中的常见故障有哪些 1.6w次阅读
- 简易声控延时灯制作方法 1.4w次阅读
- 大家的互动式声控机器人 8812次阅读
- 居民楼道声控电路图(六款声控电路原理图详解) 17.8w次阅读
- 声控开关电路设计汇总(八款设计电路原理详解) 10w次阅读
- 简易声控开关电路图_三线声控开关接线图_四线声控开关怎么接线 12.2w次阅读
- 基于DSP的声控系统设计与实现 1324次阅读
- 报晓声控狗电路图 2173次阅读
- 声控报警电路 2977次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多