亚马逊AWS官方博客

使用 Amazon Sumerian 和 Amazon Lex 构建 AR/AI 车辆使用手册

Original URL: https://aws.amazon.com/blogs/machine-learning/building-an-ar-ai-vehicle-manual-using-amazon-sumerian-and-amazon-lex/

汽车厂商在车辆中不断增加新的功能、用户界面和人工智能特性。同时,也发布了各种用户使用手册,详细介绍如何使用这些功能。然而这些用户手册往非常繁琐,包含不同的语言,长度长达数百页。因此,车主常常难以搜索到与特定功能相关的信息。车厂也曾尝试使用视频或移动应用替代纸质手册,但并没有改进用户体验,很多车主仍然不知道如何充分利用了汽车厂商提供的所有创新功能。

本博文介绍了如何使用 Amazon Sumerian 和其他 AWS 服务创建交互式汽车手册。解决方案中使用了增强现实、人工智能聊天机器人以及由 AWS IoT 提供的联网汽车数据。它并非全面的分步教程,仅提供逻辑组件的概述。

AWS 服务

本博文使用了以下六项服务:

  1. Amazon Sumerian 让您能够快速、轻松地创建和运行虚拟现实 (VR)、增强现实 (AR) 和 3D 应用程序,而无需进行任何专业编程或 3D 制图专业知识。只需一键单击即可发布所创建的 3D 场景,然后在 Web、虚拟现实耳机和移动应用程序中分发。在本博文中,Sumerian 用于渲染车辆内部和外部(可选)的 3D 模型并为其添加动画效果。
  2. Amazon Lex 是一项使用语音和文本为任何应用程序构建对话接口的服务。Amazon Lex 采用的支持技术与 Amazon Alexa 相同。Amazon Lex 使所有开发人员都能够使用 Alexa 的强大功能,从而使深度学习技术大众化。在本博文中,Amazon Lex 用于识别语音命令并确定拥有者所查询的功能或特性。
  3. Amazon Polly 是一项文本转语音服务,它使用高级深度学习技术合成语音,使其听起来像人声。通过 Amazon Polly,您可以创建能够说话的应用程序,并构建全新类别的支持语音功能的产品。Amazon Polly 支持多种语言的数十种语音,支持应用程序在不同国家/地区工作。在本博文中,Amazon Polly 用于将 Amazon Lex 答复表达成逼真的语音
  4. Amazon DynamoDB 是一个键值和文档数据库,用于以任何规模提供个位数毫秒级性能。DynamoDB 完全托管,具有内置的安全性、备份和还原功能以及用于 Internet 规模应用程序的内存缓存。在本博文中,您将看到将 DynamoDB 用作步骤的文档存储,以便在车辆内部进行交互。
  5. AWS Lambda 让您无需预置或管理务器即可运行代码。在本演示中,Lambda 函数用于填充 AWS IoT Core 影子文档以包含所需内容
  6. AWS IoT Core 是一种托管云服务,可让联网设备轻松安全地与云应用程序及其他设备进行交互。AWS IoT Core 支持安全、可靠地将数十亿台设备和数万亿条消息连接到 AWS 终端节点和其他设备。AWS IoT Core 支持用于存储联网设备的最新状态(无论这些设备是否联机)的设备影子概念。在本博文中,设备影子文档用于在 Amazon Lex、DynamoDB、Sumerian 和车辆的虚拟表示形式之间交换信息。

下图展示了这些服务之间的架构关系。

本图展示了 AWS 服务相互之间以及与最终用户和车辆之间的相对关系。车主启动移动应用程序,该应用程序中嵌入了包含车辆模型的 Sumerian 场景。车主随后可以通过点击按钮来激活 Amazon Lex 和 Amazon Polly。激活后,用户可以与应用程序进行交互,以执行需要执行的一系列步骤。

用户手册的内容存储在 DynamoDB 中。Amazon Lex 通过调用 Lambda 来获取此信息。Lambda 函数将查询 DynamoDB 表并检索 JSON 结构,以描述:

  1. 步骤(按时间排序并且标记有 startend),以指示何时应最终突出显示控件。例如,…{“LeftTemperatureDial”: {“start”: 0, “end”: 2 }}…
  2. 需要在步骤于 Sumerian 模型中显示时发出的提示。例如,“按下左侧调温盘 2 秒钟。”

此 JSON 文档随后将传递给 AWS IoT Core 设备影子文档。Sumerian 随后将定期轮询文档的状态更改,并通过高亮显示相应的界面控件来让 Sumerian 模型反映步骤。

如需更好的视觉和听觉效果,请参阅 AWS 汽车演示视频。

 

如何创建此演示

请按照以下步骤操作,来构建此演示:

  1. 创建基本场景。
  2. 为控制元素添加标签。
  3. 创建 DynamoDB 表。
  4. 创建 Amazon Lex 机器人。
  5. 使用 Lambda 函数。
  6. 在 Sumerian 中创建一个状态机。
  7. 在场景中放置一个 AR 摄像头。
  8. 发布场景。
  9. 链接至 Amazon Lex 机器人。
  10. 部署应用程序。

步骤 1:创建基本场景

创建一个带有实体的基本场景以及 AWS 配置。

  1. 使用增强现实模板创建一个场景,并导入所购汽车的 3D 资产。此模型源自 3D 模型市场,也可从免费的 3D 图库或 3D 设计软件以任何受支持的格式导入。
  2. 创建一个 Amazon Cognito 身份池,以允许 Sumerian 使用 Amazon Lex 和 AWS IoT Core。此身份池应拥有访问 AWS IoT、Amazon Lex 和 Amazon Polly 的相应策略。有关更多信息,请参阅使用 AWS CloudFormation 设置 Amazon Cognito
  3. 向 Sumerian 场景中的 AWS 配置组件提供创建的身份池 ID,并启用 AWS IoT 数据客户端上的复选框。

步骤 2:为控制元素添加标签

创建包含车内大部分控制元素(仪表盘、按钮、盖板、显示屏、标志等)的 3D 模型或实体。我将这些标记涂成了红色并让它们成半透明状,以便仍可看到下面的实际控件。我对这些实体进行了命名,以便能够在我的脚本中更轻松地识别出它们。我还隐藏了它们以模拟初始状态,在该状态下,只能看到实际的车内控件,如下面的屏幕截图所示。

步骤 3:创建 DynamoDB 表

在 DynamoDB 中创建一个表,并使用各种车辆功能和相应的步骤对其进行数据初始化,以启用、禁用、设置或取消设置相应的功能。这些指令中包含必须显式的每个子模型实体的开始/结束时间和持续时间,以遵循您想要的显示顺序,如以下屏幕截图所示。

步骤 4:创建 Amazon Lex 机器人

创建 Amazon Lex 机器人并使用意图和话术对其进行初始化。您将启用 Amazon Lex 来理解车主的问题。Amazon Lex 将确定车主所询问的功能,并将此信息发送给 Lambda 函数。

如在上面的两个屏幕截图中所示,您将创建一个被称为 airconditioningManual 的意图。此意图随后将包括若干个含有以下三个自定义槽的示例话术:

  • {option},用于描述需要执行的活动,示例包括“打开”、“增加”、“移除”等
  • {action},用于描述功能,例如“温度”、“风扇速度”等
  • {conjunction},用于允许可选连词,如“通过”、“在…上”、“的”等

您可以为其他交互或其他车辆部件添加更多意图。

步骤 5:使用 Lambda 函数

Lambda 函数包含用于执行下列步骤的代码。

  1. 它用于查询 DynamoDB 表,以获取包含可视或高亮显示的控件元素(仪表盘、按钮、盖板、显示屏、标志等)开始时间、结束时间和持续时间的已排序指令文档。
    response = dynamo_client.get_item(
                        TableName='XXXautoYYY_manual',
                        Key={
                                'action_name': {
                                    'S': toget
                                }
                            }
                    )
  2. Lambda 函数将通过设备影子文档转换这组指令,并将其存储至 AWS IoT Core。
     action = iot_client.update_thing_shadow(
                        thingName='XXXautoYYY',
                        payload=json.dumps({
                            "state":{
                                "desired": {
                                    "steps": actionList
                                }
                            }
                        })
                    )  
  3. Lambda 函数将向 Amazon Lex 返回一个响应对象,以满足来自手册拥有者的请求。此响应对象包含包装在句子中的要执行的指令,可进行播放。
    rtrn = {
            "dialogAction": {
                "type": "Close",
                "fulfillmentState": "Fulfilled",
                "message": {
                    "contentType": "PlainText",
                    "content": rtrnmessage
                }
            }
        }

步骤 6:在 Sumerian 中创建一个状态机

使用以下步骤在 Sumerian 中创建一个状态机。

  1. 此状态机将持续侦听设备影子文档上发生的更改。状态机中存在三种状态,如下图所示:
      1. loadSDK(加载),表示加载 AWS SDK
      2. getShadow(参见下一步)
      3. waiting(等待),用于在循环例行程序中调用 getShadow 状态。

    如需了解与 Sumerian 中的状态机相关的更多信息,请参阅状态机基础知识。这些更改将根据 IoT 影子提供的指令在模型上执行,以按照指定的开始/结束时间和持续时间显示标记元素。设备影子随后将进行重置。

  2. 上一步骤中的状态机中的 getShadow 状态将执行检索 IoT 设备影子的脚本,以执行单独层的实际动画。如需了解与编写脚本和检索 IoT 设备影子相关的更多信息,请参阅 IoT 物体、影子和脚本操作。脚本执行步骤(显示高亮显示的实体→等待→隐藏突出显示的实体)的示例代码段如下所示:
    function showControl(control, ctx, controlName) {
        
        setTimeout(function(){
            var myWorld = ctx.entity.world.entityManager
            var controlEnt = myWorld.getEntityByName(controlName)
            controlEnt.show()
            setTimeout(function(){
                controlEnt.hide()
                
            }, (control.end-control.start)*1000);
        }, control.start*1000);
    }   

步骤 7:在场景中放置一个 AR 摄像头

在面向车辆仪表板的场景中放置一个 AR 摄像头实体。我还相应地扩展车辆,以便移动应用程序用户和车主能够看到控件元素(仪表盘、按钮、盖板、显示屏、标志等)相对于实际车辆上的控件的大小。

步骤 8:发布场景

发布场景并将 URL 嵌入到 GitHub 上提供的示例 iOS/Android 占位符应用程序中。这些应用程序为开源应用程序,可用于 iOSAndroid

private let sceneURL = URL(string: "https://us-east-1.sumerian.aws/ABCDEFGHIJKLMNOPRSTUVWXYZ1234567.scene/?arMode=true&&a")!

步骤 9:链接至 Amazon Lex 机器人

最后一点,也是最重要的一点,我通过 GitHub 上的其他示例项目添加 Amazon Lex 机器人,并将其与步骤 4 中发布的 Amazon Lex 机器人链接在一起。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let credentialProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "us-east-1:STUVWXYZ-0000-1111-2222-LKJIHGFEDCBA")
        
        let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialProvider)
        AWSServiceManager.default().defaultServiceConfiguration = configuration
        
        let chatConfig = AWSLexInteractionKitConfig.defaultInteractionKitConfig(withBotName: "XXXAWSYYY", botAlias: "$LATEST")
        chatConfig.autoPlayback = true
        AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: chatConfig, forKey: "AWSLexVoiceButton")
        AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: chatConfig, forKey: "chatConfig")
        
        return true
    }

步骤 10:部署应用程序

最后一步是将应用程序部署到支持 iOS 的设备并测试功能。可以在此博文的 AWS 服务部分看到演示视频。

小结

本博文并非旨在为手册中插入的每一个部件提供综合指南,它只介绍了所有逻辑组件。阅读本博文之后,您应可以自信地启用需要具有视觉和听觉反馈的交互式手册的任何资产的 3D 模型,并将其部署到云中。

您的解决方案可以使用 Sumerian 和其他人工智能、计算或存储服务。现在,您已了解了如何集成这些服务,它们在体验中所发挥的作用以及如何将它们进行扩展。

从阅读上述步骤着手,订阅 Amazon Sumerian 视频频道,仔细阅读与 Amazon Lex 和 Amazon Polly 集成以及 IoT 影子 相关的详细信息,然后开始构建您自己的车辆使用手册吧!

 


关于作者

Miro Masat 是总部设在英国伦敦的 Amazon Web Services 的解决方案架构师。他专注于工程设计领域,主要涉及汽车行业。Miro 是虚拟、增强和混合现实的忠实拥护者,一直致力于寻找将工程设计引入到 VR/AR/MR 以及在 VR/AR/MR 中引入工程设计的方法。工作之余,他喜欢旅游、学习语言和自己动手做一些物件。