設(shè)計(jì)一款用于發(fā)現(xiàn)火源點(diǎn)的自動(dòng)地面漫游車
掃描二維碼
隨時(shí)隨地手機(jī)看文章
2025年1月初,在參加這次比賽之前,我正在看有關(guān)南加州野火的新聞。當(dāng)時(shí),數(shù)十萬人被疏散??吹饺藗兊姆课莺拓?cái)產(chǎn)被燒毀,而他們卻站在一旁,無助地看著,這是毀滅性的。消防隊(duì)員已經(jīng)筋疲力盡,日以繼夜地工作,但大火仍在蔓延,吞噬了它所能到達(dá)的每一寸土地。
在想要在消防行業(yè)有所作為的強(qiáng)烈愿望的驅(qū)使下,我開始研究野外消防是如何工作的。令我驚訝的是,我了解到,由于長途徒步旅行和崎嶇的地形,大多數(shù)消防員只能使用手動(dòng)工具。推土機(jī)和鏈鋸等重型設(shè)備在這些條件下使用有限。這大大減緩了火線的建設(shè),而且依賴空中支援可能要花費(fèi)數(shù)千到數(shù)百萬美元。據(jù)估計(jì),運(yùn)營一架747超級(jí)油輪每天的成本高達(dá)25萬美元!
出于一種緊迫感,我開始考慮設(shè)計(jì)一種自動(dòng)地面漫游車,它可以直接幫助消防員,提高他們的態(tài)勢(shì)感知能力。最終,盡管這是一項(xiàng)困難而復(fù)雜的挑戰(zhàn),但開發(fā)一種能夠自主構(gòu)建防火線的系統(tǒng)可以顯著降低消防員的生命風(fēng)險(xiǎn)。
1. 研究與開發(fā)(R&D)
2024年,美國面臨6萬多場(chǎng)野火,燒毀了800多萬英畝土地。美國國家航空航天局的數(shù)據(jù)顯示,燒焦的地區(qū)逐年攀升。由于工作人員人手不足,我開始問自己一個(gè)簡(jiǎn)單的問題:一個(gè)小型的便攜式機(jī)器人能減輕他們的工作量,讓他們更安全嗎?
當(dāng)我深入研究野火戰(zhàn)術(shù)時(shí),一種方法不斷涌現(xiàn)——建立一條火線。消防員剝?nèi)ブ脖?,使火焰耗盡燃料,停止蔓延。它是有效的,但它需要重型機(jī)械或累人的手工工具。
這引發(fā)了一個(gè)想法。如果一個(gè)自主機(jī)器人可以卷到火場(chǎng)邊緣,發(fā)現(xiàn)熱點(diǎn),并雕刻出一個(gè)迷你火線,甚至可以自己撲滅小火焰,那會(huì)怎么樣?
在閱讀農(nóng)民如何在土壤中挖洞的過程中,我意識(shí)到同樣的挖掘技巧可以幫助機(jī)器人挖出一條狹窄的防火溝,而且只要幾個(gè)噴嘴,甚至可以沿著這條路噴灑水或阻燃劑。
2. 認(rèn)識(shí)一下《衛(wèi)報(bào)》
“守護(hù)者”是我的自動(dòng)地面漫游車,專為野外工作人員設(shè)計(jì)。即使在這個(gè)早期的原型中,它也可以:
?自動(dòng)駕駛到GPS航路點(diǎn),
?用機(jī)載視覺發(fā)現(xiàn)一個(gè)火源或熱點(diǎn),然后
?解決火災(zāi)有兩種方法:一種是劃出一條細(xì)細(xì)的火線,另一種是用內(nèi)置的水泵撲滅小的火苗。
探測(cè)器的核心是粒子硼404X。多虧了它的5G調(diào)制解調(diào)器,我可以在手機(jī)網(wǎng)絡(luò)覆蓋的任何地方查看機(jī)器人。粒子云儀表板可以讓我在一個(gè)地方觀看遙測(cè)、發(fā)送命令和推送無線固件更新。
更好的是,硼的GPIO引腳和片上微控制器讓我可以直接控制馬達(dá)、傳感器和泵——不需要額外的電子設(shè)備堆棧。
說得夠多了,讓我們深入研究一下構(gòu)建過程。
我最初計(jì)劃從頭開始3d打印整個(gè)履帶式底盤。后來,一位朋友給了我一套他不再需要的備用曲目,于是我抓住了它,節(jié)省了幾周的工作。動(dòng)力傳動(dòng)系統(tǒng)安裝完畢后,我所要設(shè)計(jì)的就是一個(gè)堅(jiān)固的3d打印平臺(tái),電子設(shè)備和車載電腦可以整齊地固定在上面。(如果你感興趣的話,我之前發(fā)現(xiàn)了一些3D打印的:3D打印機(jī)器人坦克底盤,GrabCAD的3D打印坦克底盤)
然后我可以使用PCBWay或其他打印服務(wù)來做平臺(tái)的3D打印,以容納我的傳感器和電子設(shè)備。
底盤準(zhǔn)備好了,我跳到有趣的部分,使一切都與粒子硼404X移動(dòng)。我首先拿了一個(gè)舊的Arduino來快速測(cè)試每個(gè)電機(jī)、伺服和水泵;眨眼和旋轉(zhuǎn)幾下后,我知道線路是可靠的。從那里,將草圖移植到硼幾乎是一個(gè)復(fù)制和粘貼的工作-編碼風(fēng)格非常接近Arduino的IDE,轉(zhuǎn)換需要幾分鐘。
以下是總體流程:
?杰森·奧林——“大腦”。它處理來自攝像頭、GPS和IMU的數(shù)據(jù),找出下一步行動(dòng),并將這些命令傳遞給下游。
?粒子硼404X——“手和腳”。它接受Orin的指令,驅(qū)動(dòng)馬達(dá),控制伺服系統(tǒng),啟動(dòng)水泵。
?5G鏈路——反向通道。當(dāng)硼忙于運(yùn)行硬件時(shí),它也通過5g LTE與粒子云保持聯(lián)系,所以我可以在任何地方通過手機(jī)服務(wù)推動(dòng)機(jī)器人或更新其固件。
簡(jiǎn)而言之:奧林認(rèn)為,硼在行動(dòng),而云讓我們保持聯(lián)系。
下面是它的簡(jiǎn)要介紹和接線圖:
兩個(gè)11.1V的LiPo電池為驅(qū)動(dòng)履帶車輪的電機(jī)控制器供電。該系統(tǒng)還提供5V電源,為4通道繼電器、水泵和伺服供電,因?yàn)榕鹬惶峁?.3V電源。硼通過TX引腳發(fā)送TTL信號(hào)到電機(jī)控制器來調(diào)節(jié)車輪的速度和方向。它還通過數(shù)字引腳(高或低)發(fā)送數(shù)字信號(hào)來控制操作水泵和伺服的繼電器通道。
2.1使用粒子控制臺(tái)設(shè)置云解決方案
硼控制臺(tái)是提供的網(wǎng)絡(luò)平臺(tái),以監(jiān)測(cè)您的粒子設(shè)備。
登錄后,您必須設(shè)置鏈接您的產(chǎn)品,在我的情況下,硼404x,然后您將獲得一個(gè)產(chǎn)品ID鏈接到Visual Studio代碼。以下是登錄后的界面片段,您將看到設(shè)備的“健康”和連接情況。它甚至為你提供地理位置。
您還可以執(zhí)行無線代碼更新,以及觸發(fā)專用函數(shù)。這里我創(chuàng)建了兩個(gè)函數(shù)Command Movement和Send Waypoint,當(dāng)被調(diào)用時(shí),它將發(fā)送命令邏輯給Guardian上的硼來執(zhí)行任務(wù)。
通過智能手機(jī)控制臺(tái)指揮守護(hù)者的現(xiàn)場(chǎng)演示
除此之外,控制臺(tái)還內(nèi)置了其他一些指標(biāo),如手機(jī)數(shù)據(jù)使用量(每月100 mb免費(fèi)!)、電池壽命等等。它還帶有webhook集成,我非常興奮將來能在其他項(xiàng)目中使用它。
使用Visual Studio Code中的現(xiàn)有擴(kuò)展,我們可以快速設(shè)置設(shè)備并開始在此頁面內(nèi)開發(fā):
以下是要遵循的一般順序:
登錄并設(shè)置設(shè)備后,您將將本地項(xiàng)目設(shè)備名稱鏈接到控制臺(tái)上的相同設(shè)備名稱,然后您可以創(chuàng)建項(xiàng)目,該項(xiàng)目將為您提供與Arduino平臺(tái)相同的所需庫。(更多安裝說明:Manual setup, Getting Started)
代碼總結(jié):
?云鉤子。兩個(gè)粒子函數(shù)——用于快速操縱桿式命令的manualmove()和用于緯度/經(jīng)度的sendWaypoint()——可以讓你從粒子控制臺(tái)或杰森的高級(jí)規(guī)劃器中戳機(jī)器人。
?路標(biāo)的傳遞。當(dāng)一個(gè)新的航路點(diǎn)到達(dá)時(shí),硼會(huì)通過它的USB串口向杰森噴射一個(gè)很小的JSON數(shù)據(jù)包(^{…}$)。這使得高性能計(jì)算機(jī)負(fù)責(zé)全球?qū)Ш健?
?電機(jī)控制。Jetson然后回復(fù)單字符驅(qū)動(dòng)代碼(如b / l / s),硼的autoMove()將其轉(zhuǎn)換為serial1 (Sabertooth電機(jī)驅(qū)動(dòng)器的封裝串行接口)上的一字節(jié)速度命令,因此不需要在微型上進(jìn)行PWM時(shí)序。
?挖掘和噴灑。一對(duì)GPIO線翻轉(zhuǎn)一個(gè)用于挖掘電機(jī)的繼電器和另一個(gè)用于水泵的繼電器;輔助函數(shù)(shouldDig(), shouldWater())切換它們并強(qiáng)制30秒的安全超時(shí)。
?心跳故障保險(xiǎn)。如果硼在半秒內(nèi)沒有聽到驅(qū)動(dòng)角色的聲音,或者在30秒內(nèi)沒有聽到挖/噴刷新,它就會(huì)把所有東西都降到安全的停止?fàn)顟B(tài)。
到目前為止,你應(yīng)該已經(jīng)能夠通過粒子控制臺(tái)指揮機(jī)器人!!
2.2編程杰森·奧林
現(xiàn)在我們已經(jīng)介紹了硼,我們的二號(hào)人物,讓我們介紹我們的一號(hào)人物:杰森奧林Nano。這個(gè)主要的大腦控制著整個(gè)機(jī)器人,從感知到導(dǎo)航。從今年開始,Orin (Super) Developer Kit的性能升級(jí)了一倍,而價(jià)格卻降到了原來的一半。
?Jetson Orin上有三個(gè)節(jié)點(diǎn)在運(yùn)行
?攝像頭(Oak-D Pro W),通過ROS 2中間件發(fā)送RGB圖像,用于火災(zāi)探測(cè)
?操縱桿控制器,接收操縱桿輸入,用于手動(dòng)駕駛守護(hù)者和控制水泵,傾斜伺服器
?Guardian導(dǎo)航節(jié)點(diǎn),接收來自GNSS/IMU的傳感器數(shù)據(jù),通過比較目標(biāo)航路點(diǎn)來執(zhí)行導(dǎo)航校正
joy_to_serial_node.py
完整的代碼:
guardian_nav_node.py
camera_detect_node.py
3. 讓它自治!
最初,我打算使用Arduino Giga板,因?yàn)樗呀?jīng)有可用的GPS和IMU庫進(jìn)行開發(fā)。但是,由于我無法獲得一個(gè),所以我使用了我自己的ESP32并對(duì)其進(jìn)行了修改。
簡(jiǎn)而言之,它通過ESP32將實(shí)時(shí)GNSS和IMU數(shù)據(jù)發(fā)送到我們的主大腦(Jetson Orin Nano),我們將利用它來告訴機(jī)器人如何到達(dá)指定的航路點(diǎn)。
3.1航路點(diǎn)任務(wù)
為了讓機(jī)器人明白從當(dāng)前位置到下一個(gè)航路點(diǎn)要走到哪里。它需要知道它目前的位置(當(dāng)前的緯度和經(jīng)度),以及機(jī)器人在地球上的方向(方位角)。
(方位角是一個(gè)更具體的絕對(duì)方向,而方位可以相對(duì)于一個(gè)點(diǎn)或一條線)
通過這些測(cè)量從GPS/IMU傳感器。我們只要在守護(hù)者的當(dāng)前位置和航路點(diǎn)的位置之間畫一條假想的線。這條線與守護(hù)者當(dāng)前的標(biāo)題相比較,告訴我們我們需要轉(zhuǎn)向多少才能面對(duì)航點(diǎn),然后我們只需命令它向前移動(dòng),直到我們到達(dá)航點(diǎn)位置(當(dāng)守護(hù)者的經(jīng)緯度=航點(diǎn)的經(jīng)緯度)。
您可以從前面發(fā)布的guardian_nav_node.py中引用確切的代碼。
3.2訓(xùn)練AI探測(cè)火災(zāi)
我最初認(rèn)為我可以利用北歐nrf9151-DK并運(yùn)行邊緣脈沖進(jìn)行視覺分類(檢測(cè)邊緣設(shè)備上的火),但經(jīng)過進(jìn)一步研究,似乎邊緣脈沖是通過云運(yùn)行的,我找不到關(guān)于如何實(shí)現(xiàn)它的進(jìn)一步信息。由于時(shí)間有限,我決定在Jetson Orin上運(yùn)行。
通過Jetson Orin上的YOLO11進(jìn)行目標(biāo)檢測(cè)
利用人工智能的目標(biāo)是識(shí)別煙霧和火災(zāi)等危險(xiǎn)。值得慶幸的是,YOLO和RoboFlow社區(qū)已經(jīng)擁有數(shù)千個(gè)數(shù)據(jù)集,我們可以訓(xùn)練我們的人工智能模型來識(shí)別和部署。
YOLO (You Only Look Once)是一系列以速度和準(zhǔn)確性著稱的目標(biāo)檢測(cè)模型。它們是單鏡頭探測(cè)器,這意味著它們一次處理整個(gè)圖像來識(shí)別和定位物體。YOLO使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)對(duì)對(duì)象邊界框和類概率進(jìn)行預(yù)測(cè)。
Roboflow是一個(gè)可視化人工智能工具平臺(tái),它簡(jiǎn)化了模型部署并增強(qiáng)了特定用例的性能。我們將利用社區(qū)標(biāo)記的可用數(shù)據(jù)集。
該數(shù)據(jù)集由帶有火焰和煙霧的圖像組成,并為訓(xùn)練目的進(jìn)行了標(biāo)記。
然后,我們將轉(zhuǎn)到數(shù)據(jù)集并選擇下載數(shù)據(jù)集。
解壓縮數(shù)據(jù)集,您應(yīng)該看到數(shù)據(jù)。Yaml和其他testtrainvliad文件夾
配置數(shù)據(jù)Yaml有前3行來硬編碼全局路徑。(您可以通過在該文件夾的終端上運(yùn)行pwd來找到全局路徑)
到:
然后我們將通過YoLo 11開始訓(xùn)練
對(duì)于我來說,我在速度和準(zhǔn)確性之間找到了一些平衡:
4.1遷移到nRF9151-DK
北歐的nRF9151-DK與硼404x相比是一個(gè)超級(jí)升級(jí)。它還包括一個(gè)機(jī)載GNSS,以及大量的GPIO和核心訪問,使其強(qiáng)大而強(qiáng)大,適用于各種應(yīng)用。然而,設(shè)置它是相當(dāng)具有挑戰(zhàn)性的。
4.2粒子硼404x與北歐nRF9151-DK
當(dāng)比較兩種硬件時(shí),硼很容易設(shè)置和已經(jīng)可用的arduino風(fēng)格的開發(fā)。粒子控制臺(tái)非常適合在任何我喜歡的地方監(jiān)控設(shè)備,所以我總是知道守護(hù)者在哪里!
另一方面,nRF9151-DK在開發(fā)方面具有挑戰(zhàn)性,而且現(xiàn)成的功能也少得多,但如果時(shí)間允許,它絕對(duì)是非常強(qiáng)大的。
本文編譯自hackster.io