Агуулгын хүснэгт:

Alexa дуу хоолойгоор удирддаг Raspberry Pi дрон нь IoT болон AWS -тэй: 6 алхам (зурагтай)
Alexa дуу хоолойгоор удирддаг Raspberry Pi дрон нь IoT болон AWS -тэй: 6 алхам (зурагтай)

Видео: Alexa дуу хоолойгоор удирддаг Raspberry Pi дрон нь IoT болон AWS -тэй: 6 алхам (зурагтай)

Видео: Alexa дуу хоолойгоор удирддаг Raspberry Pi дрон нь IoT болон AWS -тэй: 6 алхам (зурагтай)
Видео: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 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 (Internet of Things), хамгийн гол нь Raspberry Pi -ийг ажиллуулахад ашигладаг. Энэ нь дронуудын талаар болон тэдний өдөр бүр хэрхэн сайжирч байгааг үзүүлэх, мэдээлэх зорилготой юм. Та амжилтанд хүрч, нисгэгчгүй онгоцны талаар олж мэдэх болно гэж найдаж байна. Амжилт хүсье, уншсанд баярлалаа. -Арман

Хангамж

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

Дроны эд ангиудын жагсаалт

Програм хангамжийн шаардлага:

  • Amazon вэб үйлчилгээ
  • Зөөврийн компьютер
  • Mission Planer програм хангамж
  • Балена Этчер
  • Raspbian файлтай MicroSD карт эндээс олдсон
  • Amazon Alexa, физик эсвэл виртуал

Алхам 1: эд ангиудыг цуглуулах, ойлгох

Эд ангиудыг цуглуулах, ойлгох
Эд ангиудыг цуглуулах, ойлгох

Нийлүүлэлтийн жагсаалтад дурдсан хэсэг бүр зайлшгүй шаардлагатай бөгөөд хэсэг бүрийг тодорхой ойлгох шаардлагатай. Та хэсгүүдийг онлайнаар олж, цуглуулсны дараа үргэлжлүүлэн уншиж болно. Бүрэлдэхүүн хэсгүүдийг бүрэн ойлгохын тулд The Drone Dojo -ийн тоглуулах жагсаалтыг эндээс олж болно. Миний youtube суваг дээрх 4 минутын тайлбарыг эндээс олж болно. Нисгэгчгүй онгоцны тухайд гэвэл ихэнх хэсэг нь зөвхөн мотор, сэнс биш гэж боддог. Хэсэг бүрийн үндсэн зорилгыг доор харуулав.

Emlid Navio2 бүхий Raspberry Pi

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

2. ESC (Цахим хурд хянагч)

Эдгээр шар хэсгүүд нь хүрээний доор байрладаг. Тэд Navio -д 4 залгууртай, мотор тус бүрт нэг. ХОУХ -ны дохиог хүлээн авсны дараа тэд мотороо эргүүлж, нислэгээ эхлүүлнэ.

3. Мотор

Моторуудад хэтэрхий их тайлбар хэрэггүй, учир нь та тэдгээрийг сайн мэддэг байх. Тэд түлхэхийн тулд сэнсийг эргүүлж, эргүүлдэг.

4. Сэнс

Сэнс нь нисгэгчгүй онгоцны нислэгийн түлхэлтийг бий болгодог. Тээврийн хэрэгслийг өргөхийн тулд тэд мотортой ижил чиглэлд эргэлддэг.

5. Батерей ба тэжээлийн модуль

LiPo батерей нь цахилгаан модулийг ашиглан дроныг бүхэлд нь хүрээгээр дамжуулдаг. Энэ нь ойролцоогоор 15-20 минутын нислэгийн хугацаа өгч, тэжээлийн эх үүсвэр болдог.

6. GPS

GPS нь хиймэл дагуултай холбогдож дроны байрлалыг тодорхойлдог. Энэ нь өндөр, өргөрөг, уртраг зэргийг тодорхойлдог. Үүнийг геофонинг, замын цэг, тодорхой байрлал эсвэл чиглэлд шилжихэд ашиглаж болно.

7. Телеметрийн модуль

Телеметрийн модуль нь манай нисгэгчгүй онгоцыг газрын хяналтын станцтай холбож, манай тохиолдолд Mission Planner -ийг хянадаг.

8. RC хянагч ба модуль нь PPM кодлогчтой хамт

RC хянагч нь радиог ашиглан дохио, тушаалыг RC модульд дамжуулж, нисгэгчгүй онгоцыг гараар удирдах болно. PPM кодлогч нь Navio + RPI -ийн эдгээр дохиог боловсруулж, гүйцэтгэхийн тулд орчуулдаг.

9. Хүрээ

Энэхүү улаан, цагаан хүрээ нь бусад хэсгүүдийг байрлуулах суурь эсвэл тавцан болж өгдөг. Хүрээ нь аэродинамик, хөнгөн жинтэй тул манай нисгэгчгүй онгоцны загварыг бүтээхэд төгс төгөлдөр юм.

Одоо хэсэг бүрийг мэддэг болсноор бид дрон бүтээж чадна! Дараагийн алхам руу үргэлжлүүлээрэй!

Алхам 2: Дрон угсрах

Дрон угсрах
Дрон угсрах

Энэ алхам нь бие бялдрын хүч чармайлтын хувьд хамгийн хэцүү байж магадгүй юм. Би өөр хүнээс тусламж авах эсвэл эд ангиудын жагсаалтад туслах гараа ашиглахыг зөвлөж байна. Энэ үйл явцыг энд үзүүлэхэд хэтэрхий урт байгаа тул би The Drone Dojo -ийн ашигладаг өөр линкийг өгөх болно.

Raspberry Pi дрон бүтээх

Дахин хэлэхэд, би нэг их дэлгэрэнгүй мэдээлэл өгөхгүй болохоор алхам бүрийнхээ үндсийг л тодруулах болно.

1. Хангамжаа цэгцлэх - Манай материалыг цуглуулж, хүртээмжтэй байгаа эсэхийг шалгаарай

2. Барилгын ажлаа төлөвлөх - Юу бүтээхээ төлөвлөхийн тулд эд ангиудыг хүрээ дээр цэгцэл

3. Гагнах ажил - Энэ бол ганцаараа хийхэд жаахан хэцүү ажил юм. Та мотортой хамт ирдэг алтан сумны холбогчийг ESC -т гагнах ёстой. Дараа нь та хүрээний доод хэсгийг авч, ESC -ийг доод хүрээ эсвэл цахилгаан түгээх самбар руу гагнах ёстой. Зайны модулийг мөн цахилгаан хуваарилах самбар дээр гагнах болно

4. Хүрээг тохируулах - Дараа нь та хүрээний дээд хэсгийг гараараа шургуулах ёстой. Дараа нь та Raspberry Pi -ийг хүссэнээрээ хавсаргаж болно. (Би наалдамхай тууз ашигласан). Дараа нь та ESC-ийг гар дээр нь зүүгээр бэхлэх боломжтой. Одоо бид бараг дуусч байна.

5. RC хянагчийг хүлээн авагчид холбох - ESC ашиглан RC хянагчийг холбохын тулд дээрх тоглуулах жагсаалт дээрх зааврыг дагаж үзээрэй.

6. Хүрээн дээрх эд ангиудыг дуусгах - Телеметрийн модулийн наалдамхай тууз эсвэл оосорыг хүрээ рүү холбоно. PPM кодлогчын гарыг бас наалдуулах. Одоо та ESC ба PPM кодлогчийг Navio руу холбож болно.

7. GPS Mount + Battery - GPS Mount -ийг янз бүрийн эрэг, эд ангиар угсарна. Цахилгаан товч ашиглан GPS-ийг Frame дээр хавсаргана уу. Би GPS холбогчийг эмзэг байдлаас нь шалтгаалаад заавал ашиглаагүй, гэхдээ энэ нь танд л хамаарна. Дараа нь та зайгаа Power Dist -ийн хооронд оруулж болно. Удирдах зөвлөл. Би цахилгаан модулийг хүрээн дээр бэхлээд наасан. Одоо таны техник хангамж бараг тохируулагдсан байна. Одоо бидний хүлээж байсан хэсгийн хувьд!

8. Сэнсийг суурилуулах !!! - Та тоглуулах жагсаалтад дурдсан диаграмыг ашиглан сэнсийг чангалж болно. Дараа нь та ESC -ийг хөдөлгүүрт холбож болно, бид дрон бүтээж дуусгалаа.

Дараагийн програм хангамж, цаашаа!

Алхам 3: Raspberry Pi ба GCS (Mission Planner) -ийг тохируулах

Raspberry Pi ба GCS -ийг тохируулах (Эрхэм зорилго төлөвлөгч)
Raspberry Pi ба GCS -ийг тохируулах (Эрхэм зорилго төлөвлөгч)

Дахин хэлэхэд, та хамгийн сүүлийн алхамаас эхлэн тоглуулах жагсаалтаас илүү дэлгэрэнгүй зааврыг олох боломжтой. Гэсэн хэдий ч та RasPi -ийг хэрхэн тохируулахаа мэддэг байх. Гэхдээ энэ удаад бид үүнийг толгойгүй хийж байна. Navena OS вэбсайтаас OS -ийг MicroSD карт руу шатаахын тулд Balena Etcher -ийг ашиглана уу. Энэ нь таны компьютерт залгагдсан байхад notpa ++ ашиглан wpa програм руу очно уу. Үүний дараа WiFi -тэй холбогдохын тулд Raspberry Pi -ийн ssid болон нууц үгийг оруулна уу. Дараа нь та SSH нэртэй файл нэмэх ёстой. Үүнийг Command Line эсвэл өөр аргаар хийж болно. Одоо бид 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. Эхлээд Raspberry Pi дээрх директороос ArduPilot -ийн эх кодыг татаж авцгаая

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.үйлчилгээ

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 суулгах dronekit == 2.9.1

Энэ нь хамгийн сүүлийн хувилбар байж магадгүй, гэхдээ энэ нь миний ашиглаж байсан хувилбар тул алдааг олж засварлахад туслах болно.

Суулгасан эсэхийг шалгахын тулд бид a

пип хөлдөх | grep dronekit

Одоо бид анхныхаа питон скриптийг гаргахад бэлэн боллоо

5. хөөрөлт ба газар

АНХААРУУЛГА! Би котыг сурч, ойлгохын тулд python -ийн талаархи үндсэн ойлголтыг бий болгохыг санал болгож байна. Хэрэв та програмыг өөрөө бичихийг хүсч байвал энэ видеог үзээрэй.

## Эхлээд энэ кодыг хадгалах лавлах үүсгэхгүй

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 (Internet of Things) ашиглахын тулд бидэнд нэг зүйл хэрэгтэй байна. Тиймээс бид эхлээд AWS IoT -ийг ашиглахын тулд AWS консол руу нэвтрэх ёстой. Дараа нь IoT Core руу очно уу. Тэнд очсоны дараа та Удирдах товчлуур дээр дараад ямар нэгэн зүйл үүсгэх хэрэгтэй. Нэр нэмсний дараа холбогдохын тулд бидэнд гэрчилгээ хэрэгтэй болно. Би нэг товшилтоор баталгаажуулалт дээр дарахыг зөвлөж байна. Дараа нь гэрчилгээний дэлгэцийг үзсэний дараа түлхүүр бүрийг татаж авахаа мартуузай. Дараа нь та явж, тухайн зүйлийн бүтээн байгуулалтыг дуусгаж болно. Дараа нь бид бодлого боловсруулах ёстой. IoT Core руу буцаж очно уу. Дараа нь аюулгүй байдал дээр дарж, бодлогыг дарна уу. Дараа нь бодлого үүсгэх дээр дарна уу. Дараа нь та нэр үүсгэж, нөөцийг нэмж болно. Үйлдлийн дор iot * гэж бичээд нөөцийн доор * гэж бичээд үр дүнг зөвшөөрнө үү. Дараа нь зүйл рүүгээ буцаж очоод гэрчилгээ рүүгээ очно уу. Энд очсоны дараа бодлого дээр дарна уу. Дараа нь та энэ зүйлийн талаархи бодлогоо хавсаргаж болно, тэгвэл бүх зүйл бэлэн болно!

2. Raspberry Pi дээр код тохируулж, IoT -тэй харилцах

Энэ хэсэгт файл дамжуулахын тулд танд SFTP клиент (би WinSCP ашигласан) хэрэгтэй болно. Манай Raspberry Pi -тэй холбогдсоны дараа гэрчилгээний түлхүүрүүдийг гартаа авах шаардлагатай болно. Та гол файлуудыг Raspberry Pi руу шилжүүлэх ёстой. Та мөн Raspberry Pi дээр AWSIoTPythonSDK суулгах хэрэгтэй. Дараа нь Raspberry Pi дээрх dk лавлах руу орно уу. Та IoT -тэй харилцахдаа миний өгсөн Alexa Drone Control файлыг ашигладаг. Энэ файлыг ашиглахын тулд би Shell Script -ийг ашиглаж эхлэв. Зарим шалтгааны улмаас файлыг байршуулж чадахгүй байгаа тул би доорх кодыг харуулах болно. Хэрэв програм турших явцад AWS IoT -аас мессеж хүлээж авахгүй бол санаа зовох хэрэггүй! Энэ нь миний буруу байж магадгүй, учир нь Alexa Drone Control File нь таны зүйлд тохирохгүй байж магадгүй юм. Үүнийг засахын тулд AWS IoT руу буцаж очоод зүүн талын самбар дээр суралцна уу. Зааврыг дагана уу, та дахин эхлүүлэх шаардлагатай болж магадгүй юм. Үүнд уучлаарай. Таны IoT нь RasPi програм дээр ажиллаж эхэлмэгц та миний өгсөн Alexa Drone Control файлаас dronekit кодыг нэгтгэж болно. Үүний дараа гэрчилгээний хамт өгсөн Shell скрипт болон IoT -ийн Rest API Endpoint -ийг ашиглана уу.

error set дээрх # зогсоох скрипт -e # Root CA файл байгаа эсэхийг шалгаарай, байхгүй бол татаж аваарай [! -f./root-CA.crt]; дараа нь printf "\ nAWS-аас AWS IoT Root CA сертификатыг татаж авч байна … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # суулгаагүй бол Python-д зориулсан AWS Device SDK-ийг суулгана уу. хэрэв [! -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 суулгах

# багцад татаж авсан гэрчилгээг ашиглан паб/дэд дээжийн програмыг ажиллуулна уу

printf "\ nПаб/дэд дээжийн програмыг ажиллуулж байна … / 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.хувийн.түлхүүр

Нэрс өөр өөр байдаг тул энэ нь бүгдэд тохирохгүй. Файлыг шилжүүлэхдээ миний ашигласан түлхүүрүүдийн оронд таны түлхүүр нэрийг орлуулах болно. Файлыг шилжүүлэхийн өмнө dk -ээс гарахаа мартуузай! Одоохондоо хийх ёстой зүйл чинь энэ байх ёстой.

3. Alexa ур чадвараа хөгжүүлэх

Энэ алхам нь байгаагаасаа хамаагүй хэцүү санагдаж байна. Нэгдүгээрт, бид Alexa Developer консол руу нэвтрэх ёстой. Дараа нь ур чадвараа бий болгоход л хангалттай. Таны ур чадварт тохирсон загвар сонгохыг хүсвэл зүгээр л custom -ийг дарна уу. Арга сонгохыг хүссэн тохиолдолд өөрийн гэсэн заалтыг дарна уу. Та үүнийг хүссэнээрээ нэрлэж болно. Загвар хийх шаардлагагүй тул эхнээс нь эхлэхийг сонгоно уу. Дараа нь ур чадвараа бий болгосны дараа та ур чадвар бүтээгчийн дэлгэц дээр баруун талд нь хяналтын хуудас байх ёстой. Эндээс бид ур чадвараа хөгжүүлж эхэлж болно. Хяналтын жагсаалтын эхний хэсэгт дуудлагын нэр байна. Энэ бол та ур чадвараа ашиглахыг Alexa -д хэлэх болно. Миний хувьд дуудах нэрээ дрон гэж нэрлэсэн. Одоо бид зорилго, үг хэллэг, үүр рүүгээ явж болно. Энд та нисгэгчгүй онгоцонд 1 метр дээш, баруун эсвэл доошоо явах гэх мэт тушаал өгч болно. Минийх одоогоор ердөө ганц метртэй л ажиллаж байна. Та зүүн талын самбар дээрх JSON засварлагч дээр дарж болно. Дараа нь та дараах кодыг үүнд оруулах боломжтой.

Кодыг JSON редактор дээр буулгасны дараа та шалгах хуудасны гурав дахь алхам дээр дарж, таны харилцан үйлчлэлийн загварыг бий болгоно. Энэ алхамаар та одоохондоо хийх болно. Та эцсийн цэгийн үүрийг одоогоор хоосон орхиж болно!

Алхам 4: Lambda функцийг бий болгох

Одоо энэ алхам бол та өөрөө шийдэх ёстой алхам юм. Үүнийг Alexa Skill -т хэрхэн холбохыг би танд хэлэх болно, гэхдээ та өөрөө кодлох хэрэгтэй болно. Тиймээс эхлээд AWS менежментийн консол руу очно уу. Дараа нь Ламбда руу яв. Дараа нь та хүссэн зүйлээ нэрлэх функцийг үүсгэж болно. Үүнийг эхнээс нь зохиож, програмчлалын хэлийг хүссэн цагтаа тохируулаарай. Би Node.js. -г ашигласан. Alexa ур чадвар нэмэхийн тулд идэвхжүүлэгч нэмж Alexa Skills Kit (ASK) -ийг сонгоно уу. Lambda ARN -ээ хуулж аваад Alexa ур чадвар руу буцна уу. Одоо төгсгөлийн цэг рүү очно уу. Та 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-" + төхөөрөмжийн нэр, // + "-Lambda-" + (шинэ огноо (). getTime ()), "бүс нутаг": "us-east-1", "debug": true}; var ctx = null; var client = null; // Ирж буй хүсэлтийг төрөл (LaunchRequest, IntentRequest гэх мэт) дээр үндэслэн чиглүүлээрэй. Хүсэлтийн JSON биеийг event параметрт оруулсан болно. export.handler = функц (үйл явдал, контекст) {оролдох {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = контекст; if (event.session.application.applicationId! == app_id) {ctx.fail ("Буруу програмын ID"); } клиент = awsIot.device (mqtt_config); client.on ("холбох", function () {console.log ("AWS IoT -д холбогдсон"); // дуудлага хийх ();});

хэрэв (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } if if (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } өөр бол (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.succeed (); }} барих (e) {console.log ("зохицуулагч дахь EXCEPTION:" + e); ctx.fail ("Үл хамаарах зүйл:" + e); }}; /*** Чуулган эхлэхэд залгасан. */ onSessionStarted (sessionStartedRequest, session) функц {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Хэрэглэгч юу хүсч байгаагаа хэлэлгүйгээр ур чадвараа эхлүүлэх үед дууддаг. */ onLaunch функц (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Ур чадвараа дээшлүүлэхийн тулд илгээнэ үү. getWelcomeResponse (дуудлага хийх); } /*** Хэрэглэгч энэ ур чадвараа илэрхийлэхийг хүссэн тохиолдолд дууддаг. */функц onIntent (aimRequest, session) {//, callback) {console.log ("onIntent requestId =" + aimRequest.requestId + ", sessionId =" + session.sessionId); var ниет = ниетRequest.intent, aimName = ниетRequest.intent.name; console.log ("string to REQUEST =" + JSON.stringify (aimRequest)); var callback = null; // Хэрэв таны ур чадварын зорилтот ажилтнууд руу илгээнэ үү ("GoIntent" === aimName) {doGoIntent (зорилго, сесс); } if if ("CommandIntent" === aimName) {doCommandIntent (зорилго, сесс); } if if ("TurnIntent" === aimName) {doTurnIntent (зорилго, сесс); } if if ("HelpIntent" === aimName) {getWelcomeResponse (); } өөр {шидэх "Хүчингүй зорилго"; }} /*** Хэрэглэгч сессийг дуусгавал дуудна. * Чадварыг 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 чиглэл = зорилго.шугам. Direction.value; var зай = зорилго.шугам. Зай.үнэлгээ; var unit = aim.slots. Unit.value; var validDirections = ["урагш", "урагш", "арагш", "арагш", "баруун", "зүүн", "дээш", "доош", "шулуун", "урагш", "шууд урагш"); var validUnits = ["хөл", "хөл", "метр", "метр", "хашаанд", "ярд"]; repromptText = "Хэр хол явах, ямар чиглэлд явахыг надад хэлээрэй."; var fail = худал; // validate inputs if (! (parseInt (distance)> = 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 (unit) == -1) {speechOutput = "Таны аялахыг хүсч буй нэгжийг би ойлгосонгүй."; амжилтгүй = үнэн; ctx.succeed (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 = худал; var speechOutput = ""; repromptText = "Нисгэгчгүй онгоцонд ямар тушаал өгөхийг надад хэлээч."; var task = зорилго.llots. 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 = null; var sessionAttributes = {}; var shouldEndSession = худал; var speechOutput = ""; repromptText = "Дроныг хэрхэн эргүүлэхийг хүсч байгаагаа надад хэлээрэй."; var чиглэл = зорилго.шугам. Direction.value; var validDirections = ["баруун", "зүүн", "эргэн тойронд"]; if (validDirections.indexOf (чиглэл) == -1) {speechOutput = "Би эргэлтийн чиглэлийг ойлгож чадсангүй."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)))); } өөр {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.succcess (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("алдаа", (функц (алдаа, олгосон) {console.log ("MQTT CLIENT ERROR !!" + err);})); }

// --------------- Бүх хариултыг бүтээдэг туслахууд -----------------------

buildSpeechletResponse функц (гарчиг, гаралт, repromptText, shouldEndSession) {буцах {outputSpeech: {type: "PlainText", text: output}, card: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {төрөл: "PlainText", текст: repromptText}}, shouldEndSession: shouldEndSession}} функц buildResponse (sessionAttributes, speechletResponse) {буцах {хувилбар: "1.0", sessionAttributes: sessionAttributes, хариулт: speechletResponse}}

Зөвлөмж болгож буй: