Съдържание:

Raspberry Pi Drone с гласов контрол с IoT и AWS: 6 стъпки (със снимки)
Raspberry Pi Drone с гласов контрол с IoT и AWS: 6 стъпки (със снимки)

Видео: Raspberry Pi Drone с гласов контрол с IoT и AWS: 6 стъпки (със снимки)

Видео: Raspberry Pi Drone с гласов контрол с IoT и AWS: 6 стъпки (със снимки)
Видео: Pi Zero Drone Build | You Won't Believe How Long It Flies... 2024, Юли
Anonim
Image
Image
Raspberry Pi Drone с гласов контрол с IoT и AWS
Raspberry Pi Drone с гласов контрол с IoT и AWS
Raspberry Pi Drone с гласов контрол с IoT и AWS
Raspberry Pi Drone с гласов контрол с IoT и AWS

Здравейте! Казвам се Армаан. Аз съм 13-годишно момче от Масачузетс. Този урок показва, както можете да заключите от заглавието, как да се изгради Raspberry Pi Drone. Този прототип демонстрира как дроновете се развиват, както и колко голяма роля биха могли да играят в бъдеще. Определено мога да видя как се събуждам след 10 години и искам от дрон да ми закуси. Дронът използва Amazon Alexa, Amazon Web Services, IoT (Интернет на нещата) и най -важното Raspberry Pi за изпълнение. Той има за цел да демонстрира и информира за дроновете и как те се подобряват всеки ден. Надяваме се, че сте успели и ще научите за дроновете в процеса. Успех и благодаря за четенето. -Армаан

Консумативи

За изграждането на прототипа има различни хардуерни и софтуерни нужди. Използвах онлайн урок от The Drone Dojo за изграждането на дрона и интегрирах изброените технологии. За дрона можете да намерите списъка с части точно тук:

Списък на частите на дронове

Софтуерни изисквания:

  • Уеб услуги на Amazon
  • Лаптоп
  • Софтуер на Mission Planer
  • Балена Етчер
  • MicroSD карта с Raspbian файл, намерена тук
  • Amazon Alexa, физически или виртуален

Стъпка 1: Събиране и разбиране на части

Събиране и разбиране на части
Събиране и разбиране на части

Всяка част, посочена в списъка с доставки, е необходима, както и ясното разбиране на всяка част. Можете да намерите частите онлайн и след като се съберат, продължете да четете. Плейлист на The Drone Dojo за пълно разбиране на частите можете да намерите тук. 4-минутно обяснение в канала ми в YouTube можете да намерите тук. Когато става въпрос за дронове, единствените части, въпреки това, което повечето хора мислят, не са само двигатели и витла. По -долу са основните цели на всяка част.

Raspberry Pi с Emlid Navio2

Тази част е почти централен процесор и основната точка на дрона. Raspberry Pi действа като процесора на компютър, който изпраща команди към Navio2 за изпълнение чрез PWM (Pulse Width Modulation Signals) към други части на дрона

2. ESC (електронни контролери на скоростта)

Тези жълти части се намират под рамката. Те са 4 свързани към Navio, по един за всеки мотор. При получаване на ШИМ сигнали, те завъртат двигателите и започват полет.

3. Двигатели

Двигателите не се нуждаят от твърде много обяснения, защото вероятно сте запознати с тях. Те се въртят и въртят витлата, за да създадат тяга.

4. Витла

Витлата създават тяга, за да може дронът да лети. Те се въртят в същата посока като двигателите за повдигане на превозното средство.

5. Батерията и захранващият модул

LiPo батерията захранва целия дрон през рамката с помощта на захранващия модул. Той дава около 15-20 минути полетно време и действа като източник на енергия.

6. GPS

GPS комуникира със спътници, за да определи позицията на дрона. Той определя надморска височина, географска ширина и дължина. Може да се използва за геозониране, пътни точки, а също и за придвижване до определени позиции или посоки.

7. Модулът за телеметрия

Модулът за телеметрия свързва нашия дрон със станция за наземно управление, в нашия случай „Планировчик на мисии“, за да бъде наблюдаван.

8. RC контролер и модул заедно с PPM енкодер

RC контролерът използва радио за предаване на сигнали и команди към RC модула за ръчно пилотиране на дрона. PPM Encoder превежда тези сигнали за обработка и изпълнение на Navio + RPI.

9. Рамката

Тази червено -бяла рамка действа като основа или платформа за поставяне на останалите части. Рамката е аеродинамична и лека, поради което е идеална за нашата конструкция на дрон.

Сега, знаейки всяка част, най -накрая можем да изградим дрона! Напред към следващата стъпка!

Стъпка 2: Сглобяване на дрона

Сглобяване на дрона
Сглобяване на дрона

Тази стъпка е може би най -трудната от гледна точка на физически усилия. Препоръчвам да имате друг човек за помощ или да опитате да използвате помощната ръка в списъка с части. Процесът е твърде дълъг, за да се демонстрира тук, затова ще дам друга връзка, която използвах от The Drone Dojo.

Изграждане на Raspberry Pi Drone

Отново, тъй като няма да навлизам в подробности, просто ще подчертая основите на всяка стъпка.

1. Организирайте вашите доставки - Съберете нашите материали и се уверете, че са лесно достъпни

2. Планирайте изграждането си - Организирайте частите си върху рамката, за да направите план за това, което ще изградите

3. Запояване - Това е работа, която е малко трудно да се направи сам. Трябва да запоите съединителите за златни куршуми, които се доставят с двигателите, към ESC. След това трябва да вземете долната част на рамката и да запоите ESC към долната рамка или платката за разпределение на захранването. Модулът на батерията също ще бъде запоен към платката за разпределение на електроенергията

4. Настройване на рамката - След това трябва да завиете горната част на рамката заедно с раменете. След това можете да прикрепите Raspberry Pi отгоре, както искате. (Използвах тиксо). След това можете да закрепите ESC към ръцете с ципове. Сега почти свършихме.

5. Свързване на RC контролера към приемника - Опитайте се да следвате инструкциите в плейлиста по -горе, за да свържете RC контролера с помощта на ESC.

6. Завършване на части на рамката - Лепяща лента или каишка на телеметричния модул върху рамката. Залепете лентата на PPM енкодера и към рамо. Сега можете да свържете ESC и PPM енкодер към Navio.

7. GPS монтаж + батерия - Сглобете GPS стойката с различните винтове и части. Използвайки ципове, прикрепете GPS към рамката. Не използвах задължително GPS Mount поради неговата крехкост, но зависи от вас. След това можете да поставите батерията между Power Dist. Борд. Завързах и залепих захранващия модул към рамката. Сега вашият хардуер е доста настроен. Сега за частта, която очакваме!

8. Инсталиране на витлата !!! - Можете да затегнете витлата, като използвате диаграмата, спомената в плейлиста. След това можете да включите ESC към двигателите и най -накрая завършихме изграждането на дрона.

Софтуерът е следващ, така нататък!

Стъпка 3: Конфигуриране на Raspberry Pi и GCS (Mission Planner)

Конфигуриране на Raspberry Pi и GCS (Планировчик на мисии)
Конфигуриране на Raspberry Pi и GCS (Планировчик на мисии)

Отново можете да намерите по -подробни инструкции в плейлиста от последната стъпка. Вероятно обаче знаете как да настроите RasPi. Но този път го правим без глава. Използвайте Balena Etcher, за да запишете операционната система от уеб сайта на Navio OS в MicroSD картата. Докато е включен към вашия компютър, влезте в wpa молителя с помощта на notepad ++. След това въведете ssid и парола за Raspberry Pi да се свърже с вашата WiFi. След това трябва да добавите файл, наречен SSH. Това може да стане чрез командния ред или друг метод. Сега можем да SSH. Можете да използвате командния ред или Putty. Използвах командния ред и въведох „ssh pi@navio“, за да се свържа в моя случай, или можете да намерите IP адреса и ssh по този начин. При свързване използвайте този видеоклип, за да настроите и конфигурирате Navio. За да настроите телеметрията, първо трябва да направите редакция на Raspberry Pi. Следвайте това, за да направите редакцията и се опитайте да се свържете с Mission Planner. Ако телеметрията не работи, можете да отмените редактирането и да се свържете чрез UDB връзка, като въведете своя GCS (наземна контролна станция, например лаптоп) IP. След като се свържете с Mission Planner, можете да използвате съветника за настройка, за да калибрирате всички части на дрона. Ако имате нужда от помощ, вижте отново плейлиста. Обикновено, когато настройвате, почти винаги има грешка. Отстраняването на неизправности е една от най -големите части на този проект. Не мога да ви помогна, тъй като не съм наясно с вашите грешки, но повечето грешки могат да бъдат отстранени с помощта на интернет. След като всичко е готово, тогава дронът е готов за полет! Можете да настроите вашия RC контролер и режими на полет на Mission Planner. Опитайте се да задържите лявата пръчка до най-долния десен ъгъл за пет секунди, за да активирате дрона. Не препоръчвам да летите, без да погледнете урок, защото дронът е много крехък и лесно се счупва. За мен първия път, когато летях с него, счупих GPS стойката и някои витла. Ако не се нуждаете от гласов контрол, можете да спрете тук. За да научите за AWS и програмирането на дрона, продължете!

Стъпка 4: Програмиране на Drone да лети с Python

Програмиране на Drone да лети с Python
Програмиране на Drone да лети с Python

Преди да влезем в AWS, първо трябва да разберем как да програмираме дрона да лети. След първоначалната настройка интегрирането на гласовия контрол не би трябвало да е твърде трудно. Първото нещо, което можем да опитаме да разберем, е да направим проста програма за излитане и кацане. След като настроим Raspberry Pi, можем отново да включим SSH в него. Можете да разгледате плейлиста отново или да следвате инструкциите ми.

1. Първо нека изтеглим изходния код на ArduPilot в директория на Raspberry Pi

mkdir src

След това вземете файловете от GitHub с помощта на git clone

git clone -b Copter -3.6.11

Сега нека да преминем към /src /ardupilot

cd src

cd ардупилот

Сега, нека инициализираме изходните файлове

актуализация на подмодула git --init --recursive

2. След това трябва да компилираме фърмуера на Raspberry Pi

Не забравяйте да преминете към/src/ardupilot/с cd, преди да направите следващите стъпки

След това да се конфигурира специално за използване на Navio

./waf configure --board = navio2

След това можете да компилирате с

./waf -целеви кош/arducopter

3. Вече можем да инсталираме изходния код на Navio

Първо нека отидем до правилната директория.

cd/etc/systemd/system

След това редактирайте файла

sudo vi arducopter.service

Там, където пише ExecStart, поставете следното вместо това, което вече е там

ExecStart =/bin/sh -c "/home/pi/src/arducopter/build/navio2/bin/arducopter $ {ARDUPILOT_OPTS}"

Сега, за да приведем изходния код на ardupilot в действие, можем да използваме

sudo systemctl демон-презареждане

След това можем да рестартираме с

sudo systemctl рестартирайте arducopter

С последната стъпка най -накрая завършихме настройката на ArduPilot на нашия дрон

4. Инсталиране на DroneKit

DroneKit е софтуерът, който ще използваме, за да програмираме дрона да лети. За да разберете част от кода, можете да намерите документацията тук. Първо трябва да инсталираме пакета на нашия дрон, преди да напишем скрипт.

Можем да инсталираме пакета python с

pip install dronekit == 2.9.1

Това може или не е най -новата версия, но е тази, която използвах, за да мога да помогна при отстраняването на неизправности.

За да проверим дали е инсталиран, можем да направим a

замразяване на пипс | grep dronekit

Сега най -накрая сме готови да направим първия си скрипт на python

5. takeoff_and_land.py

ВНИМАНИЕ! Предлагам да установите основно разбиране за python, за да можете да научите и разберете кода. Ако искате да напишете програмата сами, следвайте това видео.

## Първо нека не създаваме директория за съхраняване на този код

cd dk ## Ако искате да го направите сами, използвайте vi takeoff_and_land.py ##, за да създадете програма

В противен случай можете да погледнете или да използвате прикачения файл и да използвате протокол за прехвърляне на файлове. След това можем да изпробваме тази програма. Първо, за да изясним, че това е python файл, който трябва да използваме

chmod +x takeoff_and_land.py

След това, за да опитате да използвате следния код за изпълнение

python takeoff_and_land.py --connect 127.0.0.1:14550

За първи път и при мен не се получи. Ако има прекъсване на връзката, не се притеснявайте, че можете да направите нещо. Отворете друг подкана и ssh. Можете да опитате да инсталирате нещо, наречено mavproxy, и да го стартирате. След това можете да стартирате и двете едновременно. Това би трябвало да помогне за свързването на дрона. След като това стане, имам предизвикателство за вас. Опитайте се да разберете какво прави другата програма (set_velocity_body.py) и как да я накарате да работи. Ако го направите, добра работа.

6. Напред!

Вече можем да използваме тези знания, за да направим нашия дрон гласово контролиран. Управлението на дронове на Alexa използва много от тези функции и повече. Успех и нататък!

Стъпка 5: Използване на Amazon Alexa и Amazon Web Services за интегриране на гласовия контрол

Използване на Amazon Alexa и Amazon Web Services за интегриране на гласовия контрол
Използване на Amazon Alexa и Amazon Web Services за интегриране на гласовия контрол
Използване на Amazon Alexa и Amazon Web Services за интегриране на гласовия контрол
Използване на Amazon Alexa и Amazon Web Services за интегриране на гласовия контрол

Тази стъпка е една от по -малко документираните. Това означава, че ще бъде най -трудно да се отстранят неизправностите. Само за да го задействам ми отне около месец, може би повече. Най -важното тук е да бъдете търпеливи. Тази функция, ако се прилага в реалния живот, може да промени живота. Можете просто да кажете на Alexa да ви вземе хранителните стоки, вместо да отидете сами. Представи си това! Така че без да се замисляме, нека да влезем в това!

1. Регистриране на Raspberry Pi като нещо на AWS IoT

За да използваме IoT (Интернет на нещата), имаме нужда от нещо. Така че трябва да влезем в AWS конзолата, за да използваме първо AWS IoT. След това отидете на IoT Core. След като сте там, трябва да щракнете върху Управление и след това да създадете нещо. След като добавим име, за свързване се нуждаем от сертификат. Бих препоръчал да щракнете върху сертифицирането с едно щракване. След това, след като видите екрана със сертификат, не забравяйте да изтеглите всеки ключ, включително основния CA. След това можете да отидете и да завършите създаването на нещото. След това трябва да създадем политика. Върнете се в IoT Core. След това щракнете върху защитени и щракнете върху политики. След това натиснете създаване на политика. След това можете да създадете име и да добавите ресурси. При действие въведете iot * и въведете * под ресурс и натиснете позволяват ефект. След това се върнете към вашето нещо и отидете на вашия сертификат. Веднъж тук, кликнете върху политики. След това можете да прикачите вашата политика за нещата и всичко е готово!

2. Настройване на код на Raspberry Pi и взаимодействие с IoT

За тази част ще ви е необходим SFTP клиент (използвах WinSCP) за прехвърляне на файлове. При свързване към нашия Raspberry Pi ще трябва да имаме под ръка ключовете за сертификат. Трябва да прехвърлите ключовите файлове в Raspberry Pi. Трябва също така да инсталирате пип с AWSIoTPythonSDK на Raspberry Pi. След това отидете в директорията dk на Raspberry Pi. Използвате файла на Alexa Drone Control, който дадох за комуникация с IoT. За да използвам този файл, използвах Shell Script за стартиране. Ще покажа кода по -долу, тъй като не мога да кача файла по някаква причина. Ако програмата не приема съобщения от AWS IoT по време на тестването, не се притеснявайте! Това може да е моя вина, тъй като контролния файл на Alexa Drone може да не отговаря на вашите неща. Така че, за да го поправите, върнете се към AWS IoT и натиснете Learn на левия панел. Следвайте инструкциите и може да се наложи да рестартирате. Съжалявам за това. След като вашият IoT започне да работи с програмата на RasPi, можете да интегрирате кода на dronekit от файла за управление на Alexa Drone, който дадох. След това използвайте Shell Script, който дадох с вашите сертификати и Rest API Endpoint от IoT.

# stop script on errorset -e # Проверете дали съществува root CA файл, изтеглете ако не ако [! -f./root-CA.crt]; след това printf "\ nИзтегляне на AWS IoT Root CA сертификат от AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # инсталирайте AWS Device SDK за Python, ако още не е инсталиран ако [! -d./aws-iot-device-sdk-python]; след това printf "\ nИнсталиране на AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py инсталирайте popd fi

# стартирайте приложение за пъб/подпроба, като използвате сертификати, изтеглени в пакета

printf "\ nЗапускане на приложение за проба/подпроба … / n" python dk/AlexaDroneControl.py --connect 127.0.0.1:14550 -e "Вашият IoT ARN" -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Това няма да работи за всички вас, тъй като имената са различни. Вместо ключовете, които използвах, заменете с имената на вашите ключове, когато прехвърляте файла. Не забравяйте да излезете от dk, преди да прехвърлите файла! Това трябва да е всичко, което трябва да направите засега.

3. Изграждане на умението ви Alexa

Тази стъпка изглежда много по -трудна, отколкото е в действителност. Първо, трябва да влезем в конзолата за разработчици на Alexa. След това просто натиснете създаване на умения. Когато поиска да изберете модел за вашето умение, просто натиснете custom. Когато поиска да изберете метод, натиснете предоставяне на своя собствена. Можете да го кръстите както искате. Не се изисква шаблон, така че изберете да започнете от нулата. След това, след като създадете своето умение, трябва да стигнете до екрана за създаване на умения с контролен списък вдясно. От тук можем да започнем да изграждаме уменията си. Първо в контролния списък е името на извикването. Това ще кажете на Алекса да се позове на вашето умение. За мен просто поставих името си за извикване като дрон. Сега можем да преминем към нашите намерения, изказвания и слотове. Тук можете да правите команди за дрона, като например да се качите с 1 метър нагоре или да отидете надясно или надолу. Моят засега наистина работи само с един метър. Можете да щракнете върху JSON Editor в долната част на левия панел. След това можете да поставите следния код в него.

След като поставите кода в JSON Editor, можете да кликнете върху третата стъпка от контролния списък и той ще изгради вашия модел на взаимодействие вместо вас. С тази стъпка ще свършите засега. Можете да оставите слота за крайна точка засега празен!

Стъпка 4: Изграждане на вашата ламбда функция

Сега тази стъпка е тази, която ще трябва да разберете сами. Ще ви кажа как да го свържете с Alexa Skill, но ще трябва да го кодирате сами. Така че, първо отидете на конзолата за управление на AWS. След това отидете на Lambda. След това можете да създадете функция, именувайки я каквото искате. Не забравяйте да го създадете от нулата и да направите времето за изпълнение на желания език за програмиране. Използвах Node.js. За да добавите Alexa Skill, добавете тригер и изберете Alexa Skills Kit (ASK). Копирайте вашия Lambda ARN и се върнете към Alexa Skill. Сега отидете на крайната точка. Можете да поставите своя ARN, да запишете и да изградите нов модел. След това вземете идентификатора на Alexa Skill ID и го поставете в секцията за задействане, където ви пита за Lambda. След това превъртете надолу по Lambda и намерете основните настройки и направете таймаута 10 секунди. Сега от вас зависи да разберете кода. За съвети можете да използвате уебсайтовете по -долу.

github.com/aws/aws-iot-device-sdk-js

www.hackster.io/veggiebenz/voice-controlle…

и можете да използвате прикачения от мен файл, но той е непълен и няма да работи.

/ *** Контролирайте своя квадрокоптер APM / Pixhawk с гласа си, като използвате Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ config"); var deviceName = "EchoDroneControl"; // това устройство наистина е контролерът var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (new Date (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = нула; var client = null; // Насочваме входящата заявка въз основа на типа (LaunchRequest, IntentRequest и т.н.) JSON тялото на заявката е предоставено в параметъра на събитието. export.handler = функция (събитие, контекст) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = контекст; if (event.session.application.applicationId! == app_id) {ctx.fail ("Невалиден идентификационен номер на приложението"); } клиент = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("Свързан с AWS IoT"); // callback ();});

if (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } иначе ако (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } иначе ако (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.succeed (); }} catch (e) {console.log ("EXCEPTION in handler:" + e); ctx.fail ("Изключение:" + e); }}; /*** Извиква се, когато сесията започне. */ функция onSessionStarted (sessionStartedRequest, сесия) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Извиква се, когато потребителят стартира умението, без да посочва какво иска. */ функция onLaunch (launchRequest, сесия, обратно повикване) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Изпращане до старта на вашето умение. getWelcomeResponse (обратно повикване); } /*** Извиква се, когато потребителят посочи намерение за това умение. */функция onIntent (intentRequest, сесия) {//, обратно повикване) {console.log ("onIntent requestId =" + intentRequest.requestId + ", sessionId =" + session.sessionId); var intent = intentRequest.intent, intentName = intentRequest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (intentRequest)); var callback = null; // Изпращане до манипулаторите на намеренията на вашето умение if ("GoIntent" === intentName) {doGoIntent (intent, session); } else if ("CommandIntent" === intentName) {doCommandIntent (intent, session); } else if ("TurnIntent" === intentName) {doTurnIntent (intent, session); } else if ("HelpIntent" === intentName) {getWelcomeResponse (); } else {throw "Невалидно намерение"; }} /*** Извиква се, когато потребителят завърши сесията. * Не се извиква, когато умението се връща shouldEndSession = true. */ функция onSessionEnded (sessionEndedRequest, сесия) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Добавете логика за почистване тук} // --------------- Функции, които контролират поведението на умението -------------------- --- функция getWelcomeResponse () {// Ако искаме да инициализираме сесията, за да имаме някои атрибути, бихме могли да ги добавим тук. var sessionAttributes = {}; var cardTitle = "Добре дошли"; var speechOutput = "Добре дошли в DRONE CONTROL."; // TODO: дронът онлайн ли е или офлайн? Ако е онлайн, въоръжен ли е? var repromptText = "Дронът е готов за команда."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** обработва GO намерението. */ функция doGoIntent (намерение, сесия, обратно повикване) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var direction = intent.slots. Direction.value; var distance = intent.slots. Distance.value; var unit = intent.slots. Unit.value; var validDirections = ["напред", "напред", "назад", "назад", "надясно", "наляво", "нагоре", "надолу", "направо", "напред", "направо напред"]; var validUnits = ["крак", "крака", "метър", "метри", "двор", "ярдове"]; repromptText = "Кажете ми докъде да отида и в каква посока."; var fail = false; // потвърждавам входовете, ако (! (parseInt (разстояние)> = 1)) {speechOutput = "Не можах да разбера разстоянието, което искате да измина."; провал = вярно; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "Не можах да разбера посоката, в която искате да пътувам."; провал = вярно; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Не можах да разбера единицата, която искате да пътувам."; провал = вярно; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (! fail) {var cardTitle = "Дрон върви" + посока + "" + разстояние + "" + единица; speechOutput = "Тръгване" + посока + "" + разстояние + "" + единица; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

функция doCommandIntent (намерение, сесия, обратно повикване) {

// var cardTitle = "ДРОН КОМАНДА …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Кажете ми каква е командата за дрона."; var task = intent.slots. Task.value; var validTasks = ["стартиране", "земя", "r. t. l.", "задържане", "престой", "стоп", "връщане към стартиране", "прекъсване"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Не можах да разбера командата."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Изпълнение на команда Drone" + задача; speechOutput = "Изпълнение на команда" + задача; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

функция doTurnIntent (намерение, сесия, обратно повикване) {

// var cardTitle = "Drone Turn …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Кажете ми как искате да завъртите дрона."; var direction = intent.slots. Direction.value; var validDirections = ["надясно", "ляво", "около"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "Не можах да разбера посоката на завоя."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Дрон завива" + посока; speechOutput = "Завиване" + посока; mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

функция mqttPublish (intent, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (намерение); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - смята, че е направено, успешно."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("грешка", (функция (грешка, предоставена) {console.log ("MQTT КЛИЕНТСКА ГРЕШКА !!" + грешка);})); }

// --------------- Помощници, които изграждат всички отговори -----------------------

функция buildSpeechletResponse (заглавие, изход, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, карта: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} функция buildResponse (sessionAttributes, speechletResponse) {return {версия: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Препоръчано: