Мазмұны:

Alexa дауысты басқарылатын Raspberry Pi дроны IoT және AWS көмегімен: 6 қадам (суреттермен)
Alexa дауысты басқарылатын Raspberry Pi дроны IoT және AWS көмегімен: 6 қадам (суреттермен)

Бейне: Alexa дауысты басқарылатын Raspberry Pi дроны IoT және AWS көмегімен: 6 қадам (суреттермен)

Бейне: Alexa дауысты басқарылатын Raspberry Pi дроны IoT және AWS көмегімен: 6 қадам (суреттермен)
Бейне: WARNING Dimash Adagio (REACTION) Dimash's Vocals Push the Limits of Human Capability 2024, Шілде
Anonim
Image
Image
Alexa дауыстық басқарылатын Raspberry Pi дроны IoT және AWS көмегімен
Alexa дауыстық басқарылатын Raspberry Pi дроны IoT және AWS көмегімен
Alexa дауыстық басқарылатын Raspberry Pi дроны IoT және AWS көмегімен
Alexa дауыстық басқарылатын Raspberry Pi дроны IoT және AWS көмегімен

Сәлем! Менің атым Арман. Мен Массачусетс штатының 13 жасар баласымын. Бұл оқулықта сіз Raspberry Pi дронын қалай жасау керектігін тақырыптан біле аласыз. Бұл прототип дрондардың қалай дамып келе жатқанын, сонымен қатар олардың болашақта қаншалықты маңызды рөл атқаратынын көрсетеді. Мен өзімді 10 жылдан кейін оянып, дроннан таңғы ас ішуді сұрайтынымды көре аламын. Дрон Amazon Alexa, Amazon Web Services, IoT (Интернет заттары) және ең бастысы Raspberry Pi -ді іске қосады. Бұл дрондар мен олардың күн сайын қалай жақсарып келе жатқанын көрсетуге және хабарлауға арналған. Сіз табысты боласыз деп үміттенеміз және бұл процесте дрондар туралы білесіз. Сәттілік және оқығаныңыз үшін рахмет. -Арман

Жабдықтар

Прототипті құру үшін әр түрлі аппараттық және бағдарламалық қамтамасыз ету қажет. Мен Drone Dojo онлайн -оқулығын пайдаланып, дронды құрдым және аталған технологияларды біріктірдім.

Дрон бөлшектерінің тізімі

Бағдарламалық қамтамасыз ету талаптары:

  • Amazon веб -қызметтері
  • Ноутбук
  • Mission Planer бағдарламалық қамтамасыз ету
  • Балена Эчер
  • Мұнда Raspbian файлы бар MicroSD картасы табылған
  • Amazon Alexa, физикалық немесе виртуалды

1 -қадам: бөлшектерді жинау және түсіну

Бөлшектерді жинау және түсіну
Бөлшектерді жинау және түсіну

Жеткізу тізімінде көрсетілген әрбір бөлік қажет, сондықтан әр бөлікті нақты түсіну қажет. Сіз бөлшектерді Интернеттен таба аласыз және жиналғаннан кейін оқуды жалғастырыңыз. Бөліктерді толық түсіну үшін The Drone Dojo ойнату тізімін мына жерден табуға болады. Менің youtube каналымдағы 4 минуттық түсініктемені мына жерден табуға болады. Дрондар туралы айтатын болсақ, олардың көпшілігі ойлайтынына қарамастан, тек бөлшектер - бұл қозғалтқыштар мен бұрандалар ғана емес. Төменде әр бөліктің негізгі мақсаттары келтірілген.

Emlid Navio2 бар Raspberry Pi

Бұл бөлік - бұл орталық процессор және дронның негізгі нүктесі. Raspberry Pi драйвердің басқа бөліктеріне PWM (Pulse Width Modulation Signals) арқылы орындау үшін Navio2 командасын жіберетін компьютердің процессоры сияқты әрекет етеді.

2. ESC (электронды жылдамдықты реттегіштер)

Бұл сары бөліктер раманың астында орналасқан. Олар Navio -ға 4 қосылған, әр қозғалтқышқа бір. PWM сигналдарын алғаннан кейін олар қозғалтқыштарды айналдырып, ұшуды бастайды.

3. Қозғалтқыштар

Қозғалтқыштар тым көп түсіндіруді қажет етпейді, себебі сіз олармен таныссыз. Олар итеру үшін винттерді айналдырады және айналдырады.

4. Бұрандалар

Пропеллер дронның ұшуына серпін береді. Олар көлікті көтеру үшін қозғалтқыштармен бір бағытта айналады.

5. Батарея мен қуат модулі

LiPo аккумуляторы қуат модулін қолдана отырып, бүкіл дронға қуат береді. Ол шамамен 15-20 минут ұшуға уақыт береді және қуат көзі ретінде әрекет етеді.

6. GPS

GPS дронның орнын анықтау үшін спутниктермен байланысады. Ол биіктікті, ендік пен бойлықты анықтайды. Ол географиялық қоршауда, бағдар нүктелерінде, сондай -ақ белгілі бір позицияларға немесе бағыттарға өту үшін қолданыла алады.

7. Телеметрия модулі

Телеметриялық модуль біздің дронды жердегі басқару станциясымен байланыстырады, біздің жағдайда Mission Planner, бақылау үшін.

8. RC контроллері мен модулі PPM кодтаушымен бірге

RC контроллері дронды қолмен басқару үшін сигналдар мен командаларды RC модуліне жіберу үшін радионы қолданады. PPM Encoder бұл сигналдарды Navio + RPI өңдеуге және орындауға аударады.

9. Рамка

Бұл қызыл және ақ жақтау басқа бөлшектерді орналастыру үшін негіз немесе платформа ретінде қызмет етеді. Рамка аэродинамикалық және жеңіл, сондықтан біздің ұшқышсыз ұшу үшін өте қолайлы.

Енді әр бөлікті біле отырып, біз ақырында дронды жасай аламыз! Келесі қадамға!

2 -қадам: Дронды жинау

Дронды құрастыру
Дронды құрастыру

Бұл қадам физикалық күш тұрғысынан ең қиын шығар. Мен көмек сұрайтын басқа адамды алуды немесе бөлшектер тізімінде көмек қолын қолдануға тырысуды ұсынамын. Бұл жерде көрсету үшін процесс тым ұзақ, сондықтан мен Drone Dojo қолданған басқа сілтемені ұсынамын.

Raspberry Pi дронын жасау

Тағы да, мен егжей -тегжейлі айтпайтындықтан, мен әр қадамның негізін бөліп көрсетемін.

1. Жабдықтарыңызды ұйымдастырыңыз - Біздің материалдарды жинаңыз және оларға оңай қол жеткізіңіз

2. Құрылысты жоспарлаңыз - Сіз құрастыратын нәрсенің схемасын жасау үшін жақтаудағы бөліктеріңізді реттеңіз

3. Дәнекерлеу жұмысы - Бұл жалғыз орындауға сәл қиын жұмыс. Қозғалтқыштармен бірге келетін алтын оқ қосқыштарды ESC -ке дәнекерлеу керек. Содан кейін сіз жақтаудың төменгі бөлігін алып, ESC -ті төменгі жақтауға немесе қуат тарату тақтасына дәнекерлеуіңіз керек. Батарея модулі сонымен қатар электр тарату тақтасына қосылады

4. Жақтауды орнату - Содан кейін жақтаудың жоғарғы бөлігін қолмен бұрап алу керек. Содан кейін сіз Raspberry Pi -ді қалағаныңызша бекіте аласыз (мен жабысқақ таспаны қолдандым). Содан кейін сіз ESC-ті қысқыштармен қолыңызға бекіте аласыз. Енді бітті дерлік.

5. RC контроллерін қабылдағышқа байлау - RSC контроллерін ESC көмегімен байланыстыру үшін жоғарыдағы ойнату тізіміндегі нұсқауларды орындап көріңіз.

6. Кадрдағы бөлшектерді аяқтау - телеметриялық модульдегі скотч таспасы немесе белдік. PPM Encoder таспасын қолыңызға бекітіңіз. Енді сіз ESC пен PPM кодтаушысын Navio -ға қосуға болады.

7. GPS қондырғысы + аккумуляторы - GPS қондырғысын әр түрлі бұрандалар мен бөлшектермен жинаңыз. Қысқыштарды қолдана отырып, GPS-ті жақтауға бекітіңіз. Мен GPS қондырғысын сынғыш болғандықтан міндетті түрде пайдаланбадым, бірақ бұл сізге байланысты. Әрі қарай, батареяны Power Dist арасына енгізуге болады. Тақта. Мен сонымен қатар қуат модулін жақтауға байладым. Енді сіздің аппараттық құралдарыңыз әбден реттелген. Енді біз күткен бөлімге!

8. Пропеллерді орнату !!! - Ойнату тізімінде көрсетілген диаграмма арқылы бұрандаларды қатайта аласыз. Содан кейін сіз ESC -ті қозғалтқыштарға қосуға болады, және біз дронды құрастыруды аяқтадық.

Бағдарламалық қамтамасыз ету келесіде, әрі қарай!

3 -қадам: Raspberry Pi мен GCS (Mission Planner) конфигурациясы

Raspberry Pi мен GCS (Mission Planner) конфигурациясы
Raspberry Pi мен GCS (Mission Planner) конфигурациясы

Тағы да, сіз соңғы қадамнан ойнату тізімінде толығырақ нұсқауларды таба аласыз. Рас, сіз RasPi -ді қалай орнатуды білетін шығарсыз. Бірақ бұл жолы біз мұны бассыз жасаймыз. Navio OS веб -сайтынан MicroSD картасына ОЖ жазу үшін Balena Etcher пайдаланыңыз. Ол компьютерге қосылған кезде, блокнот ++ көмегімен wpa қосымшасына кіріңіз. Осыдан кейін, WiFi -ге қосылу үшін Raspberry Pi үшін ssid пен парольді енгізіңіз. Содан кейін SSH деп аталатын файлды қосу керек. Бұл пәрмен жолы немесе басқа әдіс арқылы болуы мүмкін. Енді біз SSH жасай аламыз. Сіз пәрмен жолын немесе Putty қолдана аласыз. Мен пәрмен жолын қолдандым және менің жағдайыма қосылу үшін «ssh pi@navio» деп жаздым, немесе сіз IP -адрес пен ssh -ті осылай таба аласыз. Қосылған кезде, Navio -ны орнату және конфигурациялау үшін осы бейнені пайдаланыңыз. Телеметрияны орнату үшін алдымен Raspberry Pi -ге түзету енгізу қажет. Өңдеуді орындау үшін осы әрекетті орындаңыз және Mission Planner -ге қосылуға тырысыңыз. Егер телеметрия жұмыс істемесе, сіз GCS (ноутбук сияқты жердегі бақылау станциясы) IP -ге кіру арқылы UDB байланысын қолдана отырып, өңдеуді болдырмауға және қосуға болады. Mission Planner -ге қосылғаннан кейін сіз дронның барлық бөліктерін калибрлеу үшін орнату шеберін пайдалана аласыз. Егер сізге көмек қажет болса, ойнату тізіміне қайта жүгініңіз. Әдетте, сіз орнатқан кезде әрқашан қате болады. Ақауларды жою - бұл жобаның ең үлкен бөліктерінің бірі. Мен сізге көмектесе алмаймын, себебі мен сіздің қателіктеріңізді білмеймін, бірақ көптеген қателерді интернеттің көмегімен түзетуге болады. Барлығы дайын болған соң, дрон ұшуға дайын! Сіз RC контроллері мен ұшу режимдерін Mission Planner бағдарламасында орната аласыз. Дронды қаруландыру үшін сол таяқшаны төменгі оң жақта бес секунд ұстап тұруға тырысыңыз. Мен оқулыққа қарамай ұшуды ұсынбаймын, себебі дрон өте нәзік және сынуы оңай. Мен үшін, мен оны бірінші рет ұшырған кезде, GPS қондырғысы мен кейбір винттерді сындырдым. Егер сізге дауысты басқару қажет болмаса, онда сіз осында тоқтай аласыз. AWS және дронды бағдарламалау туралы білу үшін жалғастырыңыз!

4 -қадам: Дронды Python -мен ұшуға бағдарламалау

Дронды Python -мен ұшуға бағдарламалау
Дронды Python -мен ұшуға бағдарламалау

AWS -ке кірмес бұрын, біз алдымен ұшқышсыз ұшуды қалай бағдарламалау керектігін түсінуіміз керек. Бастапқы орнатудан кейін дауысты басқаруды біріктіру өте қиын болмауы керек. Біз түсінуге тырысатын бірінші нәрсе - бұл қарапайым ұшу мен қонуға арналған бағдарлама. Raspberry Pi орнатқаннан кейін, біз оны қайтадан SSH енгізе аламыз. Сіз ойнату тізіміне қайта қарай аласыз немесе менің нұсқаулығымды орындай аласыз.

1. Алдымен ArduPilot бастапқы кодын Raspberry Pi каталогына жүктеп алайық

mkdir src

Содан кейін git clone көмегімен файлдарды GitHub -тан алыңыз

git clone -b Copter -3.6.11

Енді /src /ardupilot тармағына өтейік

cd src

cd ardupilot

Енді бастапқы файлдарды инициализациялайық

git submodule update --init -recursive

2. Әрі қарай, біз Raspberry Pi -де микробағдарламаны құрастыруымыз керек

Келесі әрекеттерді жасамас бұрын cd көмегімен/src/ardupilot/өтіңіз

Содан кейін 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

Енді біз бірінші питон сценарийін жасауға дайынбыз

5. take_and_land.py

ЕСКЕРТУ! Мен питон туралы негізгі түсінікті құруды ұсынамын, сондықтан сіз кодты үйреніп, түсіне аласыз. Егер сіз бағдарламаны өзіңіз жазғыңыз келсе, мына бейнені қараңыз.

## Алдымен осы кодты сақтау үшін каталог жасамайық

cd dk ## Егер сіз мұны өзіңіз жасағыңыз келсе, онда бағдарлама құру үшін vi takeoff_and_land.py ## пайдаланыңыз.

Әйтпесе, сіз қоса берілген файлды қарай аласыз немесе қолдана аласыз және файл тасымалдау хаттамасын қолдана аласыз. Біз бұл бағдарламаны кейінірек қолдана аламыз. Алдымен біз бұл питон файлы екенін түсінуіміз керек

chmod +x takeoff_and_land.py

Содан кейін келесі кодты қолданып көріңіз

python takeoff_and_land.py -жалғау 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 IoT пайдалану үшін AWS консоліне кіруіміз керек. Содан кейін IoT Core -ге өтіңіз. Онда сіз Басқару түймесін басып, содан кейін бір нәрсе жасауыңыз керек. Атауды қосқаннан кейін қосылу үшін бізге сертификат қажет. Мен бір рет басу сертификатын басуды ұсынамын. Содан кейін сертификат экранын көргеннен кейін, әр CA кілтін жүктеп алуды ұмытпаңыз. Содан кейін сіз барып, затты жасауды аяқтай аласыз. Содан кейін біз саясатты жасауымыз керек. IoT Core жүйесіне оралыңыз. Содан кейін қауіпсізді таңдаңыз және саясатты басыңыз. Содан кейін саясат құру түймесін басыңыз. Содан кейін сіз атау жасай аласыз және ресурстарды қоса аласыз. Әрекет кезінде iot * және ресурс астына * теріңіз және әсерге рұқсат етіңіз. Содан кейін өз ісіңізге оралыңыз және сертификатқа өтіңіз. Бұл жерге келгеннен кейін саясатты нұқыңыз. Содан кейін сіз өзіңіздің саясатыңызды қоса аласыз және бәрі дайын!

2. Raspberry Pi -де кодты орнату және IoT -мен өзара әрекеттесу

Бұл бөлімде сізге файлды тасымалдау үшін SFTP клиенті қажет (мен WinSCP қолдандым). Біздің Raspberry Pi -ге қосылғаннан кейін бізде сертификат кілттері болуы керек. Сіз негізгі файлдарды Raspberry Pi -ге тасымалдауыңыз керек. Сондай -ақ, Raspberry Pi -ге AWSIoTPythonSDK орнатыңыз. Содан кейін Raspberry Pi dk каталогына өтіңіз. Сіз IoT -пен байланысу үшін мен берген Alexa Drone Control файлын қолданасыз. Бұл файлды пайдалану үшін мен Shell сценарийін қолдандым. Мен төмендегі кодты көрсетемін, себебі қандай да бір себептермен файлды жүктей алмаймын. Егер бағдарлама тестілеу кезінде AWS IoT хабарламаларын қабылдамаса, алаңдамаңыз! Бұл менің кінәм болуы мүмкін, өйткені Alexa Drone басқару файлы сіздің заттарыңызға сәйкес келмеуі мүмкін. Мәселені шешу үшін AWS IoT -ге қайтып оралыңыз және сол жақ панельдегі learn түймесін басыңыз. Нұсқауларды орындаңыз және сізге қайта іске қосу қажет болуы мүмкін. Бұл үшін кешіріңіз. Сіздің IoT RasPi бағдарламасында жұмыс жасай бастағаннан кейін, мен берген Alexa Drone Control файлынан dronekit кодын біріктіруге болады. Осыдан кейін, IoT сертификаттарымен және Rest API Endpoint -мен берген Shell сценарийін қолданыңыз.

# сценарийі қателер жиынтығында -e # CA түбірлік файлының бар -жоғын тексеріңіз, егер жоқ болса жүктеңіз [! -f./root-CA.crt]; содан кейін printf «\ nAWS-тен AWS IoT Root CA сертификатын жүктеу… / n» curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python егер [! -d./aws-iot-device-sdk-python]; содан кейін printf «\ nAWS SDK орнатылады… / n» git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py popd fi орнатыңыз

# пакетте жүктелген сертификаттарды қолдана отырып, pub/sub үлгісі қосымшасын іске қосыңыз

printf «\ n Pub/sub үлгісі қосымшасын іске қосу… / n» python dk/AlexaDroneControl.py --connect 127.0.0.1:14550 -e «Your IoT ARN» -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Бұл бәріңіз үшін жұмыс істемейді, өйткені атаулар әр түрлі. Мен қолданған кілттердің орнына файлды тасымалдау кезінде кілт атауын ауыстырыңыз. Файлды жібермес бұрын dk -ден шығуды ұмытпаңыз! Әзірге осылай істеу керек.

3. Alexa дағдысын қалыптастыру

Бұл қадам шынымен қарағанда әлдеқайда қиын болып көрінеді. Біріншіден, біз Alexa Developer консоліне кіруіміз керек. Содан кейін, шеберлікті жасауды басыңыз. Егер сіздің шеберлігіңізге сәйкес модельді таңдау сұралса, «Custom» түймесін басыңыз. Ол әдісті таңдауды сұраған кезде, өз презентациясын басыңыз. Сіз оны қалағаныңызша атай аласыз. Үлгі қажет емес, сондықтан нөлден бастауды таңдаңыз. Әрі қарай, сіздің дағдыларыңызды жасағаннан кейін, сіз оң жақта бақылау парағы бар Skill Builder экранына келуіңіз керек. Осы жерден біз өз дағдыларымызды дамытуға кірісе аламыз. Бақылау тізімінде бірінші болып шақырудың аты аталады. Бұл сізге Alexa -ға сіздің шеберлігіңізді шақыруды айтатын нәрсе. Мен үшін шақыру атымды дрон ретінде қойдым. Енді біз өз ниеттерімізге, айтылымдарымызға және слоттарымызға бара аламыз. Мұнда сіз дронға 1 метр жоғары немесе оңға немесе төмен жүру сияқты командалар жасай аласыз. Менікі тек бір метрмен жұмыс істейді. Сол жақ панельдің төменгі жағындағы JSON редакторын басуға болады. Содан кейін оған келесі кодты қоюға болады.

{«interactModel»: {«languageModel»: {«invocationName»: «дрон», «ниет»: [{«name»: «AMAZON. FallbackIntent», «үлгілер»: }, {«аты»: «AMAZON. CancelIntent «,» үлгілер «: }, {» аты «:» AMAZON. HelpIntent «,» үлгілер «: }, {» аты «:» AMAZON. StopIntent «,» үлгілер «: }, {«name»: «AMAZON. NavigateHomeIntent», «үлгілер»: }, {«name»: «GoIntent», «слоттар»: [{«name»: «Бағыт», «type»: «Бағыт»}, {«name»: «Distance», «type»: «AMAZON. NUMBER»}, {«name»: «Unit», «type»: «Unit»}], «үлгілер»: [«Go {Direction} {Distance} {Unit} «,» Go {Distance} {Unit} {Direction} «]}, {» name «:» CommandIntent «,» slots «: [{» name «:» Task «,» type «: «Тапсырма»}], «үлгілер»: [«Командалық дрон {Task}»]}, {«name»: «TurnIntent», «slots»: [{«name»: «Бағыт», «type»: « Бағыт «}, {» аты «:» Айналу «,» түрі «:» AMAZON. NUMBER «}],» үлгілер «: [» Бұрылу {Бағыты} {Айналу} градус «]}],» түрлері «: [{ «name»: «Бағыт», «мәндер»: [{«name»: {«value»: «Тікелей», «синонимдер»: [«Forw ards «,» Алға «]}}, {» аты «: {» мән «:» Артқа «,» синонимдер «: [» Артқа «,» Артқа «]}}, {» аты «: {» мән «: «Оң»}}, {«аты»: {«мәні»: «Солға»}}, {«аты»: {«мәні»: «Төмен»}}, {«аты»: {«мәні»: «Жоғары «}}]}, {» name «:» Unit «,» values «: [{» name «: {» value «:» Meters «,» synonyms «: [» Meter «]}}, {» name «: {«құндылық»: «ярдтар», «синонимдер»: [«аула»]}}, {«аты»: {«мән»: «аяқтар», «синонимдер»: [«аяқ»]}}]}, {«name»: «Task», «values»: [{«name»: {«value»: «Land»}}, {«name»: {«value»: «hold»}}, {«name»: {«value»: «Stay»}}, {«name»: {«value»: «RTL», «sinonyms»: [«Іске қосуға оралу»]}}]}}}}}

JSON редакторына кодты енгізгеннен кейін, сіз бақылау тізімінің үшінші қадамын нұқуға болады және ол сіздің өзара әрекетіңіздің үлгісін жасайды. Бұл қадаммен сіз қазірге дейін жасайсыз. Сіз соңғы нүкте ұясын бос қалдыра аласыз!

4 -қадам: Lambda функциясын құру

Енді бұл қадамды сіз өзіңіз шешуге тура келеді. Мен сізге Alexa Skill -ге қалай қосылуға болатынын айтамын, бірақ оны өзіңіз кодтауыңыз керек. Сонымен, алдымен AWS басқару консоліне өтіңіз. Содан кейін Ламбдаға барыңыз. Содан кейін сіз қалаған нәрсені атау функциясын жасай аласыз. Оны нөлден бастап жазғаныңызға және жұмыс уақытын өзіңіз қалаған бағдарламалау тіліне айналдырғаныңызға көз жеткізіңіз. Мен Node.js. қолдандым. Alexa дағдысын қосу үшін триггерді қосып, 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…

