資料介紹
描述
我家里有 Alexa,我的兩個孩子喜歡樂高積木。我從沒想過我可以做些什么來幫助我提高我的開發技能,并且可以讓我的孩子從如此有趣的角度看待我的工作。他們總是告訴我他們想玩樂高機器人,我不會說開發這個解決方案提供的所有功能很容易,所以我不得不告訴他們構建偉大的東西需要時間。現在我看到他們在玩它,我知道這個項目不知何故對他們產生了影響,而不僅僅是對我。
這個項目有兩個主要部分。一個是Alexa技能,一個是Lego Mindstorms機器人。讓我們在下面看看它們。
ALEXA技巧
該技能是在定義了意圖和槽的 Alexa 開發控制臺中開發的。
要創建技能,請登錄 Alexa 開發控制臺并單擊創建技能。
為其命名,選擇自定義模型,并選擇提供您自己的后端資源,因為我們將使用我們自己的 Lambda 函數而不是 Alexa 托管技能功能。
在您創建的技能中粘貼您將在提供的 GitHub 存儲庫中找到的 json 技能模型定義并保存模型。三種不同的語言有三種 json 模型。
技能的服務端點是 AWS Lambda 函數。在端點部分,您將需要引入 Lambda 函數的 ARN(請參閱下面的 lambda 函數創建部分),并且您將需要使用可在此處找到的技能 ID。
Custom Interface Controller 接口和 Alexa Presentation Language (APL) 接口已啟用,可以與 Alexa Gadget (Lego Mindstorm) 通信,并管理 Amazon Echo 顯示(如果設備有顯示)。
語言和聲音
這是一項自定義 Alexa 技能,提供兩種語言版本,即英語(美國和英國)和西班牙語 (ES)。
語言英語(美國)和英語(英國)的技能模型定義相同。西班牙語 (ES) 中的技能具有相同的意圖和槽類型,但示例話語被翻譯,因為槽值同義詞保持相同的槽值。這樣,當從 Alexa 設備接收指令時,我們可以對所有語言使用相同的 Lambda 函數處理程序。
我只介紹了西班牙語,但可以使用相同的方法添加任何其他語言。
Lambda 函數的語音文件夾中有兩個 json 文件,其中包含英語 (en-US.json) 和西班牙語 (es-ES.json) 的 Alexa 語音表達式,Alexa 將回復用戶請求,或者樂高頭腦風暴事件。考慮到 Alexa 設備請求的“區域設置”屬性,將選擇這兩者之一,該屬性指示在 Echo 設備中選擇的語言。
回聲設備中有兩種主要聲音,一種是作為技能助手的每種語言的 Alexa 默認聲音,另一種是代表樂高機器人聲音的男性聲音(美國的 Justin,ES 的 Enrique 和英國的 Brian) .
交互模型:調用、意圖和槽
調用模型是英文的“lego battle”和西班牙文的“batalla de lego”。
定義了 12 個意圖和 14 個槽。
goSomewhere 意圖允許用戶在樂高戰場中移動機器人。機器人可以去 6 個地方,即家、直升機場、停車場、火車站、港口和顏色線。
機器人有 4 種武器可用,即槍、錘子、刀片和采摘器。changeTool intent 允許用戶告訴 Alexa 武器發生了變化,useTool intent 用于命令機器人對指定目標使用武器,或者在當前位置和方向使用武器,以防沒有目標定義。
findColor 意圖為用戶提供了讓機器人在顏色線中找到特定顏色的能力。
setSpeed 意圖允許用戶在慢速、正常或快速之間進行選擇。
setTarget 是定義機器人攻擊目標的意圖。定義了 5 個目標:飛機、船、拖拉機、樹和移動目標。
最后一個自定義 intent 是 remoteControl,它可以被觸發以在 echo 設備屏幕中打開遙控器,如果它有的話。使用該遙控器,用戶可以觸摸屏幕上使用 APL 渲染的不同箭頭,將機器人向前、向后、向左和向右移動 90o。
還有 5 個默認的內置意圖可用。普通嫌疑犯。
已經為每個意圖定義了示例話語,試圖涵蓋用戶可能提出這些請求以管理 Lego Battle 領域中的 Lego 機器人的許多可能方式。
定義了一組 14 種槽類型,以收集技能正常工作所需的相關槽,例如 placeToGo、finalTool、target、speed 和 colorFind,但其他一些類型用于涵蓋可能的不同用戶表達。
并非只有一個值對每個槽類型有效,定義了多個同義詞以涵蓋更多場景。
您可以在提供的 GitHub 存儲庫的 /lego/models/ 文件夾中找到技能的 json 定義。為特定的技能語言交互模型加載它們,保存并構建它們將使一切正常工作,一旦啟用了上述接口并連接了 Lambda 函數端點。
Lambda 函數端點
要創建 Lambda 函數,您需要登錄 AWS 控制臺 Lambda 服務并創建一個新函數。
選擇 Author from scratch,為其命名并單擊 Create function。
在下一個屏幕中,您需要單擊添加觸發器。在此屏幕中,您可以復制 Alexa 技能開發控制臺中需要的函數 ARN 來定義 Lambda 端點。
添加 Alexa Skill Kit 觸發器時,啟用技能 ID 驗證,以便只接受來自該技能的請求。可以在 Alexa 技能開發控制臺的端點部分找到此技能 ID。引入它并單擊添加。
在此之后,您可以部署可以在提供的 GitHub 存儲庫 (/lego/lambda/) 中找到的 nodeJs 代碼,然后一切都將在與 Alexa 技能相關的方面發揮作用。不要忘記安裝所需的節點模塊。“npm install”將安裝 package.json 中列為依賴項的所有模塊。
唯一缺少的部分是 Alexa 語音服務中的 Alexa Gadget 產品創建以及 Lego Mindstorms 構建和配置。在解釋之前,讓我們更深入地了解提供的 nodeJs 代碼片段。
在本地克隆 Github 存儲庫并使用 Visual Studio Code 或您首選的開發應用程序打開它。
樂高文件夾包含:
-
包含 2 個 APL 文檔的文檔文件夾將在 Alexa 設備屏幕中呈現。
?
?我們已經制造了所有可用的武器。
這是一個巨大的樂趣!
除此之外,我還添加了兩個傳感器:顏色傳感器和觸摸傳感器,因此 Track3r 現在能夠跟蹤顏色線中的顏色,并且當它在戰場上失去位置時也可以重置到原位。
這里有一些顏色傳感器如何連接到積木的圖片。
顏色傳感器擴展?一些其他圖像來解釋如何連接樂高機器人中的觸摸傳感器。
觸摸傳感器擴展?EV3程序塊設置
我已按照 LEGO MINDSTORMS 語音挑戰中的說明進行操作:設置頁面 ( https://www.hackster.io/alexagadgets/lego-mindstorms-voice-challenge-setup-17300f ) 以設置 EV3 開發環境并準備與 Echo 設備和 Alexa 配合使用的 EV3 程序塊。
下載 ev3dev 軟件,閃存 SD 卡并連接到 EV3 程序塊(在我的例子中使用電纜)。在 Visual Studio Code 中安裝 ev3dev-browser 擴展,您可以連接設備、發送工作區文件并使用 SSH 終端執行 python 程序。
上面提供的鏈接中的說明非常詳細。
Lego Mindstorms 中的藍牙存在一些已知問題,因此如果您在 EV3 程序塊中看不到藍牙,請嘗試重新啟動它并拔下所有連接的傳感器,如果它仍然無法正常工作,請嘗試重新刷新您的 SD 卡。
Python代碼
傳輸到 Ev3 Brick 并執行以通過藍牙從 Alexa Echo 設備接收控制指令的代碼具有以下結構:
EV3 Python代碼結構?有兩個文件夾:
-
images文件夾包含從https://sites.google.com/site/ev3devpython/learn_ev3_python/screen/bmp-image-collection 下載的 .bmp 圖像。我們的想法不是展示所有功能的所有代碼,而是解釋其中的一些功能,以便讓關于如何開發所有體驗的主要想法變得更加清晰。圖片中的代碼被簡化為最相關的代碼行,因此只是提供一個想法,建議在提供的 Github 存儲庫中查看完整代碼。
?
??在 Lambda nodeJs 函數中的 LaunchRequest 響應管理期間,Alexa 向 Ev3 brick 發送一個帶有特定令牌的 CustomInterfaceController.StartEventHandler 指令,以使 brick 中的事件能夠發送到帶有該令牌的 Alexa Echo 設備并被其接受。
打開技能時出現的另一個功能是 APL 文檔渲染。我正在使用一個名為 sequence.json 的 APL 文檔,可以在文檔文件夾中找到它。主要屬性如下所示。
該文檔是一個帶有容器的模板,容器具有水平序列組件,圖像組件通過數據源中的 listImages 數組綁定到文檔。另一個容器包含將在 SpeakItem 命令中使用的不可見文本組件。
?在 Lego Ev3 Brick 中執行 lego.py 程序時,會初始化所有電機、傳感器、Ev3 功能和 python 變量。之后是一段簡短的圖像和一個顯示機器人還活著的命令。
創建 show_image 函數是為了方便在 Ev3 Brick 液晶屏幕上顯示圖像,從圖像文件夾中獲取圖像。
???在導入了 ColorSensor 類并創建了它的一個實例之后,與顏色相關的變量被初始化,并創建了一個線程來管理顏色搜索例程。
當接收到類型為“findColor”的自定義指令時,顏色將保存在變量中并調用 findColor 函數。在此函數中,機器人移動到顏色線并將 findColorIOn 變量設置為 True,使代碼執行 while 例程以在與上述線程關聯的 _find_color 函數中搜索指定的顏色。機器人開始沿著顏色線移動。如果檢測到顏色,則電機停止,并向 Alexa 發送 FindColor 事件,并在負載中檢測到顏色。如果未找到顏色,則發送相同的事件,但在這種情況下,顏色“無”作為有效負載。
?讓我們看一下管理 findColor Intent 的 Lambda nodeJs 代碼。
一旦收到 findColor 意圖,就會計算響應,并構建指令類型 findColor 以發送到小工具。
??機器人位置和場地中的不同位置使用 X 和 Y 軸值定義。方向是介于 0 和 2*pi 弧度之間的值。機器人從位置 (1, 1) 和方向 0 開始,這也是起始位置。
從初始點到目標點的移動距離是 X 軸行程和 Y 軸行程的斜邊。使用反正切計算方向,然后要進行的轉彎是方向與當前方向的差值。
一旦計算出這一點,就會執行移動,開始轉向面向目標點,向前移動計算出的距離,然后再次轉向以進入目標位置位置方向。
一旦到達那個新位置,就會調用 setPosition 函數來為下一次移動保留新位置。
轉彎和移動功能考慮了輪子的半徑和機器人輪子之間的距離。使用一些數學方程式可以計算出電機必須移動的度數。
setPosition 函數使用小工具類中定義的內部變量來保持機器人在場地中的最終位置。
關于負責 goSomewhere 意圖的 nodeJs 代碼,沒有什么新的可說的。
?讓我們看一下用于這些意圖的特定 python 和 nodeJs 代碼。
當武器是槍時,它會在不離開位置的情況下開火。只是方向發生了變化。
當定義的目標是移動目標時,機器人必須首先找出目標在哪里。在這種情況下,目標是紅外傳感器遙控信標。機器人反應的信標信號是通道 4 中的信標信號。
函數 facingTarget 計算信標的方向。由于紅外傳感器位于機器人的后部,因此我們將 pi 弧度與航向返回值相加,轉換為弧度。
距離考慮到大約有70cm的紅外范圍,所以紅外傳感器距離函數給出的值乘以7。
我只會評論更多關于 useTool nodeJs 代碼的內容,因為 setTarget 和 changeTool 意圖與已經解釋過的其他意圖相比沒有什么特別之處。
當收到 useTool 意圖并且用戶提供武器名稱和要執行的操作時,代碼會檢查這兩者是否相關聯,這樣您就不會嘗試發射錘子或砸碎槍支。
?在這種情況下,呈現的 APL json 文檔是 arrows.json。它是一個帶有背景圖像的容器和另一個帶有圍繞箭頭圖像的 TouchWrapper 組件的容器,這些組件發送以按下箭頭的方向作為參數的事件。
當用戶按下其中一個箭頭時,TouchWrapprer 中生成的事件將被發送并在收到時進行分析,以便將自定義指令發送到觸發移動動作的 Ev3 小工具。
RemoteControl 和 Touchevent 處理程序調用 getRemoteControl 和 getClicked 資源函數來獲取向用戶返回正確響應所需的信息,以及發送到小工具的指令。當用戶單擊按鈕時,機器人位置設置為“家,甜蜜的家”。
?在以下 python 代碼行中,您可以看到 TouchSensor 類是如何實例化的,以及管理被按下按鈕的線程是如何創建的以及它是如何工作的。
如果遙控器已被使用,則 remoteControl 變量的值為 True,然后,如果按下按鈕,位置將設置為主頁,HomeButton 事件將發送到 Alexa。
?InfraredSensor 類的一個實例被創建并用于定義按下通道 1 和通道 2 中的每個按鈕時需要觸發的內容。
這里模擬了您如何使用 FireTV 在電視中看到技能運行,但由于該小工具未通過藍牙連接到 FireTV,因此樂高機器人沒有提供任何響應。
?
-
images文件夾包含從https://sites.google.com/site/ev3devpython/learn_ev3_python/screen/bmp-image-collection 下載的 .bmp 圖像。我們的想法不是展示所有功能的所有代碼,而是解釋其中的一些功能,以便讓關于如何開發所有體驗的主要想法變得更加清晰。圖片中的代碼被簡化為最相關的代碼行,因此只是提供一個想法,建議在提供的 Github 存儲庫中查看完整代碼。
- LEGO EV3 Baby Yoda-Alexa控制的EV3機器人
- 由Mindstorms EV3和Alexa提供支持的LEGO Target Practice
- 由Alexa控制的Lego Mindstorms EV3機器人
- 使用LEGO MINDSTORMS EV3 Amazon Alexa構建的Shelly解決方案
- 基于DSP的自適應多通道有源噪聲控制算法 24次下載
- 440Hz窄帶(5Hz)聲控開關電路 38次下載
- 聲控繼電器驅動電路原理圖免費下載 29次下載
- 聲控延時燈的PCB原理圖免費下載 81次下載
- DSP在有源噪聲控制中有怎么樣的應用 11次下載
- 基于Lego顏色傳感器的尋線小車程序 204次下載
- 輔導學生安裝聲控開關
- sk-6聲控電路
- 聲控電路及制作
- 聲控彩燈電路及制作
- 聲控玩具貓電路及制作
- 聲控燈是如何做到聲控的呢 聲控燈的電路原理解析 6891次閱讀
- 聲控集成電路SK-2構成的聲控電子警犬電路 2619次閱讀
- 聲控電路BB一5構成的聲控開關電路 3869次閱讀
- SM401聲控集成塊構成的聲控閃光電路 3628次閱讀
- 聲控集成電路SL517構成的聲控開關電路 3754次閱讀
- 聲控燈的電路構成及工作原理分析 3.9w次閱讀
- 聲控燈電路中的常見故障有哪些 1.6w次閱讀
- 簡易聲控延時燈制作方法 1.4w次閱讀
- 大家的互動式聲控機器人 8812次閱讀
- 居民樓道聲控電路圖(六款聲控電路原理圖詳解) 17.8w次閱讀
- 聲控開關電路設計匯總(八款設計電路原理詳解) 10w次閱讀
- 簡易聲控開關電路圖_三線聲控開關接線圖_四線聲控開關怎么接線 12.2w次閱讀
- 基于DSP的聲控系統設計與實現 1324次閱讀
- 報曉聲控狗電路圖 2173次閱讀
- 聲控報警電路 2977次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多