Мазмуну:

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

Video: Alexa Voice башкарылган Raspberry Pi дрону IoT жана AWS менен: 6 кадам (сүрөттөр менен)

Video: Alexa Voice башкарылган Raspberry Pi дрону IoT жана AWS менен: 6 кадам (сүрөттөр менен)
Video: THE WALKING DEAD SEASON 2 COMPLETE GAME 2024, Июль
Anonim
Image
Image
Alexa Voice IoT жана AWS менен башкарылган Raspberry Pi дрону
Alexa Voice IoT жана AWS менен башкарылган Raspberry Pi дрону
Alexa Voice IoT жана AWS менен башкарылган Raspberry Pi дрону
Alexa Voice IoT жана AWS менен башкарылган Raspberry Pi дрону

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

Жабдуулар

Прототипти куруу үчүн ар кандай аппараттык жана программалык камсыздоо муктаждыктары бар. Мен Drone Dojo онлайн сабагын колдонуп, пилотсуз учакты түздүм жана тизмектелген технологияларды интеграцияладым.

Дрон бөлүктөрүнүн тизмеси

Программалык камсыздоого талаптар:

  • Amazon Web Services
  • Ноутбук
  • Mission Planer программасы
  • Балена Этчер
  • Бул жерде Raspbian файлы бар MicroSD картасы бар
  • Amazon Alexa, физикалык же виртуалдык

1 -кадам: Бөлүктөрдү чогултуу жана түшүнүү

Бөлүктөрдү чогултуу жана түшүнүү
Бөлүктөрдү чогултуу жана түшүнүү

Жеткирүү тизмесинде айтылган ар бир бөлүк зарыл жана ар бир бөлүктү так түшүнүү керек. Сиз бөлүктөрдү интернеттен таба аласыз жана чогултулган соң, окууну улантыңыз. Бөлүктөрдү толук түшүнүү үчүн The Drone Dojo ойнотмо тизмесин бул жерден тапса болот. Менин ютуб каналымда 4 мүнөттүк түшүндүрмөнү бул жерден тапса болот. Дрондор жөнүндө сөз болгондо, көпчүлүк бөлүктөрү ойлогондугуна карабастан, моторлор менен винттер гана эмес. Төмөндө ар бир бөлүктүн негизги максаттары келтирилген.

Emlid Navio2 менен Raspberry Pi

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

2. ESCтин (Электрондук ылдамдыкты жөнгө салуучулар)

Бул сары бөлүктөр рамканын астында кездешет. Алар Navioго 4 сайылган, ар бир моторго бирден. PWM сигналдарын алгандан кийин моторлорду айлантып, учууну башташат.

3. Моторлор

Моторлорго өтө көп түшүндүрмөнүн кереги жок, анткени сиз алар менен таанышсыз. Алар түрткү түзүү үчүн винттерди айлантып, айландырышат.

4. Пропеллер

Пропеллер учкучсуз учуунун кыймылын жаратат. Алар машинаны көтөрүү үчүн моторлор менен бир багытта айланат.

5. Батарея жана кубат модулу

LiPo Батареясы бүт дронду кубат модулунун жардамы менен кадр аркылуу башкарат. Бул 15-20 мүнөт учуу убактысын берет жана энергия булагы катары иштейт.

6. GPS

GPS спутниктер менен байланышып, дрондун абалын аныктайт. Бул бийиктикти, кеңдикти жана узундукту аныктайт. Бул Geofencing, жол пункттары үчүн, ошондой эле белгилүү бир кызматтарга же багыттарга өтүү үчүн колдонулушу мүмкүн.

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

Телеметрия модулу биздин учкучсуз учакты жердеги башкаруу станциясына туташтырат, биздин учурда Миссия Пландоочусу, көзөмөлгө алынат.

8. RC Controller жана Module PPM Encoder менен бирге

RC контролери радиону колдонуп, пилотсуз учкучсуз башкаруу үчүн сигналдарды жана буйруктарды RC модулуна жөнөтөт. PPM Encoder бул сигналдарды Navio + RPI иштетүү жана аткаруу үчүн которот.

9. Frame

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

Эми ар бир бөлүктү билүү менен, биз акыры дронду кура алабыз! Кийинки кадамга алга!

2 -кадам: Дронду чогултуу

Дронду чогултуу
Дронду чогултуу

Бул кадам, балким, физикалык күч жагынан эң кыйын. Мен жардам сурап башка бирөөнү сунуштайм же бөлүктөр тизмесинде жардам колун колдонууга аракет кылыңыз. Бул жерде көрсөтүү үчүн процесс өтө узун, ошондуктан мен Дрон Дожо колдонгон башка шилтемени берем.

Raspberry Pi дронун куруу

Дагы, мен өтө майда -чүйдөсүнө чейин айтпайм, мен жөн гана ар бир кадамдын негиздерин бөлүп берем.

1. Берилиштериңизди уюштуруңуз - Биздин материалдарды чогултуп, алардын оңой жеткиликтүүлүгүн текшериңиз

2. Курууну пландаңыз - Кура турган нерсеңиздин планын түзүү үчүн бөлүктөрүңүздү алкакка уюштуруңуз

3. Лайнердик жумуш - Бул жалгыз аткаруу үчүн бир аз оор жумуш. Сиз моторлору менен келген алтын ок коннекторлорун ESCке ширетишиңиз керек. Андан кийин, сиз рамканын астынкы бөлүгүн алып, ESCти астыңкы алкакка же Power Distribution Boardго ширетишиңиз керек. Батарея модулу дагы электр бөлүштүрүү тактасына кошулат

4. Кадрды Орнотуу - Сиз андан кийин алкактын үстүнкү бөлүгүн колдору менен бирге бурап салышыңыз керек. Сиз андан кийин Raspberry Pi'ни каалаган жагыңызга бекитип койсоңуз болот. (Мен скотч колдондум). Андан кийин сиз ЭСКны курал-жарактарга сыдырма байлоо менен камсыздай аласыз. Азыр биз дээрлик бүттүк.

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

6. Фреймдеги бөлүктөрдү бүтүрүү - телеметрикалык модулдагы скотч же тасма. PPM Encoderди скотч менен жабыштырыңыз. Эми сиз ESC жана PPM Encoderди Navioго зымдай аласыз.

7. GPS Маунт + Батарея - GPS Тоосун ар кандай бурамалар жана даана менен чогултуңуз. Zip-галстуктарды колдонуп, GPSти Frameге тиркеңиз. Мен GPS тоосун сындыргычтыгынан сөзсүз колдонгон жокмун, бирок бул сизге байланыштуу. Андан кийин, батареяны Power Distтин арасына киргизе аласыз. Board. Мен ошондой эле кадрга күч модулун байлап, скотч менен чаптадым. Эми сиздин жабдыктарыңыз дээрлик орнотулган. Эми биз күткөн бөлүк үчүн!

8. Пропеллерди орнотуу !!! - Сиз ойнотмо тизмеде көрсөтүлгөн диаграмманы колдонуп, винттерди катуулата аласыз. Андан кийин ESCти моторлорго туташтырсаңыз болот, биз акыры дронду куруп бүттүк.

Программалык камсыздоонун кийинки кезеги, андан ары!

3 -кадам: Raspberry Pi жана GCSти конфигурациялоо (Mission Planner)

Raspberry Pi жана GCSти конфигурациялоо (Mission Planner)
Raspberry Pi жана GCSти конфигурациялоо (Mission Planner)

Дагы, сиз акыркы кадамдан плейлистте деталдуу көрсөтмөлөрдү таба аласыз. Бирок, балким, сиз RasPi орнотууну билесиз. Бирок бул жолу биз муну башыбыз жок кылып жатабыз. Navena OS веб -сайтынан MicroSD картасына ОСту күйгүзүү үчүн Balena Etcher колдонуңуз. Ал компьютериңизге туташып турганда, блокнот ++ аркылуу wpa өтүнүүчүгө өтүңүз. Андан кийин, WiFiңызга туташуу үчүн Raspberry Pi үчүн ssid менен сырсөздү киргизиңиз. Андан кийин SSH деп аталган файлды кошушуңуз керек. Бул Command Line же башка ыкма аркылуу болушу мүмкүн. Эми биз SSH жасай алабыз. Сиз командалык чакырууну же Putty колдоно аласыз. Мен командалык кеңешти колдонуп, "ssh pi@navio" деп тердим, менин учурда туташуу үчүн, же сиз IP дарегин жана sshти ушундай жол менен таба аласыз. Туташкандан кийин, Navioду орнотуу жана конфигурациялоо үчүн бул видеону колдонуңуз. Телеметрияны орнотуу үчүн, адегенде Raspberry Piге түзөтүү киргизишиңиз керек. Түзөтүүнү жасоо үчүн жана Mission Planner менен туташууга аракет кылуу үчүн муну аткарыңыз. Эгерде телеметрия иштебесе, анда GCS (ноутбук сыяктуу Ground Control Station) IPиңизге кирип, UDB туташуусун колдонуп, түзөтүүнү жокко чыгарсаңыз болот. Mission Planner'ге туташкандан кийин, пилотсуз учактын бардык бөлүктөрүн калибрлөө үчүн орнотуу устасын колдоно аласыз. Эгер сизге жардам керек болсо, кайра ойнотмо тизмеге кайрылыңыз. Адатта, сиз качан орнотсоңуз, дээрлик дайыма ката кетет. Мүчүлүштүктөрдү жоюу бул долбоордун эң чоң бөлүктөрүнүн бири. Мен ал жерде сизге жардам бере албайм, анткени мен сиздин каталарыңызды билбейм, бирок көпчүлүк каталарды интернеттин жардамы менен оңдоого болот. Баары даяр болгондон кийин, дрон учууга даяр! Сиз RC контролерун жана учуу режимдерин Mission Plannerде орното аласыз. Дронду куралдандыруу үчүн сол таякты эң төмөнкү оңго беш секунд кармап турууга аракет кылыңыз. Мен үйрөткүчтү карабай учууну сунуш кылбайм, анткени дрон абдан морт жана сынууга оңой. Мен үчүн аны биринчи жолу учканымда GPS тоосун жана кээ бир винттерди сындырдым. Эгер үн менен башкарууну талап кылбасаңыз, анда бул жерден токтосоңуз болот. AWS жана дронду программалоо жөнүндө билүүнү улантыңыз!

4 -кадам: Дронду Python менен учууга программалоо

Дронду Python менен учууга программалоо
Дронду Python менен учууга программалоо

AWSке кирүүдөн мурун, алгач учкучсуз учуучу аппаратты кантип программалоону түшүнүшүбүз керек. Баштапкы орнотуудан кийин, үн башкаруусун интеграциялоо өтө кыйын болбошу керек. Биз муну түшүнүүгө аракет кыла турган биринчи нерсе - бул жөнөкөй учуу жана конуу программасын кабыл алуу. Raspberry Pi орнотулгандан кийин, биз аны кайра SSH киргизе алабыз. Сиз кайра ойнотмо тизмесин карап же менин көрсөтмөмдү аткарсаңыз болот.

1. Алгач ArduPilot Source кодун 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 боюнча программаны түзүшүбүз керек

Кийинки кадамдарды жасоодон мурун/src/ardupilot/cd менен өтүүнү тактаңыз

Андан кийин Navio менен атайын конфигурациялоо үчүн

./waf configure --board = navio2

Андан кийин сиз менен түзө аласыз

./waf -максаттар бин/arducopter

3. Биз азыр баштапкы кодду Navioго орното алабыз

Адегенде туура каталогго өтөлү.

cd/etc/systemd/system

Андан кийин файлды түзөтүңүз

sudo vi arducopter.кызмат

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 пакетин орното алабыз

пон dronekit орнотуу == 2.9.1

Бул эң акыркы версия болушу мүмкүн же мүмкүн эмес, бирок мен колдонгон версия, ошондуктан мен көйгөйлөрдү чечүүгө жардам бере алам.

Орнотулганын текшерүү үчүн, биз a

пип тоңдуруу | grep dronekit

Эми биз акыры биринчи питон сценарийибизди даярдоого даярбыз

5. takeoff_and_land.py

ЭСКЕРТҮҮ! Мен Python жөнүндө негизги түшүнүктү түзүүнү сунуштайм, ошондо сиз кодду үйрөнүп жана түшүнө аласыз. Программаны өзүңүз жазгыңыз келсе, бул видеону ээрчиңиз.

## Алгач бул кодду сактоо үчүн каталог түзбөйлү

cd dk ## Эгерде сиз муну өзүңүз жасоону кааласаңыз, анда программаны түзүү үчүн vi takeoff_and_land.py ## колдонуңуз

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

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 IoT колдонуу үчүн AWS консолуна киришибиз керек. Андан кийин IoT Coreго өтүңүз. Ал жакка чыккандан кийин, Башкаруу баскычын чыкылдатып, андан кийин нерсени жаратуу керек. Аты кошулгандан кийин, туташуу үчүн бизге сертификат керек. Мен бир чыкылдатуу сертификатын чыкылдатууну сунуштайт элем. Андан кийин тастыктама экранын көргөндөн кийин, ар бир ачкычты жүктөп алууну текшериңиз, анын ичинде CA CA. Андан кийин сиз барып, нерсенин жаратылышын бүтүрө аласыз. Андан кийин биз саясатты түзүшүбүз керек. IoT Core'го кайра чыгыңыз. Андан кийин коопсуз жана саясатты чыкылдатыңыз. Андан кийин саясатты түзүү баскычын басыңыз. Сиз андан кийин ат түзүп, ресурстарды кошо аласыз. Иш -аракет астында, iot * жана * ресурс астына териңиз жана эффектке уруксат бериңиз. Андан кийин нерсеңизге кайтыңыз жана сертификатыңызга өтүңүз. Бул жерде болгондо, саясатты чыкылдатыңыз. Сиз ошондо өзүңүздүн саясатыңызды тиркеп койсоңуз болот, баары даяр!

2. Raspberry Pi кодун орнотуу жана IoT менен иштөө

Бул бөлүктө сизге файл которуу үчүн SFTP Кардары керек (WinSCP колдондум). Raspberry Pi'ге туташкандан кийин, бизде сертификат ачкычтары болушу керек. Сиз Raspberry Pi үчүн негизги файлдарды өткөрүп беришиңиз керек. AWSIoTPythonSDKди Raspberry Piге орнотууңуз керек. Андан кийин Raspberry Piдеги dk каталогуна өтүңүз. Сиз IoT менен байланышуу үчүн берген Alexa Drone Control файлын колдоносуз. Бул файлды колдонуу үчүн мен баштоо үчүн Shell скриптин колдондум. Мен кандайдыр бир себептерден улам файлды жүктөй албагандыктан, мен төмөндөгү кодду көрсөтөм. Эгерде тестирлөө учурунда программа AWS IoTтен билдирүүлөрдү албаса, кабатыр болбоңуз! Бул менин күнөөм болушу мүмкүн, анткени Alexa Drone Control File сиздин нерсеге туура келбеши мүмкүн. Ошентип, аны оңдоо үчүн, AWS IoTге кайтыңыз жана сол панелдеги үйрөнүүнү басыңыз. Көрсөтмөлөрдү аткарыңыз жана кайра баштоого туура келиши мүмкүн. Бул үчүн кечирим сурайм. Сиздин IoT RasPiдеги программа менен иштей баштаганда, мен берген Alexa Drone Control файлынан dronekit кодун бириктире аласыз. Андан кийин, IoTден алган сертификаттарыңыз жана Rest API Endpoint менен берген Shell Scriptти колдонуңуз.

errores -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 клону https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py popd fi орнотуу

# пакетте жүктөлгөн сертификаттарды колдонуу менен pub/sub үлгүсүндөгү колдонмону иштетүү

printf "\ nPub/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 консолуна киришибиз керек. Андан кийин, жөн эле чеберчиликти жаратыңыз. Сиздин жөндөмүңүзгө ылайыктуу моделди тандап берүүнү сураганда, жөн гана салтка өтүңүз. Качан ал методду тандап алууну суранат, өзүңүздүн камсыздооңузду басыңыз. Каалаган нерсеңизди атасаңыз болот. Эч кандай шаблон талап кылынбайт, андыктан нөлдөн баштоону тандаңыз. Андан кийин, чеберчилигиңизди жараткандан кийин, оң жагында текшерүү тизмеси бар Skill Builder экранына келишиңиз керек. Бул жерден биз жөндөмүбүздү өнүктүрө баштасак болот. Текшерүү тизмесиндеги биринчи орунду чакыруу аты түзөт. Бул Alexaга сиздин жөндөмүңүздү колдонууну айтат. Мен үчүн, мен жөн гана дрон катары чакыруумдун атын койдум. Эми биз ниетибизге, айтуубузга жана уячаларыбызга бара алабыз. Бул жерде дронго 1 метр өйдө же оңго же ылдый өтүү сыяктуу буйруктарды бере аласыз. Меники азырынча бир метр менен гана иштейт. Сиз сол панелдин астындагы JSON редакторун чыкылдата аласыз. Сиз андан кийин ага төмөнкү кодду чаптай аласыз.

Кодду 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-" + (new Date (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var client = null; // Кирүүчү суроо -талапты маршруттун түрүнө негиздөө (LaunchRequest, IntentRequest ж. Б.) JSON сурамынын органы окуя параметринде берилет. export.handler = функция (окуя, контекст) {аракет кылыңыз {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 ("туташуу", function () {console.log ("AWS IoT менен туташкан"); // кайра чалуу ();});

if (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.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 ("иштетүүчүдө EXCEPTION:" + e); ctx.fail ("Exception:" + 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 =" + aimRequest.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 {ыргыт "Жараксыз ниет"; }} /*** Колдонуучу сеансты аяктаганда чакырылат. * ЧеберчиликEndSession = true кайтып келгенде чакырылган эмес. */ onSessionEnded функциясы (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Бул жерге тазалоо логикасын кошуңуз} // --------------- Чеберчиликтин жүрүм-турумун көзөмөлдөгөн функциялар -------------------- --- function getWelcomeResponse () {// Эгерде биз кээ бир атрибуттарга ээ болуу үчүн сеансты инициалдаштырууну кааласак, анда буларды кошо алабыз. var sessionAttributes = {}; var cardTitle = "Кош келиңиз"; var speechOutput = "DRONE CONTROLго кош келиңиз."; // TODO: пилотсуз онлайнбы же оффлайнбы? Эгерде онлайнда болсо, анда ал куралданганбы? var repromptText = "Дрон буйрукка даяр."; var shouldEndSession = false; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } /*** GO ниети менен иштейт. */ функциясы doGoIntent (ниет, сеанс, кайра чалуу) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var багыты = ниет.слоттор. Дирекция.маан; var расстояние = ниет.чыктар. Алыстык.маан; var unit = aim.slots. Unit.value; var validDirections = ["алдыга", "алдыга", "артка", "артка", "оңго", "солго", "өйдө", "ылдыйга", "түз", "алдыга", "түз алдыга"]; var validUnits = ["бут", "фут", "метр", "метр", "короо", "ярд"]; repromptText = "Канчага чейин жана кайсы багытта баруу керектигин айт."; var fail = false; // validate inputs if (! (parseInt (distance)> = 1)) {speechOutput = "Мен саякаттагым келген аралыкты түшүнө алган жокмун"; fail = true; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } if (validDirections.indexOf (багыт) == -1) {speechOutput = "Мен саякаттагым келген багытты түшүнө алган жокмун"; fail = true; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } if (validUnits.indexOf (бирдик) == -1) {speechOutput = "Мен саякаттагым келген бирдикти түшүнгөн жокмун"; fail = true; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } if (! fail) {var cardTitle = "Дрон баратат" + багыт + "" + аралык + "" + бирдиги; speechOutput = "Барууда" + багыт + "" + аралык + "" + бирдик; mqttPublish (ниет, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

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

// var cardTitle = "Drone COMMAND…"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Мага дрондун буйругу эмне экенин айт."; var task = aim.slots. Task.value; var validTasks = ["учуруу", "жер", "р. т. л.", "кармоо", "калуу", "токтоо", "ишке кайтуу", "токтотуу"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Мен буйрукту түшүнө алган жокмун."; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } else {var cardTitle = "Drone командасын аткаруу" + тапшырма; speechOutput = "Буйрукту аткаруу" + тапшырма; mqttPublish (ниет, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

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

// var cardTitle = "Учкучсуз башкаруу…"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Дронду кантип айландыргыңыз келгенин айтып бериңиз."; var багыты = ниет.слоттор. Дирекция.маан; var validDirections = ["оңдо", "солдо", "айланасында"]; if (validDirections.indexOf (багыт) == -1) {speechOutput = "Мен бурулуштун багытын түшүнө алган жокмун"; ctx.success (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, 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 CLIENT ERROR !!" + err);})); }

// --------------- Бардык жоопторду түзгөн жардамчылар -----------------------

buildSpeechletResponse функциясы (аталыш, чыгаруу, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, card: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} function buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, answer: speechletResponse}}

Сунушталууда: