電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Sky Finder:樂(lè)高Alexa小工具

Sky Finder:樂(lè)高Alexa小工具

2023-06-25 | zip | 14.51 MB | 次下載 | 免費(fèi)

資料介紹

描述

更新(26/7/2022):

此項(xiàng)目托管在 Amazon Lambda 上的代碼需要更新,目前無(wú)法運(yùn)行。

什么是天空查找器?

樂(lè)高一直致力于通過(guò)游戲發(fā)現(xiàn)和學(xué)習(xí)。使用這款 LEGO Mindstorms 小工具成為一名太空探險(xiǎn)家,并將 Alexa 變成您的宇宙私人向?qū)А?/font>Sky Finder 會(huì)向您展示天空中最有趣的恒星、行星甚至星系,而 Alexa 會(huì)告訴您有關(guān)它們的信息

無(wú)需昂貴的望遠(yuǎn)鏡即可在天空中看到許多令人興奮的事物,但如果沒(méi)有一些幫助則很難找到它們。該項(xiàng)目是一個(gè)樂(lè)高小工具,您可以使用標(biāo)準(zhǔn)的 Mindstorms EV3 套裝 (31313) 輕松拼搭,并發(fā)現(xiàn)從您的窗戶或后院可以看到的東西。

?

我為什么要建這個(gè)?

該項(xiàng)目參加了 hackster.io 上的 LEGO Mindstorms 語(yǔ)音挑戰(zhàn)賽。我想構(gòu)建一些有趣且原創(chuàng)的東西,而這些東西無(wú)法單獨(dú)使用 Alexa 或 LEGOMindstorms 完成。

Alexa 和樂(lè)高的結(jié)合非常適合這個(gè)項(xiàng)目。Alexa 提供了一個(gè)友好的界面來(lái)探索天空,Sky Finder 小工具會(huì)告訴你在哪里看。觀看屏幕后,您的眼睛需要一段時(shí)間才能適應(yīng)夜空的黑暗,因此語(yǔ)音界面是在深空和我們自己的太陽(yáng)系中定位數(shù)百個(gè)不同物體的完美方式。

它能做什么?

Sky Finder 知道從北半球和南半球可見(jiàn)的所有星座;天空中許多最有趣的星星;我們太陽(yáng)系中的所有行星;以及許多肉眼可見(jiàn)的深空天體,例如仙女座星系和昴宿星團(tuán)。

它還會(huì)建議從您的位置可見(jiàn)的天空中有趣的事物,并為您提供有關(guān)您正在查看的內(nèi)容的信息。

得益于亞馬遜 AWS 服務(wù)中可用的處理能力,Sky Finder 可以執(zhí)行定位恒星、行星和其他天體所需的復(fù)雜計(jì)算,而僅靠 EV3 brick 很難完成這些計(jì)算。

使其易于構(gòu)建

我想讓人們盡可能輕松地構(gòu)建項(xiàng)目,從中學(xué)習(xí)并根據(jù)需要擴(kuò)展項(xiàng)目。

  • 該小工具僅使用 LEGO Mindstorms EV3 套裝 (31313) 中的零件
  • 提供完整的樂(lè)高搭建說(shuō)明
  • 在 EV3 brick 上運(yùn)行的代碼和 Alexa 技能代碼都是用 Python 編寫(xiě)的
  • 技能代碼可以由 Alexa 托管,因此一切都可以在 Alexa Skills 控制臺(tái)中完成。

完整演練:如何構(gòu)建 Skyfinder

下面的演練包含有關(guān)如何制作您自己的 Skyfinder 的說(shuō)明及其工作原理的信息。如果您想在不了解其工作原理的情況下構(gòu)建它,只需按照編號(hào)說(shuō)明進(jìn)行操作即可。

構(gòu)建樂(lè)高小工具

1. 使用本頁(yè)底部示意圖部分中的完整搭建說(shuō)明搭建樂(lè)高小工具。

pYYBAGSBoWuARXJHAAD0tboZLuw176.png
?

2. 小工具完成后,使用 4 根電纜將電機(jī)傳感器連接到積木上。我建議如下:

使用 50 厘米電纜將顏色傳感器連接到 EV3 程序塊上的插座 1,確保電纜在 EV3 程序塊上方運(yùn)行。

使用 25 厘米的電纜將觸摸傳感器連接到插座 4。您可能需要暫時(shí)將傳感器與小工具分離,以便更容易插入。

使用 25 厘米的電纜將大型電機(jī)連接到插座 D,小心地在 EV3 程序塊和電機(jī)之間鋪設(shè)電纜。

使用 35 厘米電纜將中型電機(jī)連接到插座 C。

設(shè)置 ev3dev 構(gòu)建環(huán)境

3. 您需要將 ev3dev 操作系統(tǒng)安裝到您的 micro SD 卡上,從卡上啟動(dòng)您的 EV3 程序塊,并將 EV3 連接到 Visual Studio Code 編輯器。LEGO MINDSTORMS 語(yǔ)音挑戰(zhàn)團(tuán)隊(duì)在此處提供了一些分步說(shuō)明(除非您想了解更多信息,否則無(wú)需繼續(xù)執(zhí)行任何任務(wù))。

在 Alexa Developer Console 中注冊(cè)您的小工具

4. 接下來(lái)您需要在 Alexa 開(kāi)發(fā)者控制臺(tái)中注冊(cè)您的小工具。LEGO MINDSTORMS 語(yǔ)音挑戰(zhàn)團(tuán)隊(duì)再次提供了說(shuō)明。按照此處的步驟 1-10進(jìn)行操作,并記下Amazon IDAlexa Gadget Secret。

該軟件

pYYBAGSBoW6ANGsfAAESXIESZ10861.png
Sky Finder架構(gòu)
?

Sky Finder 由物理樂(lè)高硬件和兩個(gè)用 Python 編寫(xiě)的軟件程序組成。第一個(gè)(“Alexa 技能”)在亞馬遜的云服務(wù)器上運(yùn)行并處理來(lái)自 Echo 設(shè)備的語(yǔ)音命令,計(jì)算星星位置并創(chuàng)建一個(gè)有效載荷/命令,該有效載荷/命令被發(fā)送到 Sky Finder 小工具(通過(guò) Echo)以移動(dòng)電機(jī).

第二個(gè)軟件程序也是用 Python 編寫(xiě)的,在 EV3 程序塊上運(yùn)行。它通過(guò)藍(lán)牙將 Sky Finder 小工具連接到 Echo 設(shè)備,然后收聽(tīng)來(lái)自 Alexa 技能的命令,通過(guò) Echo 轉(zhuǎn)發(fā),并相應(yīng)地移動(dòng)電機(jī)。

在下一節(jié)中,我將介紹 Alexa skill 的一些主要功能,并解釋如何在 Alexa 開(kāi)發(fā)人員控制臺(tái)中進(jìn)行設(shè)置。

自定義 Alexa Skill - 設(shè)置

5. 要構(gòu)建新的 Alexa 技能,請(qǐng)轉(zhuǎn)到Alexa Developer Console ,根據(jù)需要登錄并單擊“創(chuàng)建技能”按鈕。

poYBAGSBoXGAExQ-AAB5d5K1vXQ468.png
?

6. 在下一個(gè)屏幕上,輸入您的技能名稱(Sky Finder 或您選擇的其他名稱)并選擇與您的 Echo 設(shè)備上的設(shè)置相匹配的語(yǔ)言/地區(qū)。接下來(lái)選擇Custom skill model 和Alexa-Hosted (Python) ,然后單擊Create Skill按鈕。

poYBAGSBoXSARv65AADxGZkiTbI533.png
?

7. 在最后一個(gè)屏幕上,選擇Hello World模板并單擊“選擇”按鈕以創(chuàng)建新技能。設(shè)置需要幾分鐘時(shí)間。

自定義 Alexa Skill - 交互模型

自定義 Alexa 技能包括一個(gè)語(yǔ)音交互模型,它將用戶的口頭輸入映射到Python 軟件中的類可以處理的意圖。

Sky Finder 接受兩個(gè)主要意圖:

  • ScanIntent:掃描部分天空以尋找有趣的物體,并告訴用戶它們是什么。(例如,您在南方能看到什么?)。
  • LocateIntent:定位天空中的特定物體(恒星、行星、星座等),讓小工具指向它并向用戶提供有關(guān)該物體的一些信息。(例如定位金星

語(yǔ)音交互模型還指定(或參數(shù)),其中包含上面兩個(gè)示例中以粗體顯示的羅盤(pán)方向或?qū)ο蟆?/font>

8. 首先我們需要啟用技能來(lái)使用我們的小工具,因此在“構(gòu)建”選項(xiàng)卡上,從左側(cè)菜單中選擇界面并啟用自定義界面控制器。

pYYBAGSBoXeAPAt0AACki74L5iw448.png
?

9. 單擊頁(yè)面頂部的保存接口按鈕。

pYYBAGSBoXmAWGxeAABAKsQ6myU368.png
?

10. 接下來(lái),從左側(cè)菜單中選擇JSON 編輯器。將本教程底部提供的 JSON 交互模型代碼下載到編輯器中,然后將文件拖放到編輯器上方的拖放區(qū)域。

poYBAGSBoXyAciQ0AADrbELMHyo929.png
?

11. 單擊屏幕頂部的保存模型按鈕,然后單擊構(gòu)建模型按鈕。構(gòu)建需要一分鐘左右的時(shí)間。您應(yīng)該會(huì)看到意圖(LocateIntent 和 ScanIntent)及其相應(yīng)的槽出現(xiàn)在屏幕左側(cè)。

單擊“意圖”以查看示例話語(yǔ),這些話語(yǔ)是用戶可能會(huì)說(shuō)出的觸發(fā)該意圖的示例。Alexa 的 AI 根據(jù)用戶所說(shuō)的內(nèi)容選擇最合適的話語(yǔ) - 他們不必說(shuō)出示例中列出的確切單詞。

pYYBAGSBoX-AJL_mAADp9DoMO-A175.png
?

單擊插槽類型以查看用戶可能會(huì)說(shuō)的羅盤(pán)方向或(天體)物體的名稱,以及同義詞。插槽值還包含一個(gè) ID,該 ID 將傳遞給唯一標(biāo)識(shí)對(duì)象的 Python 代碼。例如,如果您是美國(guó)人,您可能會(huì)詢問(wèn)“找到北斗七星”的技能,如果您是英國(guó)人,則可能會(huì)詢問(wèn)“找到犁”的技能,但除了這些信息之外,還有“UMa”(大熊座)的官方名稱作為 ID 傳遞。

pYYBAGSBoYGAN-SVAAAyWLLlqXc508.png
?

自定義 Alexa Skill - Lambda 函數(shù)

在本例中用 Python 編寫(xiě)的 Lambda 函數(shù)包含 Alexa 技能的所有主要處理邏輯。它由許多處理意圖的方法組成。@ 語(yǔ)法根據(jù) Alexa SDK 的要求將裝飾器應(yīng)用于類。所有技能都遵循相似的結(jié)構(gòu),因此您可以輕松調(diào)整此技能,或亞馬遜團(tuán)隊(duì)提供的適合您目的的技能,而不是完全從頭開(kāi)始編寫(xiě)。

12. 單擊開(kāi)發(fā)人員控制臺(tái)的“代碼”選項(xiàng)卡。

13.將lambda_function.py 、utils.pyrequirements.txt的內(nèi)容替換為本頁(yè)底部Code部分對(duì)應(yīng)文件的內(nèi)容。

注意:目前,請(qǐng)忽略代碼部分中標(biāo)記為“API 代碼”的同名文件

14. 右鍵單擊?? utils.py 下面的空間并選擇創(chuàng)建文件。

poYBAGSBoYOAKtmnAABI2YBH6Ls851.png
?

15.在 lambda 文件夾中創(chuàng)建一個(gè)名為data.py的新文件。

poYBAGSBoYaASMGAAAATDT0XL-4245.png
?

16.將本頁(yè)底部代碼部分的data.py文件內(nèi)容復(fù)制到新文件中。

17. 單擊保存按鈕保存您創(chuàng)建的文件,如果您想查看下面解釋的代碼,則單擊 lambda_function.py 選項(xiàng)卡。

pYYBAGSBoYmARcA4AAAlwLT4Op0790.png
?

啟動(dòng)請(qǐng)求

除了我們?cè)诮换ツP椭卸x的兩個(gè)意圖(ScanIntent 和 LocateIntent)之外,還有一些內(nèi)置的意圖需要處理。其中最重要的是 LaunchRequest,它在用戶打開(kāi)技能時(shí)調(diào)用(“Alexa,打開(kāi) Sky Finder”)。

@skill_builder.request_handler(can_handle_func=is_request_type("LaunchRequest"))
def launch_request_handler(handler_input: HandlerInput):

LaunchRequest 處理程序方法首先檢查 Alexa 小工具是否已連接到 Echo 設(shè)備。

system = handler_input.request_envelope.context.system
api_access_token = system.api_access_token
api_endpoint = system.api_endpoint
# Get connected gadget endpoint ID.
endpoints = get_connected_endpoints(api_endpoint, api_access_token)

如果小工具已連接,端點(diǎn) ID 將存儲(chǔ)在會(huì)話屬性中,以便我們將來(lái)可以將位置發(fā)送到小工具。

# Store endpoint ID for using it to send custom directives later.
logger.debug("Received endpoints. Storing Endpoint Id: %s", endpoint_id)
session_attr = handler_input.attributes_manager.session_attributes
session_attr["endpoint_id"] = endpoint_id

一般來(lái)說(shuō),每次用戶說(shuō)話時(shí)都會(huì)再次調(diào)用 lambda 函數(shù),因此我們需要在對(duì)話期間保留的任何變量都應(yīng)存儲(chǔ)在會(huì)話屬性中。

定位意圖

LocateIntent 是我們定義的自定義意圖,當(dāng)用戶要求 Sky Finder 在天空中定位某物時(shí)調(diào)用它。當(dāng)我們收到 YesIntent 時(shí),也會(huì)調(diào)用此處理程序方法。(稍后對(duì)此進(jìn)行更多解釋)。

@skill_builder.request_handler(can_handle_func=lambda handler_input:
is_intent_name("AMAZON.YesIntent")(handler_input) or
is_intent_name("LocateIntent")(handler_input))
def locate_intent_handler(handler_input: HandlerInput):

首先,請(qǐng)求處理程序嘗試獲取我們?cè)诮换ツP偷牟宀垲愋筒糠种兄付ǖ模ㄌ祗w)對(duì)象的唯一 ID,例如 UMa(大熊座)。

# Get the name of the object the user is trying to locate from the slot
slots = handler_input.request_envelope.request.intent.slots
try:
    # See if it's been matched to one of the specified values for this slot type in the interaction model
    object = slots["object"].resolutions.resolutions_per_authority[0].values[0].value.id

下一段代碼在我們定位對(duì)象時(shí)向用戶發(fā)送一個(gè)臨時(shí)響應(yīng)(“定位大熊座......”)我不會(huì)在這里詳細(xì)解釋它,除了說(shuō) SpeakDirective 是一種發(fā)送在 lambda 函數(shù)完成執(zhí)行之前響應(yīng) Echo 設(shè)備。

# Locate the object in space
az,alt,distance = utils.locate(object)

物體在天空中的位置使用方位角、高度坐標(biāo)指定。方位角在 0 到 359 度之間,對(duì)應(yīng)于羅盤(pán)方向。高度表示物體在天空中的高度,從地平線上的 0 度到頭頂正上方的 90 度。

pYYBAGSBoYuAI8u2AACIc8Nuzmw929.png
?

接下來(lái),處理程序準(zhǔn)備來(lái)自 Alexa 的語(yǔ)音響應(yīng),告訴用戶對(duì)象已被定位,并提供一些有趣的事實(shí)(如果我們有)。

# object found and visible with a defined distance
compass = utils.degrees_to_dir(az)
speak_output = "{} Located. {} is currently {} kilometers from your location.  {}  {}".format(radar_ping, name, distance, description, data.ASK_MESSAGE)

如果小工具已連接,我們會(huì)準(zhǔn)備一個(gè)負(fù)載(命令),其中包含 Echo 設(shè)備中繼到小工具的位置,指定我們保存到 LaunchIntent 處理程序中的會(huì)話屬性的端點(diǎn) ID。

if ("endpoint_id" in session_attr and object_located):
    payload = {
    "type": "move",
    "az": az,
    "alt": alt,
    }
    endpoint_id = session_attr["endpoint_id"]
    directive = build_send_directive(NAMESPACE, NAME_CONTROL, endpoint_id, payload)

最后,我們使用 Alexa SDK 中響應(yīng)生成器類的方法來(lái)構(gòu)建發(fā)送回 Echo 設(shè)備的數(shù)據(jù)結(jié)構(gòu)。

return (handler_input.response_builder
.speak(speak_output)
.ask("What do you want me to find?")
.add_directive(directive)
.response)

掃描意圖

當(dāng)用戶詢問(wèn)有關(guān)他們?cè)谔囟ㄌ炜諈^(qū)域中可以看到的內(nèi)容的信息時(shí),將調(diào)用 ScanIntent。

@skill_builder.request_handler(can_handle_func=is_intent_name("ScanIntent"))
def scan_intent_handler(handler_input: HandlerInput):

首先,技能從插槽中獲取用戶指定的羅盤(pán)方向。

# Get the compass direction the user has specified
slots = handler_input.request_envelope.request.intent.slots
try:
direction = slots["compass_direction"].resolutions.resolutions_per_authority[0].values[0].value.id

再一次,下一段代碼在我們進(jìn)行查找時(shí)向用戶發(fā)送一個(gè)臨時(shí)響應(yīng),然后我們調(diào)用一個(gè)函數(shù)返回該部分天空中突出物體的列表。

# Find a list of objects in our specified part of the sky
logger.info("Scanning sky in {}.".format(direction))
scan_list = utils.scan(direction)

接下來(lái),我們創(chuàng)建一個(gè)以逗號(hào)分隔的對(duì)象列表,供 Alexa 與用戶對(duì)話。為此,我們?cè)?data.py 文件中的 Python 字典中維護(hù)對(duì)象的常用名稱列表。

for object in scan_list:
    # Get list of proper names of objects from database
    spoken_list.append(data.OBJECT_DATA[object['name']]['name'])
    speak_output += utils.comma(spoken_list)

如果只找到一件物品,Alexa 會(huì)問(wèn),“你想讓我告訴你它在哪里嗎?”。對(duì)象名稱保存在會(huì)話屬性中。如果用戶回答“是”,則下次將觸發(fā)YesIntent ,這實(shí)際上是由LocateIntent處理程序處理的,該處理程序?qū)⒍ㄎ灰驯4嬖跁?huì)話屬性中的對(duì)象。

如果有多個(gè)對(duì)象,Alexa 會(huì)詢問(wèn)“您希望我定位哪一個(gè)?”。

if (len(scan_list) > 1):
    speak_output += ". Which one would you like me to locate? "
else:
    speak_output += ". Do you want me to show you where it is?"
    # save object ready for a possible 'yes' response from the user
    object_of_interest = scan_list[0]['name']
    session_attr = handler_input.attributes_manager.session_attributes
    session_attr["object_of_interest"] = object_of_interest

最后,構(gòu)建響應(yīng)并將其發(fā)送到 Echo 設(shè)備。

return (handler_input.response_builder
.speak(speak_output)
.ask("Do you want me to show you where they are?")
.response)

自定義 Alexa Skill - utils.py 和 data.py

Lambda 函數(shù)導(dǎo)入另外兩個(gè)文件:

utils.py包含許多實(shí)用函數(shù),包括查找恒星和行星位置的代碼。目前,這會(huì)調(diào)用外部查找 API 以避免必須將依賴項(xiàng)編譯到 Lambda 函數(shù)中。API 的代碼包含在本頁(yè)底部以供參考,但您不需要使用它。

data.py包含一個(gè) Python 字典,其中包含有關(guān)恒星、星座、行星和其他物體的信息,以及 Alexa 可能會(huì)向用戶發(fā)出的消息列表,例如用戶在技能啟動(dòng)時(shí)聽(tīng)到的歡迎消息。

自定義 Alexa 技能 - 指定緯度/經(jīng)度和測(cè)試

18、目前gadget的地理位置是在data.py文件中指定的。

# My latitude and longitude - NB no spaces
LAT = '51.5842N'
LON = '2.9977W'

要將其替換為您的位置,您可以使用 Google 查找附近城市的緯度/經(jīng)度。

poYBAGSBoY-AT5zoAACIVvkToxk408.png
?

在將其粘貼到代碼中之前,請(qǐng)刪除空格和度數(shù)符號(hào)。

19. 完成此操作后,單擊保存按鈕,然后單擊編輯器窗口上方的部署按鈕。

poYBAGSBoZOALTWpAABfywfxUxQ030.png
?

20. 要測(cè)試技能,請(qǐng)轉(zhuǎn)到開(kāi)發(fā)人員控制臺(tái)中的“測(cè)試”選項(xiàng)卡。

poYBAGSBoZaAT2oPAABxK40P5zQ327.png
?

21. 在Alexa 模擬器的輸入窗口中輸入Open Sky Finder (或您之前選擇的技能名稱)。您應(yīng)該會(huì)收到以下響應(yīng)。

pYYBAGSBoZmAB3AZAAFFXjJkoMw199.png
?

在下一節(jié)中,我們將了解 EV3 程序塊的軟件。

5. EV3 程序塊代碼

22. 在您的 PC 上,創(chuàng)建一個(gè)名為 SkyFinder 的新文件夾。從本頁(yè)底部的代碼部分下載skyfinder.pyskyfinder.ini文件,并將它們移動(dòng)到您剛剛創(chuàng)建的新文件夾中。

23. 打開(kāi) Visual Studio 代碼編輯器,點(diǎn)擊 File -> Open Folder 并打開(kāi)剛剛創(chuàng)建的 SkyFinder 文件夾,

pYYBAGSBoZyAR6reAABO64fTHMI781.png
?

24. 在編輯器中打開(kāi)skyfinder.ini文件,添加第 4 步中的Amazon IDAlexa Gadget Secret ,然后點(diǎn)擊 File -> Save

poYBAGSBoZ-AS-U_AACY-US3sB4819.png
?

25. 將 Visual Studio 連接到 EV3 程序塊。

pYYBAGSBoaGANrN0AAAr9cH3RiY440.png
?

26. 設(shè)備連接后,圓圈將變?yōu)榫G色。單擊 ev3dev 設(shè)備瀏覽器旁邊的圖標(biāo),將工作區(qū)發(fā)送到設(shè)備。

poYBAGSBoaOAf_PjAAAOdCfct6k746.png
?

與 Alexa 技能類相比,EV3 brick 上的代碼相對(duì)簡(jiǎn)單。SkyFinder類擴(kuò)展了 AlexaGadget并調(diào)用超類來(lái)初始化小工具。

class SkyFinder(AlexaGadget):
"""
A Mindstorms gadget that points to a specified position in the sky
For use with the Sky Finder skill
"""
def __init__(self):
    """
    Performs Alexa Gadget initialization routines and ev3dev resource allocation.
    """
    super().__init__()

當(dāng)小工具與 Echo 設(shè)備連接或斷開(kāi)連接時(shí),將調(diào)用OnConnectedOnDisconnected方法。這些只是將前面的 LED 分別設(shè)置為綠色或關(guān)閉作為狀態(tài)指示。

on_custom_mindstorms_gadget_control方法在小工具通過(guò) Echo 設(shè)備從技能接收有效負(fù)載時(shí)被調(diào)用。我們支持兩種有效載荷,一種將小工具重置為其起始位置(目前僅在啟動(dòng)時(shí)使用),另一種將指針移動(dòng)到指定的方位角、高度坐標(biāo)。

def on_custom_mindstorms_gadget_control(self, directive):
    """
    Handles the Custom.Mindstorms.Gadget control directive.
    :param directive: the custom directive with the matching namespace and name
    """
try:
    payload = json.loads(directive.payload.decode("utf-8"))
    print("Control payload: {}".format(payload), file=sys.stderr)
    control_type = payload["type"]
    if control_type == "move":
        # Expected params: [az, alt]
        self.go_to(payload["az"], int(payload["alt"]))
    if control_type == "reset":
        # Expected params: none
        self.reset_position()
except KeyError:
    print("Missing expected parameters: {}".format(directive), file=sys.stderr)

reset_position方法首先轉(zhuǎn)動(dòng)控制轉(zhuǎn)盤(pán)大電機(jī),直到觸摸傳感器被按下,然后將轉(zhuǎn)盤(pán)旋轉(zhuǎn)指定距離回到起始位置。接下來(lái)它轉(zhuǎn)動(dòng)移動(dòng)手臂的中型電機(jī),直到它被顏色傳感器檢測(cè)到。然后以與起始位置相反的方向旋轉(zhuǎn)。

def reset_position(self):
    """
    Move arm to starting position
    """
    logger.info(""Resetting arm position)
    self.lm.stop_action = 'brake'
    self.lm.reset()
    self.lm.position = 0

    # Rotate arm until it pushes touch sensor switch
    # and then move specified distance to start position
    self.lm.on_for_rotations(speed = SpeedDPS(72), rotations = -3, block=False)
    self.ts.wait_for_pressed()
    self.lm.off()
    self.lm.on_for_degrees(SpeedDPS(72), START_AZ, block = True)

    # Rotate arm in other axis until it's seen by the colour sensor
    # and then move specified distance to start position
    self.mm.stop_action = 'brake'
    self.mm.on_for_rotations(speed = 5, rotations = -3, block=False)
    # wait until sensor sees (red) arm
    while self.cs.color != 5:
        continue
    self.mm.off()

    self.mm.reset()
    self.mm.position = 0
    self.mm.on_for_degrees(5, START_ALT, block = True)
    # turn off the distracting LED on the colour sensor
    self.cs.mode='COL-AMBIENT'
    # Reset the position counter to 0
    self.mm.off()
    self.mm.reset()
    self.mm.position = 0
    self.lm.off()
    self.lm.reset()
    self.lm.position = 0

重置完成后,指針應(yīng)水平并指向與 EV3 程序塊成直角的位置。如果不是這種情況,請(qǐng)嘗試調(diào)整代碼第 23 和 24 行中的變量。

# Calibration constants for initial position
# Tweak these if required to ensure starting pos is North horizon (0 az, 0 alt)
START_AZ = 388
START_ALT = 210

go_to方法處理“移動(dòng)”有效負(fù)載并簡(jiǎn)單地將轉(zhuǎn)盤(pán)和指針移動(dòng)到指定位置

為避免電纜纏結(jié),我們只將轉(zhuǎn)盤(pán)向任一方向移動(dòng) 180 度(北向各 90 度)。要指向南方的某個(gè)位置,我們將轉(zhuǎn)盤(pán)移動(dòng)到指向北方,并將指針移到天頂(垂直向上的位置)以外以指向相反的方向。

電機(jī)位置已經(jīng)以度為單位指定,但由于它們連接到齒輪,我們將數(shù)字乘以包含齒輪比的GEAR_LMGEAR_MM 。

def go_to(self, new_az, new_alt):
    """
    Move pointer to a specified position
    :param new_az: new azimouth position (in degrees)
    :param new_alt: new altitude position (in degrees)
    """
    self.leds.set_color("LEFT", "YELLOW")
    self.leds.set_color("RIGHT", "YELLOW")
    # Normalise rotation to prevent cable tangle
    if (new_az > 270):
        az1 = new_az - 360
        alt1 = new_alt
    elif  (new_az > 90):
        az1 = new_az - 180
        alt1 = 180 - new_alt
    else:
        az1 = new_az
        alt1 = new_alt
    # Move arm
    self.lm.on_to_position(SpeedDPS(ARM_SPEED), az1 * GEAR_LM, block = False, brake = True)
    self.mm.on_to_position(SpeedDPS(ARM_SPEED), alt1 * GEAR_MM, block = True, brake = True)
    self.leds.set_color("LEFT", "GREEN")
    self.leds.set_color("RIGHT", "GREEN")

最后一段代碼在啟動(dòng)時(shí)運(yùn)行并調(diào)用主入口點(diǎn)。

27. 要在 EV3 程序塊上運(yùn)行代碼,請(qǐng)?jiān)?VS 代碼中的 ev3dev 設(shè)備瀏覽器中導(dǎo)航到skyfinder.py文件,右鍵單擊該文件并選擇運(yùn)行。

pYYBAGSBoaaAdgRTAAA92C0KCdw505.png
?

EV3 程序塊上的綠燈將開(kāi)始閃爍。

?

28. 如果小工具尚未連接到 Echo 設(shè)備,它將進(jìn)入藍(lán)牙配對(duì)模式,您將在 EV3 磚屏和 VS Code 中看到類似的消息。

pYYBAGSBoamAZ_dyAAAZAHWfB6Y735.png
?
pYYBAGSBoauAT1BjAABOTCjqLBU345.png
?

。許可證:CC BY ( http://creativecommons.org/licenses/by/4.0/ )圖表中使用的圖標(biāo): Ben Davis 的 Amazon echo dot 來(lái)自 Noun Projectchat 來(lái)自 Noun Project 的 I cons 來(lái)自 Noun Project 的 naim 的 Signal 來(lái)自 Noun Project 的 Deemak DaksinaWoman 來(lái)自 Noun Projectlego 來(lái)自 Gerardo Martín Martínez 來(lái)自 Noun Projectpython 格式來(lái)自 ICONZ來(lái)自名詞項(xiàng)目


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)