İçindekiler:

IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone: 6 Adım (Resimlerle)
IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone: 6 Adım (Resimlerle)

Video: IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone: 6 Adım (Resimlerle)

Video: IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone: 6 Adım (Resimlerle)
Video: CS50 2013 - Week 10, continued 2024, Kasım
Anonim
Image
Image
IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone
IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone
IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone
IoT ve AWS ile Alexa Ses Kontrollü Raspberry Pi Drone

Selam! Benim adım Arman. Massachusetts'ten 13 yaşında bir çocuğum. Bu eğitim, başlıktan da anlaşılacağı gibi, bir Raspberry Pi Drone'un nasıl oluşturulacağını gösterir. Bu prototip, dronların nasıl geliştiğini ve gelecekte ne kadar büyük bir rol oynayabileceklerini gösteriyor. 10 yıl sonra uyandığımı ve bir drone'dan benim için kahvaltı hazırlamasını istediğimi kesinlikle görebiliyorum. Drone, çalıştırmak için Amazon Alexa, Amazon Web Services, IoT (Nesnelerin İnterneti) ve en önemlisi bir Raspberry Pi kullanıyor. Drone'ları ve her gün nasıl geliştiklerini göstermek ve bilgilendirmek içindir. Umarım başarılı olursunuz ve bu süreçte dronlar hakkında bilgi edinirsiniz. İyi şanslar ve okuduğunuz için teşekkürler. -Armaan

Gereçler

Prototipi oluşturmak için çeşitli donanım ve yazılım ihtiyaçları vardır. Drone Dojo'nun çevrimiçi eğitimini kullanarak drone'u oluşturdum ve listelenen teknolojileri entegre ettim. Drone için parça listesini burada bulabilirsiniz:

Drone Parça Listesi

Yazılım gereksinimleri:

  • Amazon Web Hizmetleri
  • Dizüstü bilgisayar
  • Görev Planlayıcı Yazılımı
  • Balena Etcher
  • Raspbian Dosyalı MicroSD Kart burada bulundu
  • Amazon Alexa, fiziksel veya sanal

Adım 1: Parçaları Toplama ve Anlama

Parçaları Toplama ve Anlama
Parçaları Toplama ve Anlama

Tedarik listesinde belirtilen her parça gereklidir ve bu nedenle her parçanın net bir şekilde anlaşılması gerekir. Parçaları çevrimiçi olarak bulabilir ve toplandıktan sonra okumaya devam edebilirsiniz. Parçaların tam olarak anlaşılması için The Drone Dojo'nun bir çalma listesi burada bulunabilir. Youtube kanalımda 4 dakikalık anlatıma buradan ulaşabilirsiniz. İHA'lara gelince, çoğu insanın düşündüğünün aksine, tek parçalar sadece motorlar ve pervaneler değildir. Aşağıda her bölümün temel amaçları verilmiştir.

Emlid Navio2 ile Raspberry Pi

Bu kısım hemen hemen merkezi bir işlemci ve drone'nun ana noktası. Raspberry Pi, Navio2'ye PWM (Darbe Genişliği Modülasyon Sinyalleri) aracılığıyla dronun diğer bölümlerine yürütmesi için komutlar gönderen bir bilgisayarın CPU'su gibi davranır.

2. ESC'ler (Elektronik Hız Kontrol Cihazları)

Bu sarı kısımlar çerçevenin altında bulunur. Her motor için bir tane olmak üzere Navio'ya 4 adet takılıdırlar. PWM sinyallerini aldıktan sonra motorları döndürür ve uçuşa başlarlar.

3. Motorlar

Motorların çok fazla açıklamaya ihtiyacı yok çünkü muhtemelen onlara aşinasınız. İtki oluşturmak için pervaneleri döndürür ve döndürürler.

4. Pervaneler

Pervaneler, dronun uçması için itme kuvveti yaratır. Aracı kaldırmak için motorlarla aynı yönde dönerler.

5. Pil ve Güç Modülü

LiPo Pil, güç modülünü kullanarak tüm drone'a çerçeve üzerinden güç sağlar. Yaklaşık 15-20 dakikalık uçuş süresi sağlar ve güç kaynağı görevi görür.

6. GPS

GPS, drone'nun konumunu belirlemek için uydularla iletişim kurar. Yükseklik, enlem ve boylamı belirler. Geofencing, ara noktalar ve ayrıca belirli pozisyonlara veya yönlere hareket etmek için kullanılabilir.

7. Telemetri Modülü

Telemetri modülü, dronumuzu izlenecek bir yer kontrol istasyonuna, bizim durumumuzda Mission Planner'a bağlar.

8. PPM Kodlayıcı ile birlikte RC Kontrol Cihazı ve Modülü

RC Kontrolörü, drone'yu manuel olarak yönlendirmek için sinyalleri ve komutları RC Modülüne iletmek için radyo kullanır. PPM Kodlayıcı, Navio + RPI'nin işlemesi ve yürütmesi için bu sinyalleri çevirir.

9. Çerçeve

Bu kırmızı beyaz çerçeve, diğer parçaların yerleştirilmesi için bir taban veya platform görevi görür. Çerçeve aerodinamik ve hafiftir, bu nedenle drone yapımız için mükemmeldir.

Artık her parçanın bilgisi ile nihayet drone'u inşa edebiliriz! Bir sonraki adıma doğru!

Adım 2: Drone'un Montajı

Drone Montajı
Drone Montajı

Bu adım muhtemelen fiziksel çaba açısından en zor olanıdır. Yardım için başka birine sahip olmanızı veya parça listesindeki yardım eli kullanmayı denemenizi öneririm. Süreç burada gösterilmek için çok uzun, bu yüzden Drone Dojo tarafından kullandığım başka bir bağlantı vereceğim.

Ahududu Pi Drone İnşa Etme

Yine, çok fazla ayrıntıya girmeyeceğim için, her adımın temellerini vurgulayacağım.

1. Sarf Malzemelerinizi Düzenleyin - Materyallerimizi toplayın ve kolayca erişilebilir olduklarından emin olun

2. Yapınızı Planlayın - Yapacağınız şeyin bir planını yapmak için parçalarınızı çerçeve üzerinde düzenleyin

3. Lehimleme İşi - Bu, tek başına yapılması biraz zor olan iştir. Motorlarla birlikte gelen altın mermi konektörlerini ESC'lere lehimlemelisiniz. Ardından, çerçevenin alt kısmını almalı ve ESC'leri alt çerçeveye veya Güç Dağıtım Kartına lehimlemelisiniz. Pil Modülü ayrıca Güç Dağıtım Kartına lehimlenecektir.

4. Çerçeveyi Kurma - Ardından çerçevenin üst kısmını kollarla birlikte vidalamalısınız. Daha sonra üzerine Raspberry Pi'yi istediğiniz şekilde yapıştırabilirsiniz.(Ben koli bandı kullandım). Ardından ESC'leri fermuarlı kollara sabitleyebilirsiniz. Şimdi neredeyse bitirdik.

5. RC Denetleyicisini Alıcıya Bağlama - Bir ESC kullanarak RC Denetleyicisini bağlamak için yukarıdaki çalma listesindeki talimatları izlemeyi deneyin.

6. Çerçevedeki Parçaların Sonlandırılması - Telemetri modülündeki koli bandı veya kayışı çerçeveye takın. PPM Kodlayıcıyı bir kola da bantlayın. Artık ESC'leri ve PPM Kodlayıcıyı Navio'ya bağlayabilirsiniz.

7. GPS Yuvası + Pil - GPS Bağlantısını çeşitli vidalar ve parçalarla birleştirin. Fermuarları kullanarak GPS'i Çerçeveye takın. Kırılganlığı nedeniyle mutlaka GPS Bağlantısını kullanmadım, ama bu size kalmış. Ardından, pili Güç Dağıtımı arasına yerleştirebilirsiniz. Pano. Güç modülünü de çerçeveye bağladım ve bantladım. Artık donanımınız hemen hemen kuruldu. Şimdi beklediğimiz bölüm geldi!

8. Pervanelerin Montajı!!! - Oynatma listesinde belirtilen çizelgeyi kullanarak pervaneleri sıkabilirsiniz. Ardından ESC'leri motorlara bağlayabilirsiniz ve sonunda drone'u inşa etmeyi bitirdik.

Sırada yazılım var, devamı!

3. Adım: Raspberry Pi ve GCS'yi Yapılandırma (Görev Planlayıcı)

Raspberry Pi ve GCS'yi Yapılandırma (Görev Planlayıcı)
Raspberry Pi ve GCS'yi Yapılandırma (Görev Planlayıcı)

Yine, son adımdan itibaren oynatma listesinde daha ayrıntılı talimatlar bulabilirsiniz. Ancak, muhtemelen RasPi'yi nasıl kuracağınızı biliyorsunuzdur. Ama bu sefer başsız yapıyoruz. İşletim sistemini Navio OS web sitesinden MicroSD karta yazmak için Balena Etcher'ı kullanın. Bilgisayarınıza takılıyken, notepad++ kullanarak wpa sağlayıcısına gidin. Bundan sonra, Raspberry Pi'nin WiFi'nize bağlanması için ssid ve şifreyi girin. Ardından SSH adlı bir dosya eklemelisiniz. Bu, Komut Satırı veya başka bir yöntemle olabilir. Artık SSH'ye geçebiliriz. Komut istemini veya Putty'yi kullanabilirsiniz. Benim durumumda bağlanmak için komut istemini kullandım ve "ssh pi@navio" yazdım veya IP adresini ve ssh'yi bu şekilde bulabilirsiniz. Bağlandıktan sonra Navio'yu kurmak ve yapılandırmak için bu videoyu kullanın. Telemetriyi kurmak için önce Raspberry Pi'de bir düzenleme yapmalısınız. Düzenlemeyi yapmak için bunu takip edin ve Mission Planner'a bağlanmayı deneyin. Telemetri çalışmazsa, düzenlemeyi geri alabilir ve GCS (dizüstü bilgisayar gibi Yer Kontrol İstasyonu) IP'nizi girerek bir UDB bağlantısı kullanarak bağlanabilirsiniz. Mission Planner'a bağlandıktan sonra, dronun tüm parçalarını kalibre etmek için kurulum sihirbazını kullanabilirsiniz. Yardıma ihtiyacınız olursa çalma listesine tekrar bakın. Genellikle, her kurduğunuzda, neredeyse her zaman bir hata olur. Sorun giderme, bu projenin en büyük parçalarından biridir. Hatalarınızın farkında olmadığım için size orada gerçekten yardımcı olamam, ancak çoğu hata internetten yardım alarak düzeltilebilir. Her şey hazır olduktan sonra drone uçmaya hazır! RC kontrolörünüzü ve uçuş modlarınızı Mission Planner'da ayarlayabilirsiniz. Uçağı silahlandırmak için sol çubuğu en sağ altta beş saniye tutmaya çalışın. Drone çok kırılgan ve kırılması kolay olduğu için bir eğitime bakmadan uçmanızı tavsiye etmiyorum. Benim için, ilk uçtuğumda GPS Bağlantısını ve bazı pervaneleri kırdım. Ses kontrolüne ihtiyacınız yoksa burada durabilirsiniz. AWS hakkında bilgi edinmek ve drone'u programlamak için devam edin!

Adım 4: Drone'u Python ile Uçacak Şekilde Programlamak

Drone'u Python ile Uçacak Şekilde Programlamak
Drone'u Python ile Uçacak Şekilde Programlamak

AWS'ye girmeden önce, drone'u uçmak için nasıl programlayacağımızı anlamalıyız. İlk kurulumdan sonra, ses kontrolünü entegre etmek çok zor olmamalıdır. Anlamaya çalışabileceğimiz ilk şey, basit bir kalkış ve iniş programı yapmaktır. Raspberry Pi'yi kurduktan sonra içine tekrar SSH yapabiliriz. Oynatma listesine tekrar bakabilir veya talimatlarımı takip edebilirsiniz.

1. Önce Raspberry Pi üzerinde bir dizine ArduPilot Kaynak Kodunu indirelim

mkdir kaynağı

Ardından, git klonunu kullanarak dosyaları GitHub'dan alın

git klonu -b Copter-3.6.11

Şimdi /src/ardupilot'a gidelim

cd kaynağı

cd ardupilot

Şimdi kaynak dosyaları başlatalım

git alt modül güncellemesi --init --recursive

2. Ardından, Raspberry Pi'deki firmware'i derlememiz gerekiyor.

Sonraki adımları gerçekleştirmeden önce /src/ardupilot/'a cd ile gittiğinizden emin olun.

Ardından, özellikle Navio'yu kullanarak yapılandırmak için

./wafconfig --board=navio2

Sonra ile derleyebilirsiniz

./waf --targets bin/arducopter

3. Artık kaynak kodunu Navio'ya yükleyebiliriz.

İlk önce doğru dizine gidelim.

cd/etc/systemd/system

Ardından dosyayı düzenleyin

sudo vi arducopter.service

ExecStart yazdığı yere, zaten orada olanın yerine aşağıdakini ekleyin

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

Şimdi, ardupilot kaynak kodunu eyleme geçirmek için kullanabiliriz

sudo systemctl arka plan programı yeniden yükleme

O zaman ile yeniden başlatabiliriz

sudo systemctl arducopter'i yeniden başlat

Son adımla nihayet drone'umuza ArduPilot kurulumunu tamamladık.

4. DroneKit'i Yükleme

DroneKit, drone'u uçacak şekilde programlamak için kullanacağımız yazılımdır. Kodun bir kısmını anlamak için belgeleri burada bulabilirsiniz. Bir script yazmadan önce paketi drone'umuza kurmalıyız.

Python paketini şu şekilde kurabiliriz:

pip kurulumu dronekit==2.9.1

Bu en yeni sürüm olabilir veya olmayabilir, ancak sorun gidermede yardımcı olabilmem için kullandığım sürümdür.

Kurulu olup olmadığını kontrol etmek için bir

pip dondurma | grep dronekit

Şimdi nihayet ilk python betiğimizi yapmaya hazırız

5. kalkış_and_land.py

UYARI! Kodu öğrenip anlayabilmeniz için temel bir python anlayışı oluşturmanızı öneririm. Programı kendiniz yazmak istiyorsanız bu videoyu izleyin.

##Önce bu kodu saklamak için bir dizin oluşturalım

cd dk ##Kendiniz yapmak istiyorsanız, bir program oluşturmak için vi takeoff_and_land.py ## kullanın

Aksi takdirde, ekli dosyaya bir göz atabilir veya bir dosya aktarım protokolü kullanabilirsiniz. Bu programı daha sonra deneyebiliriz. İlk önce bunun bir python dosyası olduğunu netleştirmek için kullanmamız gereken

chmod +x takeoff_and_land.py

Ardından, çalıştırmak için aşağıdaki kodu kullanmayı denemek için

python takeoff_and_land.py --connect 127.0.0.1:14550

İlk defa bende de işe yaramadı. Bir bağlantı zaman aşımı varsa, endişelenmeyin yapabileceğiniz bir şey var. Başka bir komut istemi açın ve ssh. Mavproxy adlı bir şey yüklemeyi deneyebilir ve çalıştırmayı deneyebilirsiniz. Bundan sonra, ikisini aynı anda çalıştırabilirsiniz. Bu, dronun bağlanmasına yardımcı olmalıdır. Bunu yaptıktan sonra, senin için bir meydan okumam var. Diğer programın(set_velocity_body.py) ne yaptığını ve nasıl çalıştırılacağını bulmaya çalışın. Yaparsan, iyi iş.

6. İleri!

Artık bu bilgiyi drone'umuzu ses kontrollü hale getirmek için kullanabiliriz. Alexa drone kontrolü, bu özelliklerin çoğunu ve daha fazlasını kullanır. İyi şanslar ve devamı!

Adım 5: Ses Kontrolünü Entegre Etmek için Amazon Alexa ve Amazon Web Servislerini Kullanma

Ses Kontrolünü Entegre Etmek için Amazon Alexa ve Amazon Web Hizmetlerini Kullanma
Ses Kontrolünü Entegre Etmek için Amazon Alexa ve Amazon Web Hizmetlerini Kullanma
Ses Kontrolünü Entegre Etmek için Amazon Alexa ve Amazon Web Hizmetlerini Kullanma
Ses Kontrolünü Entegre Etmek için Amazon Alexa ve Amazon Web Hizmetlerini Kullanma

Bu adım, daha az belgelenmiş olanlardan biridir. Bu, sorun gidermenin en zor olacağı anlamına gelir. Sadece işe almak yaklaşık bir ayımı aldı, belki daha fazla. Burada en önemli şey sabırlı olmaktır. Bu özellik, gerçek hayatta uygulanırsa yaşamı değiştirebilir. Alexa'ya kendin gitmek yerine senin için yiyeceklerini almasını söyleyebilirsin. Bunu hayal et! O halde daha fazla uzatmadan konuya girelim!

1. Raspberry Pi'yi AWS IoT'de Şey Olarak Kaydetme

IoT'yi (Nesnelerin İnterneti) kullanmak için bir şeye ihtiyacımız var. Bu yüzden önce AWS IoT'yi kullanmak için AWS Konsoluna giriş yapmamız gerekiyor. Ardından IoT Core'a gidin. Bir kez orada, Yönet'i tıklamalı ve ardından bir şey oluşturmalısınız. Bir isim ekledikten sonra bağlanmak için bir sertifikaya ihtiyacımız var. Tek tıklama sertifikasına tıklamanızı tavsiye ederim. Ardından sertifika ekranını gördükten sonra, kök CA dahil her anahtarı indirdiğinizden emin olun. Sonra gidip şeyin yaratılmasını tamamlayabilirsiniz. Daha sonra bir politika oluşturmamız gerekiyor. IoT Core'a geri dönün. Ardından güvenli'ye tıklayın ve politikaları tıklayın. Ardından politika oluştur'a basın. Daha sonra bir ad oluşturabilir ve kaynaklar ekleyebilirsiniz. Eylem altına, iot* yazın ve kaynak altına * yazın ve etki için izin ver'e basın. O zaman şeyinize geri dönün ve sertifikanıza gidin. Burada bir kez, politikalara tıklayın. Daha sonra şey için politikanızı ekleyebilirsiniz ve her şey hazır!

2. Raspberry Pi'de Kod Ayarlama ve IoT ile etkileşim

Bu kısım için dosya aktarımı için bir SFTP İstemcisine (WinSCP kullandım) ihtiyacınız olacak. Raspberry Pi'mize bağlandıktan sonra, sertifika anahtarlarının elimizde olması gerekecek. Anahtar dosyalarını Raspberry Pi'ye aktarmalısınız. Ayrıca AWSIOTPythonSDK'yı Raspberry Pi'ye pip yüklemeniz gerekir. Ardından Raspberry Pi'deki dk dizinine gidin. IoT ile iletişim için verdiğim Alexa Drone Control dosyasını kullanıyorsunuz. Bu dosyayı kullanmak için, başlatmak için bir Shell Komut Dosyası kullandım. Dosyayı nedense yükleyemediğim için aşağıdaki kodu göstereceğim. Program test sırasında AWS IoT'den gelen mesajları almazsa endişelenmeyin! Alexa Drone Kontrol Dosyası Şeyinize uymayabileceğinden bu benim hatam olabilir. Bu nedenle, düzeltmek için AWS IoT'ye dönün ve sol panelde öğren'e basın. Talimatları izleyin ve yeniden başlatmanız gerekebilir. Bunun için üzgünüm. IoT'niz RasPi üzerindeki program ile çalışmaya başladığında verdiğim Alexa Drone Control dosyasından dronekit kodunu entegre edebilirsiniz. Daha sonra sertifikalarınızla birlikte verdiğim Shell Script'i ve IoT'den Rest API Endpoint'i kullanın.

# errorset'te betiği durdur -e # Kök CA dosyasının olup olmadığını kontrol edin, değilse indirin [! -f./root-CA.crt]; ardından printf "\nAWS'den AWS IoT Kök CA sertifikası indiriliyor…\n" curl https://www.amazontrust.com/repository/AmazonRoot…> > root-CA.crt fi # önceden kurulu değilse Python için AWS Device SDK'yı kurun Eğer [! -d./aws-iot-device-sdk-python]; ardından printf "\nAWS SDK kurulumu…\n" git klon https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# pakette indirilen sertifikaları kullanarak pub/sub örnek uygulamasını çalıştırın

printf "\npub/sub örnek uygulama çalıştırılıyor…\n" python dk/AlexaDroneControl.py --connect 127.0.0.1:14550 -e "IoT ARN'niz" -r root-CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

İsimler farklı olduğu için bu hepiniz için işe yaramaz. Dosyayı aktarırken kullandığım anahtarlar yerine anahtar adlarınızla değiştirin. Dosyayı aktarmadan önce dk'dan çıktığınızdan emin olun! Şimdilik yapmanız gereken tek şey bu olmalı.

3. Alexa Becerinizi Geliştirmek

Bu adım gerçekte olduğundan çok daha zor görünüyor. İlk olarak, Alexa Developer konsoluna giriş yapmalıyız. Ardından, sadece beceri oluştur'a basın. Yeteneğiniz için bir model seçmeniz istendiğinde, sadece özel düğmesine basın. Bir yöntem seçmeniz istendiğinde, kendi yönteminizi sağlayın. Adını istediğin gibi koyabilirsin. Şablon gerekmez, bu nedenle sıfırdan başlamayı seçin. Ardından, becerinizi oluşturduktan sonra, sağda bir kontrol listesi bulunan Beceri oluşturucu ekranına gelmelisiniz. Buradan, becerimizi geliştirmeye başlayabiliriz. Kontrol listesinde ilk önce çağrı adıdır. Alexa'ya yeteneğinizi kullanmasını söyleyeceğiniz şey bu. Benim için sadece çağrı adımı drone olarak koydum. Şimdi niyetlerimize, ifadelerimize ve yuvalarımıza gidebiliriz. Burada drone için 1 metre yukarı çık veya sağa veya aşağı git gibi komutlar verebilirsiniz. Benimki şimdilik sadece bir metre ile çalışıyor. Sol panelin altındaki JSON Düzenleyici'ye tıklayabilirsiniz. Daha sonra içine aşağıdaki kodu yapıştırabilirsiniz.

{ "interactionModel": { "languageModel": { "invocationName": "drone", "intents": [{ "name": "AMAZON. FallbackIntent", "samples": }, { "name": "AMAZON. CancelIntent", "samples": }, { "name": "AMAZON. HelpIntent", "samples": }, { "name": "AMAZON. StopIntent", "samples": }, { "ad": "AMAZON. NavigateHomeIntent", "örnekler": }, { "ad": "GoIntent", "yuvalar": [{ "ad": "Yön", "tür": "Yön" }, { "ad": "Mesafe", "tip": "AMAZON. NUMBER" }, { "ad": "Birim", "tip": "Birim" }], "örnekler": ["Git {Yön} {Mesafe} {Birim}", "Get {Mesafe} {Birim} {Yön}"] }, { "ad": "CommandIntent", "yuvalar": [{ "ad": "Görev", "tip": "Görev" }], "örnekler": ["Drone {Görev} komutu ver"] }, { "ad": "TurnIntent", "yuvalar": [{ "ad": "Yön", "tür": " Yön" }, { "ad": "Döndürme", "tip": "AMAZON. NUMBER" }], "örnekler": ["Dönüş {Yön} {Döndürme} derece"] }], "tipler": [{ "ad": "Yön", "değerler": [{ "ad": { "değer": "Düz", "eş anlamlılar": ["İleri ards", "İleri"] } }, { "ad": { "değer": "Geri", "eş anlamlılar": ["Geri", "Geri"] } }, { "ad": { "değer": "Sağ" } }, { "ad": { "değer": "Sol" } }, { "ad": { "değer": "Aşağı" } }, { "ad": { "değer": "Yukarı " } }] }, { "ad": "Birim", "değerler": [{ "ad": { "değer": "Ölçerler", "eş anlamlılar": ["Sayaç"] } }, { "ad": { "değer": "Yards", "eş anlamlı": ["Yard"] } }, { "ad": { "değer": "Ayak", "eş anlamlı": ["Ayak"] } }] }, { "ad": "Görev", "değerler": [{ "ad": { "değer": "Arazi" } }, { "ad": { "değer": "Tut" } }, { "ad": { "değer": "Kal" } }, { "ad": { "değer": "RTL", "eş anlamlılar": ["Başlatmaya Dön"] } }] }] } } }

Kodu JSON Editörüne yapıştırdıktan sonra, kontrol listesinin üçüncü adımına tıklayabilirsiniz ve bu sizin için etkileşim modelinizi oluşturacaktır. Bu adımla şimdilik işiniz bitmiş olacak. Uç nokta yuvasını şimdilik boş bırakabilirsiniz!

Adım 4: Lambda İşlevinizi Oluşturma

Şimdi, bu adım, kendiniz için çözmeniz gereken bir adımdır. Alexa Skill'e nasıl bağlayacağınızı size anlatacağım, ama bunu kendiniz kodlamanız gerekecek. Bu nedenle, önce AWS yönetim konsoluna gidin. Ardından Lambda'ya gidin. Daha sonra istediğiniz gibi adlandırarak bir işlev oluşturabilirsiniz. Sıfırdan yazdığınızdan emin olun ve çalışma zamanını istediğiniz programlama dili yapın. Node.js kullandım. Alexa Skill'i eklemek için bir tetikleyici ekleyin ve Alexa Skills Kit(ASK) öğesini seçin. Lambda ARN'nizi kopyalayın ve Alexa Skill'e geri dönün. Şimdi uç noktaya gidin. ARN'nizi yapıştırabilir, kaydedebilir ve yeni bir model oluşturabilirsiniz. Ardından, Alexa Skill ID'yi alın ve Lambda'da size sorduğu tetikleyici bölümüne yapıştırın. Ardından, Lambda'yı aşağı kaydırın ve temel ayarları bulun ve zaman aşımını 10 saniye yapın. Şimdi, kodu bulmak size kalmış. İpuçları için aşağıdaki web sitelerini kullanabilirsiniz.

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

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

ve eklediğim dosyayı kullanabilirsiniz, ancak eksik ve çalışmayacak.

/** * Amazon Alexa, Lambda, 2metri MQTT kullanarak APM / Pixhawk quadcopter'ınızı sesinizle kontrol edin.*/ var awsIot = require('aws-iot-device-sdk'); var config = require("./config"); var deviceName = "EchoDroneControl"; // bu aygıt gerçekten denetleyicidir 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 = boş; var client = null; // Gelen isteği türe göre yönlendirin (LaunchRequest, IntentRequest, vb.) İsteğin JSON gövdesi event parametresinde sağlanır. export.handler = function (olay, bağlam) { try { console.log("event.session.application.applicationId=" + event.session.application.applicationId); ctx = bağlam; if (event.session.application.applicationId !== app_id) { ctx.fail("Geçersiz Uygulama Kimliği"); } istemci = awsIot.device(mqtt_config); client.on("connect", function(){ console.log("AWS IoT'ye Bağlı"); // geri arama(); });

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("İşleyicide İSTİSNA: " + e); ctx.fail("İstisna: " + e); } }; /** * Oturum başladığında çağrılır. */ function onSessionStarted(sessionStartedRequest, session) { console.log("onSessionStarted requestId=" + sessionStartedRequest.requestId + ", sessionId=" + session.sessionId); }

/**

* Kullanıcı ne istediğini belirtmeden beceriyi başlattığında çağrılır. */ function onLaunch(launchRequest, session, callback) { console.log("onLaunch requestId=" + launchRequest.requestId + ", sessionId=" + session.sessionId); // Becerinizin lansmanına gönderin. getWelcomeResponse(geri arama); } /** * Kullanıcı bu beceri için bir amaç belirttiğinde çağrılır. */ function onIntent(intentRequest, oturum) { //, geri arama) { console.log("onIntent requestId=" + aimRequest.requestId + ", sessionId=" + session.sessionId); var Niyet = IntentRequest.intent, IntentName = IntentRequest.intent.name; konsol.log("string İSTEK =" + JSON.stringify(intentRequest)); var geri arama = null; // Becerinizin amaç işleyicilerine gönderin if ("GoIntent" === aimName) { doGoIntent(intent, session); } else if ("CommandIntent" === niyetAdı) { doCommandIntent(intent, oturum); } else if ("TurnIntent" === niyetAdı) { doTurnIntent(intent, oturum); } else if ("HelpIntent" === niyetAdı) { getWelcomeResponse(); } else { "Geçersiz niyet" atmak; } } /** * Kullanıcı oturumu sonlandırdığında çağrılır. * Beceri shouldEndSession=true döndürdüğünde çağrılmaz. */ function onSessionEnded(sessionEndedRequest, session) { console.log("onSessionEnded requestId=" + sessionEndedRequest.requestId + ", sessionId=" + session.sessionId); // Buraya temizleme mantığını ekleyin } // --------------- Becerinin davranışını kontrol eden işlevler -------------------- --- function getWelcomeResponse() { // Oturumu bazı niteliklere sahip olacak şekilde başlatmak istiyorsak, bunları buraya ekleyebiliriz. var sessionAttributes = {}; var cardTitle = "Hoş Geldiniz"; var konuşmaOutput = "DRONE CONTROL'e Hoş Geldiniz. "; // YAPILACAKLAR: drone çevrim içi mi çevrim dışı mı? Çevrimiçiyse, SİLAHLI mı? var repromptText = "Drone komuta hazır."; var mustEndSession = false; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, ShouldEndSession))); } /** * GO amacını işler. */ function doGoIntent(intent, session, callback) { // var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttributes = {}; var mustEndSession = false; var konuşmaOutput = ""; var yön = aim.slots. Direction.value; var mesafe = niyet.slots. Distance.value; var birim = niyet.slots. Unit.value; var validDirections = ["ileri", "ileri", "geri", "geri", "sağ", "sol", "yukarı", "aşağı", "düz", "ileri", "düz ileri"]; var validUnits = ["foot", "feet", "metre", "metre", "yard", "yard"]; repromptText = "Bana ne kadar uzağa ve hangi yöne gideceğimi söyle."; var başarısız = yanlış; // girişleri doğrula if (!(parseInt(mesafe) >= 1)) { konuşmaOutput = "Seyahat etmemi istediğin mesafeyi anlayamadım."; başarısız = doğru; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, ShouldEndSession))); } if (validDirections.indexOf(direction) == -1) { konuşmaOutput = "Seyahat etmemi istediğiniz yönü anlayamadım."; başarısız = doğru; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, ShouldEndSession))); } if (validUnits.indexOf(unit) == -1) { konuşmaOutput = "Seyahat etmemi istediğiniz birimi anlayamadım."; başarısız = doğru; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, ShouldEndSession))); } if (!fail) { var cardTitle = "Drone gidiyor " + yön + " " + mesafe + " " + birim; konuşmaOutput = "Gidiyor" + yön + " " + mesafe + " " + birim; mqttPublish(intent, sessionAttributes, cardTitle, SpeakingOutput, repromptText, shouldEndSession); } }

function doCommandIntent(niyet, oturum, geri arama) {

// var cardTitle = "Drone COMMAND…"; var repromptText = null; var sessionAttributes = {}; var mustEndSession = false; var konuşmaOutput = ""; repromptText = "Bana dronun komutunun ne olduğunu söyle."; var görev = aim.slots. Task.value; var validTasks = ["başlat", "kara", "r.t. l.", "beklet", "kal", "dur", "başlatmaya geri dön", "iptal"]; if (validTasks.indexOf(task) == -1) { konuşmaOutput = "Komutu anlayamadım. "; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, ShouldEndSession))); } else { var cardTitle = "Drone komutunun yürütülmesi" + görev; konuşmaOutput = "Komut yürütülüyor" + görev; mqttPublish(intent, sessionAttributes, cardTitle, konuşmaOutput, repromptText, shouldEndSession); } }

function doTurnIntent(niyet, oturum, geri arama) {

// var cardTitle = "Drone Turn…"; var repromptText = null; var sessionAttributes = {}; var mustEndSession = false; var konuşmaOutput = ""; repromptText = "Drone'u nasıl çevirmek istediğinizi söyleyin."; var yön = aim.slots. Direction.value; var validDirections = ["sağ", "sol", "etrafta"]; if (validDirections.indexOf(yön) == -1) { konuşmaOutput = "Dönüşün yönünü anlayamadım."; ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, ShouldEndSession))); } else { var cardTitle = "Drone dönüşü" + yön; konuşmaOutput = "Dönüş" + yön; mqttPublish(intent, sessionAttributes, cardTitle, SpeakingOutput, repromptText, shouldEndSession); } }

function mqttPublish(intent, sessionAttributes, cardTitle, konuşmaOutput, repromptText, shouldEndSession)

{ var strIntent = JSON.stringify(niyet); konsol.log("mqttPublish: AMACI metin = " + strIntent); // client.publish("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish(config.topic, strIntent, false); istemci.end(); client.on("close", (function () { console.log("MQTT CLIENT CLOSE - başarıyla tamamlandığını düşünüyor. "); ctx.succeed(buildResponse(sessionAttributes, buildSpeechletResponse(cardTitle, konuşmaOutput, repromptText, shouldEndSession))); })); client.on("hata", (işlev (hata, verildi) { console.log("MQTT İSTEMCİ HATASI!! " + hata); })); }

// --------------- Tüm yanıtları oluşturan yardımcılar ------------

function buildSpeechletResponse(title, output, repromptText, shouldEndSession) { return { outputSpeech: { type: "PlainText", text: output }, kart: { type: "Basit", başlık: başlık, içerik: çıktı }, yeniden bilgi istemi: { outputSpeech: { type: "PlainText", text: repromptText } }, ShouldEndSession: ShouldEndSession } } function buildResponse(sessionAttributes, konuşmaletResponse) { return { version: "1.0", sessionAttributes: sessionAttributes, yanıt: konuşmaletResponse } }

Önerilen: