Skip to content

VICS Development

aidex-hackability edited this page Nov 3, 2017 · 1 revision

Aidex Free Me Voice Control Interface (VCI) Development Blog

What are we doing?

We are developing a voice control interface for the AIDex system for assisting the ones in need in the the tetraplegia community.

We will be building a simple prototype based on the Alexea Skill Kit (ASK) using the Nodejs SDK. The Hello World Custom Skill will be used as the foundation.

For basic step-by-step instruction on how to built and test a custom skill, this tutorial is an excellent starting point.

Basics

You will need for the following account before developing any Alexea Custom Skills:

Interaction Model

A simple single turn stateless interaction model will be used for the first prototype, and more complicated model will be incorporated as needed.

Intent Schema

There we defines actions our users to be able to take.

{
  "intents": [
    {
      "slots": [
        {
          "name": "System",
          "type": "AIDEX_SYSTEMS"
        }
      ],
      "intent": "SystemIntent"
    },
    {
      "slots": [
        {
          "name": "City",
          "type": "AMAZON.US_CITY"
        }
      ],
      "intent": "WeatherIntent"
    },
    {
      "slots": [
        {
          "name": "Temperature",
          "type": "AMAZON.NUMBER"
        }
      ],
      "intent": "ClimateControlIntent"
    },
    {
      "intent": "ClimateStatusIntent"
    },
    {
      "slots": [
        {
          "name": "Status",
          "type": "AIDEX_STATUS"
        },
        {
          "name": "FanLevel",
          "type": "AIDEX_FAN_LEVELS"
        }
      ],
      "intent": "FanControlIntent"
    },
    {
      "slots": [
        {
          "name": "Status",
          "type": "AIDEX_STATUS"
        }
      ],
      "intent": "FanStatusIntent"
    },
    {
      "slots": [
        {
          "name": "PowerSelector",
          "type": "AIDEX_POWER_SELECTORS"
        },
        {
          "name": "Status",
          "type": "AIDEX_STATUS"
        }
      ],
      "intent": "PowerStatusIntent"
    },
    {
      "slots": [
        {
          "name": "PowerSelector",
          "type": "AIDEX_POWER_SELECTORS"
        },
        {
          "name": "Status",
          "type": "AIDEX_STATUS"
        }
      ],
      "intent": "PowerControlIntent"
    },
    {
      "slots": [
        {
          "name": "Status",
          "type": "AIDEX_STATUS"
        }
      ],
      "intent": "LightStatusIntent"
    },
   
    {
      "slots": [
        {
          "name": "Status",
          "type": "AIDEX_STATUS"
        },
        {
          "name": "LightLevel",
          "type": "AIDEX_LIGHT_LEVELS"
        }
      ],
      "intent": "LightControlIntent"
    },
    {
      "slots": [
        {
          "name": "DriveDirection",
          "type": "AIDEX_DRIVE_DIRECTIONS"
        },
        {
          "name": "DriveDegree",
          "type": "AIDEX_DRIVE_DEGREES"
        },
        {
          "name": "DriveSpeed",
          "type": "AIDEX_DRIVE_SPEEDS"         
        }
      ],
      "intent": "DriveControlIntent"
    },
    {
      "intent": "DriveStatusIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    },
    {
      "intent": "AMAZON.CancelIntent"
    },
    {
      "intent": "AMAZON.StartOverIntent"
    },
    {
      "intent": "AMAZON.HelpIntent"
    }
  ]
}

Utterances and Intents

Here is the preliminary Utterance/Intent set for the prototype.

SystemIntent {System} SystemIntent control {System} SystemIntent activate {System} SystemIntent open {System} SystemIntent start {System} SystemIntent close {System} SystemIntent stop {System}

ClimateStatusIntent what is the room temperature ClimateStatusIntent temperature

ClimateControlIntent set temperature to {Temperature} ClimateControlIntent set thermostat to {Temperature} ClimateControlIntent too cold ClimateControlIntent too warm

WeatherIntent how is the weather WeatherIntent how is the weather in {City} WeatherIntent weather

FanStatusIntent is the fan {Status} FanStatusIntent what is the fan level FanStatusIntent fan {Status} FanControlIntent turn the fan {Status} FanControlIntent set fan to level {FanLevel}

PowerStatusIntent is power {PowerSelector} {Status} PowerStatusIntent power status PowerStatusIntent what is the power status PowerControlIntent turn the power {PowerSelector} {Status} PowerControlIntent turn the power {PowerSelector} {Status}

LightStatusIntent is light {Status} LightStatusIntent light status LightStatusIntent what is the light status LightControlIntent turn the light {Status} LightControlIntent set light to level {LightLevel}

DriveControlIntent stop the drive DriveControlIntent start the drive DriveControlIntent go {DriveDirection} {DriveDegree} {DriveSpeed} DriveControlIntent set drive speed {DriveSpeed} DriveControlIntent turn around DriveControlIntent reverse DriveControlIntent stop DriveStatusIntent what is the drive speed


Adding Custom Slot Types

Here we are going to add some custom slots to make the dialogue more neutral.

  • AIDEX_STATUS: on, off, unknown
  • AIDEX_SYSTEMS: Climate Control, Fan Control, Power Control, Light Control, Drive Control
  • AIDEX_FAN_LEVELS: 1, 2, 3
  • AIDEX_POWER_SELECTORS: 1, 2, 3, 4
  • AIDEX_LIGHT_LEVELS: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
  • AIDEX_DRIVE_DIRECTIONS: left, right, reverse
  • AIDEX_DRIVE_DEGREES: 10 degrees, 20 degrees, 30 degrees, 40 degrees, 50 degrees, 60 degrees, 70 degrees, 80 degrees, 90 degrees
  • AIDEX_DRIVE_SPEED: 1, 2, 3

Clone this wiki locally