және сіз мен қосқан файлды пайдалана аласыз, бірақ ол толық емес және жұмыс істемейді.

/ *** Amazon Alexa, Lambda, 2lemetry MQTT көмегімен APM / Pixhawk квадрокоптерін дауыспен басқарыңыз.*/ var awsIot = қажет ('aws-iot-device-sdk'); var config = қажет («./ 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-» + (жаңа Date (). getTime ()), «region»: «us-шығыс-1», «отладка»: true}; var ctx = null; var client = null; // Кіріс сұрауды түріне қарай бағыттаңыз (LaunchRequest, IntentRequest, т.б.) Сұраудың JSON денесі оқиға параметрінде беріледі. export.handler = функция (оқиға, контекст) {көріңіз {console.log («event.session.application.applicationId =» + оқиға.session.application.applicationId); ctx = мәтінмән; if (event.session.application.applicationId! == app_id) {ctx.fail («Жарамсыз қолданба идентификаторы»); } клиент = awsIot.device (mqtt_config); client.on («қосылу», функция () {console.log («AWS IoT желісіне қосылған»); // кері байланыс ();});

if (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, оқиға.session); } if (event.request.type === «LaunchRequest») {onLaunch (event.request, event.session); } else if (event.request.type === «IntentRequest») {onIntent (event.request, event.session); } else if (event.request.type === «SessionEndedRequest») {onSessionEnded (event.request, event.session); ctx.succeed (); }} catch (e) {console.log («өңдегіште ЕРЕКШЕЛІК:» + e); ctx.fail («Ерекшелік:» + e); }}; /*** Сеанс басталғанда шақырылады. */ onSessionStarted функциясы (sessionStartedRequest, session) {console.log («onSessionStarted requestId =» + sessionStartedRequest.requestId + «, sessionId =» + session.sessionId); }

/**

* Пайдаланушы қалағанын көрсетпестен дағдыларды іске қосқанда шақырылады. */ функция onLaunch (launchRequest, сеанс, кері байланыс) {console.log («onLaunch requestId =» + launchRequest.requestId + «, sessionId =» + session.sessionId); // Сіздің шеберлігіңізді іске қосыңыз. getWelcomeResponse (кері байланыс); } /*** Пайдаланушы осы дағдыға ниет білдірген кезде шақырылады. */функция onIntent (aimRequest, сеанс) {//, кері байланыс) {console.log («onIntent requestId =» + ниетRequest.requestId + «, sessionId =» + session.sessionId); var ниет = ниетRequest.intent, ниетName = ниетRequest.intent.name; console.log («REQUEST to string =» + JSON.stringify (aimRequest)); var callback = null; // Егер («GoIntent» === aimName) {doGoIntent (ниет, сеанс); } else if («CommandIntent» === ниет атауы) {doCommandIntent (ниет, сеанс); } else if («TurnIntent» === aimName) {doTurnIntent (ниет, сеанс); } else if («HelpIntent» === aimName) {getWelcomeResponse (); } else {лақтыру «Жарамсыз ниет»; }} /*** Пайдаланушы сеансты аяқтағанда шақырылады. * Дағды shouldEndSession = true қайтарғанда шақырылмайды. */ onSessionEnded функциясы (sessionEndedRequest, session) {console.log («onSessionEnded requestId =» + sessionEndedRequest.requestId + «, sessionId =» + session.sessionId); // Тазалау логикасын осында қосыңыз} // --------------- дағдылардың мінез-құлқын басқаратын функциялар -------------------- --- функция getWelcomeResponse () {// Егер біз сеансты кейбір атрибуттармен инициализациялауды қаласақ, оларды осында қосуға болады. var sessionAttributes = {}; var cardTitle = «Қош келдіңіз»; var speechOutput = «DRONE CONTROL -ге қош келдіңіз.»; // TODO: дрон онлайн немесе офлайн ма? Егер желіде болса, ол ҚҰРАЛДЫ ма? var repromptText = «Дрон командаларға дайын.»; var shouldEndSession = жалған; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } /*** GO ниетін өңдейді. */ doGoIntent функциясы (ниет, сеанс, кері байланыс) {// var cardTitle = «Drone GO…»; var repromptText = «»; var sessionAttributes = {}; var shouldEndSession = жалған; var speechOutput = «»; var бағыты = ниет.слоттар. Дирекция.мән; var қашықтық = ниет.тесіктер. Қашықтық.мән; var unit = aim.slots. Unit.value; var validDirections = [«алға», «алға», «артқа», «артқа», «оңға», «солға», «жоғары», «төменге», «тура», «алға», «тура алға»]; var validUnits = [«аяқ», «фут», «метр», «метр», «аула», «ярд»]; repromptText = «Қаншаға және қай бағытта жүру керектігін айтыңыз.»; var fail = жалған; // кірістерді тексеріңіз if (! (parseInt (қашықтық)> = 1)) {speechOutput = «Мен барғым келетін қашықтықты түсіне алмадым.»; сәтсіздік = ақиқат; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } if (validDirections.indexOf (бағыт) == -1) {speechOutput = «Мен саяхаттағым келетін бағытты түсіне алмадым.»; сәтсіздік = ақиқат; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } if (validUnits.indexOf (бірлік) == -1) {speechOutput = «Мен саяхаттағым келетін қондырғыны түсіне алмадым.»; сәтсіздік = ақиқат; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } if (! fail) {var cardTitle = «Ұшқыш жүреді» + бағыт + «» + қашықтық + «» + бірлік; speechOutput = «Going» + бағыт + «» + қашықтық + «» + бірлік; mqttPublish (ниет, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

doCommandIntent функциясы (ниет, сеанс, кері байланыс) {

// var cardTitle = «Drone COMMAND…»; var repromptText = бос; var sessionAttributes = {}; var shouldEndSession = жалған; var speechOutput = «»; repromptText = «Айтыңызшы, дронға қандай бұйрық бар.»; var task = aim.slots. Task.value; var validTasks = [«ұшыру», «жер», «р. т. л.», «ұстау», «қалу», «тоқтау», «іске қосуға оралу», «тоқтату»]; if (validTasks.indexOf (task) == -1) {speechOutput = «Мен команданы түсіне алмадым.»; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } else {var cardTitle = «Drone командасын орындау» + тапсырма; speechOutput = «Команданы орындау» + тапсырма; mqttPublish (ниет, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

doTurnIntent функциясы (ниет, сеанс, кері байланыс) {

// var cardTitle = «Ұшқышсыз ұшу …»; var repromptText = бос; var sessionAttributes = {}; var shouldEndSession = жалған; var speechOutput = «»; repromptText = «Дронды қалай айналдырғыңыз келетінін айтыңыз.»; var бағыты = ниет.слоттар. Дирекция.мән; var validDirections = [«оңға», «солға», «айналасына»]; if (validDirections.indexOf (бағыт) == -1) {speechOutput = «Мен бұрылыстың бағытын түсіне алмадым.»; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } else {var cardTitle = «Ұшқышсыз бұрылу» + бағыт; speechOutput = «Бұрылу» + бағыт; mqttPublish (ниет, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

mqttPublish функциясы (ниет, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (ниет); console.log («mqttPublish: INTENT text =» + strIntent); // client.publish («ikw1zr46p50f81z/drone/echo», strIntent, жалған); 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 CLIENT ERROR !!» + err);})); }

// --------------- Барлық жауаптарды құрастыратын көмекшілер -----------------------

buildSpeechletResponse функциясы (атауы, шығысы, repromptText, shouldEndSession) {қайтару {outputSpeech: {type: «PlainText», text: output}, карта: {type: «Simple», title: title, content: output}, reprompt: {outputSpeech: {type: «PlainText», мәтін: repromptText}}, shouldEndSession: shouldEndSession}} функциясы buildResponse (sessionAttributes, speechletResponse) {қайтару {нұсқа: «1.0», sessionAttributes: sessionAttributes, жауап: speechletResponse}}

Ұсынылған: