×

Lego Battle Alexa声控游乐场

消耗积分:0 | 格式:zip | 大小:27.19 MB | 2023-07-07

李俊

分享资料个

描述

我家里有 Alexa,我的两个孩子喜欢乐高积木。我从没想过我可以做些什么来帮助我提高我的开发技能,并且可以让我的孩子从如此有趣的角度看待我的工作。他们总是告诉我他们想玩乐高机器人,我不会说开发这个解决方案提供的所有功能很容易,所以我不得不告诉他们构建伟大的东西需要时间。现在我看到他们在玩它,我知道这个项目不知何故对他们产生了影响,而不仅仅是对我。

这个项目有两个主要部分。一个是Alexa技能,一个是Lego Mindstorms机器人。让我们在下面看看它们。

ALEXA技巧

该技能是在定义了意图和槽的 Alexa 开发控制台中开发的。

要创建技能,请登录 Alexa 开发控制台并单击创建技能。

poYBAGOSqPSAbc2mAADFjhjOUsI875.jpg
技能创造1
 

为其命名,选择自定义模型,并选择提供您自己的后端资源,因为我们将使用我们自己的 Lambda 函数而不是 Alexa 托管技能功能。

poYBAGOSqPqABzv5AAGvo4TQlWE166.jpg
技能创造2
 

在您创建的技能中粘贴您将在提供的 GitHub 存储库中找到的 json 技能模型定义并保存模型。三种不同的语言有三种 json 模型。

poYBAGOSqP2AH247AADNJ6pHMaQ153.jpg
技能json模型上传
 

技能的服务端点是 AWS Lambda 函数。在端点部分,您将需要引入 Lambda 函数的 ARN(请参阅下面的 lambda 函数创建部分),并且您将需要使用可在此处找到的技能 ID。

pYYBAGOSqQGAAxVjAAEiELWxFP0696.jpg
指向 AWS Lambda 函数的技能端点
 

Custom Interface Controller 接口和 Alexa Presentation Language (APL) 接口已启用,可以与 Alexa Gadget (Lego Mindstorm) 通信,并管理 Amazon Echo 显示(如果设备有显示)。

pYYBAGOSqQmAB1D6AAFplWjMBc8764.jpg
启用技能界面
 

语言和声音

这是一项自定义 Alexa 技能,提供两种语言版本,即英语(美国和英国)和西班牙语 (ES)。

poYBAGOSqQ6AU0zRAAAoAYqcN3o426.jpg
乐高对战技能支持三种语言
 

语言英语(美国)和英语(英国)的技能模型定义相同。西班牙语 (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 个槽。

pYYBAGOSqRCAS0FNAADkKopDsK4611.jpg
调用、意图和槽
 

goSomewhere 意图允许用户在乐高战场中移动机器人。机器人可以去 6 个地方,即家、直升机场、停车场、火车站、港口和颜色线。

poYBAGOSqRaAYihUAAFOO8j9RgE517.jpg
去的地方的地图
 

机器人有 4 种武器可用,即枪、锤子、刀片和采摘器。changeTool intent 允许用户告诉 Alexa 武器发生了变化,useTool intent 用于命令机器人对指定目标使用武器,或者在当前位置和方向使用武器,以防没有目标定义。

 
 
 
poYBAGOSqRiAdQHhAAAk4Kzno_s250.jpg
 
1 / 4
 

findColor 意图为用户提供了让机器人在颜色线中找到特定颜色的能力。

setSpeed 意图允许用户在慢速、正常或快速之间进行选择。

 
 
 
poYBAGOSqRyAcsLuAADZDjWNZko899.jpg
 
1 / 3
 

setTarget 是定义机器人攻击目标的意图。定义了 5 个目标:飞机、船、拖拉机、树和移动目标。

 
 
 
pYYBAGOSqR-AVKgpAACsd9LdTTU875.jpg
 
1 / 5飞机
 

最后一个自定义 intent 是 remoteControl,它可以被触发以在 echo 设备屏幕中打开遥控器,如果它有的话。使用该遥控器,用户可以触摸屏幕上使用 APL 渲染的不同箭头,将机器人向前、向后、向左和向右移动 90º。

还有 5 个默认的内置意图可用。普通嫌疑犯。

已经为每个意图定义了示例话语,试图涵盖用户可能提出这些请求以管理 Lego Battle 领域中的 Lego 机器人的许多可能方式。

定义了一组 14 种槽类型,以收集技能正常工作所需的相关槽,例如 placeToGo、finalTool、target、speed 和 colorFind,但其他一些类型用于涵盖可能的不同用户表达。

并非只有一个值对每个槽类型有效,定义了多个同义词以涵盖更多场景。

您可以在提供的 GitHub 存储库的 /lego/models/ 文件夹中找到技能的 json 定义。为特定的技能语言交互模型加载它们,保存并构建它们将使一切正常工作,一旦启用了上述接口并连接了 Lambda 函数端点。

pYYBAGOSqSeAKsi5AAAQeXDNf3A845.jpg
保存并构建模型
 

Lambda 函数端点

要创建 Lambda 函数,您需要登录 AWS 控制台 Lambda 服务并创建一个新函数。

pYYBAGOSqTGAfn0gAAEtaRjEwew333.jpg
Lambda 函数创建
 

选择 Author from scratch,为其命名并单击 Create function。

在下一个屏幕中,您需要单击添加触发器。在此屏幕中,您可以复制 Alexa 技能开发控制台中需要的函数 ARN 来定义 Lambda 端点。

pYYBAGOSqTSAB19XAACeBlNYIvM678.jpg
函数 ARN
 

添加 Alexa Skill Kit 触发器时,启用技能 ID 验证,以便只接受来自该技能的请求。可以在 Alexa 技能开发控制台的端点部分找到此技能 ID。引入它并单击添加。

pYYBAGOSqTiAHjleAAC3_4yYNpc738.jpg
添加 Alexa Skill 套件触发器
 

在此之后,您可以部署可以在提供的 GitHub 存储库 (/lego/lambda/) 中找到的 nodeJs 代码,然后一切都将在与 Alexa 技能相关的方面发挥作用。不要忘记安装所需的节点模块。“npm install”将安装 package.json 中列为依赖项的所有模块。

唯一缺少的部分是 Alexa 语音服务中的 Alexa Gadget 产品创建以及 Lego Mindstorms 构建和配置。在解释之前,让我们更深入地了解提供的 nodeJs 代码片段。

在本地克隆 Github 存储库并使用 Visual Studio Code 或您首选的开发应用程序打开它。

乐高文件夹包含:

pYYBAGOSqTqAU0y0AABC1hsVjSQ899.jpg
Lambda 函数文件
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !