資料介紹
描述
抽象的
Air Strategist Companion 是一個(gè)由四旋翼無(wú)人機(jī)、Web 服務(wù)器和 Android 應(yīng)用程序組成的系統(tǒng),旨在提高森林消防人員的態(tài)勢(shì)感知能力。該系統(tǒng)實(shí)時(shí)跟蹤火點(diǎn)和消防人員,并在在線地圖上顯示他們的位置,該地圖可以通過網(wǎng)絡(luò)瀏覽器和安卓應(yīng)用程序訪問。無(wú)人機(jī)飛越火區(qū),并使用帶有計(jì)算機(jī)視覺的紅外攝像機(jī)識(shí)別火點(diǎn)。它選擇視野中最大的三個(gè),以自主地遵循由它們組成的模式。如果火災(zāi)模式改變了形狀、大小或位置,無(wú)人機(jī)將跟蹤它并在沒有人工干預(yù)的情況下重新定位。它還可以單獨(dú)跟蹤圖案中的每個(gè)火點(diǎn)。每隔幾秒,無(wú)人機(jī)將要在地圖上繪制的檢測(cè)到的火點(diǎn)的多邊形近似值以及從其頂視圖拍攝的相機(jī)照片上傳到網(wǎng)絡(luò)服務(wù)器。它還上傳自己的 GPS 坐標(biāo)、地速和全球/相對(duì)高度;笛卡爾坐標(biāo)和每個(gè)火點(diǎn)的計(jì)算表面積和主要火災(zāi)模式,以及在其當(dāng)前位置獲取的地面溫度讀數(shù)。Web 服務(wù)器接收所有這些信息并將其可視化在網(wǎng)頁(yè)上。該網(wǎng)頁(yè)還有一個(gè)控制面板,可以從中選擇多達(dá)七種無(wú)人機(jī)的自主跟蹤任務(wù)模式。它還顯示當(dāng)前天氣數(shù)據(jù)和未來 24 小時(shí)的預(yù)報(bào)天氣數(shù)據(jù)。以及從其頂視圖拍攝的相機(jī)照片。它還上傳自己的 GPS 坐標(biāo)、地速和全球/相對(duì)高度;笛卡爾坐標(biāo)和每個(gè)火點(diǎn)的計(jì)算表面積和主要火災(zāi)模式,以及在其當(dāng)前位置獲取的地面溫度讀數(shù)。Web 服務(wù)器接收所有這些信息并將其可視化在網(wǎng)頁(yè)上。該網(wǎng)頁(yè)還有一個(gè)控制面板,可以從中選擇多達(dá)七種無(wú)人機(jī)的自主跟蹤任務(wù)模式。它還顯示當(dāng)前天氣數(shù)據(jù)和未來 24 小時(shí)的預(yù)報(bào)天氣數(shù)據(jù)。以及從其頂視圖拍攝的相機(jī)照片。它還上傳自己的 GPS 坐標(biāo)、地速和全球/相對(duì)高度;笛卡爾坐標(biāo)和每個(gè)火點(diǎn)的計(jì)算表面積和主要火災(zāi)模式,以及在其當(dāng)前位置獲取的地面溫度讀數(shù)。Web 服務(wù)器接收所有這些信息并將其可視化在網(wǎng)頁(yè)上。該網(wǎng)頁(yè)還有一個(gè)控制面板,可以從中選擇多達(dá)七種無(wú)人機(jī)的自主跟蹤任務(wù)模式。它還顯示當(dāng)前天氣數(shù)據(jù)和未來 24 小時(shí)的預(yù)報(bào)天氣數(shù)據(jù)。以及在其當(dāng)前位置獲取的地面溫度讀數(shù)。Web 服務(wù)器接收所有這些信息并將其可視化在網(wǎng)頁(yè)上。該網(wǎng)頁(yè)還有一個(gè)控制面板,可以從中選擇多達(dá)七種無(wú)人機(jī)的自主跟蹤任務(wù)模式。它還顯示當(dāng)前天氣數(shù)據(jù)和未來 24 小時(shí)的預(yù)報(bào)天氣數(shù)據(jù)。以及在其當(dāng)前位置獲取的地面溫度讀數(shù)。Web 服務(wù)器接收所有這些信息并將其可視化在網(wǎng)頁(yè)上。該網(wǎng)頁(yè)還有一個(gè)控制面板,可以從中選擇多達(dá)七種無(wú)人機(jī)的自主跟蹤任務(wù)模式。它還顯示當(dāng)前天氣數(shù)據(jù)和未來 24 小時(shí)的預(yù)報(bào)天氣數(shù)據(jù)。
定制開發(fā)的 Android 應(yīng)用程序旨在安裝在消防隊(duì)員的移動(dòng)設(shè)備中。該應(yīng)用程序跟蹤設(shè)備的 GPS 坐標(biāo)并將其上傳到 Web 服務(wù)器。系統(tǒng)檢測(cè)到的所有機(jī)組人員的位置通過在線地圖上的標(biāo)記進(jìn)行可視化,以及他們的姓名、ID 代碼、GPS 坐標(biāo)和當(dāng)前狀態(tài)。該應(yīng)用程序在 GUI 中有一個(gè)“SOS 按鈕”,機(jī)組成員可以在他們認(rèn)為有必要的任何時(shí)候按下以向服務(wù)器發(fā)送“幫助”信號(hào)。可以從網(wǎng)絡(luò)瀏覽器訪問包含地圖的網(wǎng)頁(yè),并且還顯示在 Android 應(yīng)用程序的 GUI 中。雖然這個(gè)原型使用紅外攝像機(jī)來識(shí)別火點(diǎn),但系統(tǒng)可以升級(jí)為使用熱成像攝像機(jī),只需極少的改動(dòng),以獲得更強(qiáng)大的火災(zāi)探測(cè)系統(tǒng)。
框圖、硬件和功能描述
圖 1 顯示了系統(tǒng)的主要功能組件。用于原型的無(wú)人機(jī)是 NXP 的 RDDRONE-FMUK66 HoverGames 四旋翼飛行器,帶有 NXP RDDRONE-FMUK66 飛行管理單元 (FMU)。它配備了 Raspberry Pi 3 B+ 作為配套計(jì)算機(jī)和 Raspberry Pi NoIR V2.0 紅外攝像頭。為該原型選擇了紅外 (IR) 攝像頭,因?yàn)榛馂?zāi)通常會(huì)發(fā)出紅外輻射,可用于通過檢測(cè)紅外光而不是可見顏色來檢測(cè)火災(zāi),理論上即使在煙霧或灰塵后面也能檢測(cè)到火點(diǎn)(假設(shè)相機(jī)能夠檢測(cè)給定燃燒類型發(fā)射的特定紅外輻射波段)。
配套電腦自帶獨(dú)立電源,可在無(wú)人機(jī)關(guān)機(jī)換電池時(shí)保持運(yùn)行。一個(gè)基于 OpenCV 的程序在其中運(yùn)行,以訪問攝像機(jī)的視頻源并檢測(cè)火點(diǎn)。攝像機(jī)安裝在四旋翼的框架下方,向下指向地面。一旦檢測(cè)到火點(diǎn),算法就會(huì)選擇三個(gè)最大的火點(diǎn),并計(jì)算每個(gè)火點(diǎn)的幾何近似多邊形,以及它們?cè)诰植康芽栕鴺?biāo)中的對(duì)應(yīng)位置以及它們對(duì)應(yīng)的表面積。它還計(jì)算主火圖案幾何中心或質(zhì)心的局部笛卡爾坐標(biāo)。每隔幾秒鐘,還會(huì)從當(dāng)前無(wú)人機(jī)的位置拍攝火區(qū)的頂視圖,
配套計(jì)算機(jī)通過 MAVLink 協(xié)議通過串行端口連接從飛行控制器接收無(wú)人機(jī)遙測(cè)數(shù)據(jù)(當(dāng)前 GPS 坐標(biāo)、全球和相對(duì)高度、地速等)。這些數(shù)據(jù)以及來自計(jì)算機(jī)視覺系統(tǒng)的火災(zāi)跟蹤數(shù)據(jù)通過 HTTP 協(xié)議發(fā)送到 Web 服務(wù)器。配套計(jì)算機(jī)使用機(jī)器人操作系統(tǒng) (ROS) 中間件“粘合”其所有軟件組件:傳感器接口、計(jì)算機(jī)視覺、自主飛行、與服務(wù)器的 HTTP 通信以及與無(wú)人機(jī)飛行控制器的 MAVLink 接口。兩個(gè)用 Python 編寫的 ROS 節(jié)點(diǎn)和兩個(gè)用 C++ 編寫的節(jié)點(diǎn)負(fù)責(zé)所有必需的任務(wù)。出于“概念驗(yàn)證”的目的,無(wú)人機(jī)依靠 WiFi 連接向服務(wù)器上傳/下載所有數(shù)據(jù),但它可以通過 GPRS 蜂窩調(diào)制解調(diào)器輕松升級(jí),以便在相對(duì)偏遠(yuǎn)的地區(qū)運(yùn)行。圖 2 顯示了完整的無(wú)人機(jī)構(gòu)建,圖 3 顯示了完整的系統(tǒng),包括指揮中心計(jì)算機(jī)和幾個(gè)移動(dòng)設(shè)備。圖 4 顯示了安裝在四軸飛行器底盤上的配套計(jì)算機(jī),以及攝像頭和溫度傳感器。圖 5 顯示了連接圖,包括與飛控的接口。
在從無(wú)人機(jī)和機(jī)組成員的移動(dòng)設(shè)備接收到所有上述數(shù)據(jù)后,服務(wù)器將執(zhí)行額外的計(jì)算和數(shù)據(jù)轉(zhuǎn)換,以準(zhǔn)備提供上述網(wǎng)頁(yè)(見圖 6)。網(wǎng)頁(yè)中的所有信息每隔幾秒就會(huì)自動(dòng)刷新一次。
如前所述,已經(jīng)為消防人員開發(fā)了一個(gè)定制的 Android 應(yīng)用程序(參見圖 7)。該應(yīng)用程序從機(jī)組成員的移動(dòng)設(shè)備中讀取 GPS 坐標(biāo),并將這些數(shù)據(jù)連同他的姓名、身份 (ID) 代碼和當(dāng)前狀態(tài)一起發(fā)送到網(wǎng)絡(luò)服務(wù)器。它還在其 GUI 中顯示來自網(wǎng)絡(luò)服務(wù)器的地圖,并有一個(gè)“SOS 按鈕”,消防員可以在認(rèn)為必要的任何時(shí)間向服務(wù)器發(fā)送 SOS 信號(hào)。它還有一個(gè)“開始位置跟蹤”按鈕來啟動(dòng)設(shè)備的 GPS 位置跟蹤和一個(gè)“停止位置跟蹤”按鈕來停止它,以及一些用于監(jiān)控輔助數(shù)據(jù)的額外文本視圖。
在指揮中心,負(fù)責(zé)人員可以監(jiān)控系統(tǒng)提供的所有信息,同時(shí)控制無(wú)人機(jī)的自主跟蹤任務(wù)模式,所有這些都來自同一個(gè)網(wǎng)頁(yè)。可以從世界任何地方通過 Internet 連接訪問該網(wǎng)頁(yè)(因此系統(tǒng)應(yīng)該授予訪問權(quán)限,但這在此原型中被忽略了)。現(xiàn)場(chǎng)行動(dòng)開始時(shí),指揮中心的工作人員必須將無(wú)人機(jī)部署在火區(qū)周圍;然后,他們必須激活無(wú)人機(jī)的“自主火力追蹤模式”,讓它完成任務(wù)。無(wú)人機(jī)被編程為在沒有人為干預(yù)的情況下跟蹤火點(diǎn)和機(jī)組人員。從網(wǎng)頁(yè)(以及 Android 應(yīng)用程序)可以命令它并將其置于七種不同的跟蹤模式:
- 追蹤火紋:追蹤主火紋的質(zhì)心。
- 跟蹤火點(diǎn) 1:跟蹤檢測(cè)到的最大火點(diǎn)。
- 跟蹤火點(diǎn) 2:跟蹤第二個(gè)火點(diǎn)的大小。
- Track Fire Spot 3:跟蹤第三個(gè)火點(diǎn)的大小。
- 跟蹤所有火點(diǎn):在巡邏模式下跟蹤所有三個(gè)火點(diǎn),一個(gè)接一個(gè),在每個(gè)火點(diǎn)暫停,然后再移動(dòng)到下一個(gè)。
- Track Crew Member:跟蹤給定的消防人員,該成員也是從網(wǎng)頁(yè)中選擇的。
- 跟蹤所有船員:在巡邏模式下跟蹤所有船員,一個(gè)接一個(gè),在移動(dòng)到下一個(gè)之前在每個(gè)船員中暫停。
無(wú)論火災(zāi)向哪個(gè)方向前進(jìn)或撤退,無(wú)人機(jī)都會(huì)根據(jù)從其視覺傳感器獲取的數(shù)據(jù),通過將自身重新定位在主要火災(zāi)區(qū)域上來自主跟蹤火點(diǎn)。一旦電池耗盡,無(wú)人機(jī)將返回起飛位置并著陸以更換電池,而無(wú)需關(guān)閉配套計(jì)算機(jī),之后可以再次重新部署。
在無(wú)線電控制 (RC) 發(fā)射器的幫助下,指揮中心始終可以重新獲得對(duì)無(wú)人機(jī)的手動(dòng)控制,并再次將其切換到自主跟蹤模式。此外,通過使用 PX4 自動(dòng)駕駛儀的軟件生態(tài)系統(tǒng),無(wú)人機(jī)的完整遙測(cè)數(shù)據(jù)可通過使用地面站軟件(例如 QGroundControl)在指揮中心計(jì)算機(jī)上獲得,該軟件通過遙測(cè)模塊永久連接到無(wú)人機(jī)。地面站軟件還顯示了無(wú)人機(jī)當(dāng)前位置及其描述的軌跡以及無(wú)數(shù)遙測(cè)數(shù)據(jù)的地圖,如果需要,還可用于在手動(dòng)控制和自主模式之間切換。因?yàn)樵撓到y(tǒng)基于 ROS、實(shí)時(shí)視頻源、原始火災(zāi)跟蹤數(shù)據(jù)、消防人員的數(shù)據(jù)和來自飛行控制器的遙測(cè)數(shù)據(jù)也可以通過默認(rèn)的 ROS 工具從任何安裝了 ROS 的 Linux 計(jì)算機(jī)上實(shí)時(shí)訪問。例如,來自相機(jī)圖像處理算法的所有視頻輸入都可以作為 ROS 主題實(shí)時(shí)獲得。
配套電腦軟件
Raspberry Pi 配套計(jì)算機(jī)運(yùn)行安裝了 ROS Kinetic 的 Ubuntu MATE 16.04。以下 ROS 節(jié)點(diǎn)負(fù)責(zé)所有必需的任務(wù):
'opencv_node':用 Python 編寫,負(fù)責(zé)訪問 Raspberry Pi NoIR 攝像頭的實(shí)時(shí)視頻源,并運(yùn)行火災(zāi)檢測(cè)算法以找到火點(diǎn)。隨時(shí)可用的“raspicam_node”ROS 節(jié)點(diǎn)(請(qǐng)參閱參考資料部分)用于訪問攝像機(jī)的視頻源。該節(jié)點(diǎn)與攝像機(jī)對(duì)話,以獲取視頻流并將其發(fā)布到“opencv_node”訂閱的“/raspicam_node/image/compressed”視頻主題。在檢測(cè)到火點(diǎn)后,配套計(jì)算機(jī)計(jì)算構(gòu)成主要火災(zāi)模式的三個(gè)最大火點(diǎn)的幾何近似多邊形。然后它將每個(gè)多邊形的定義頂點(diǎn)作為 JSON 字符串發(fā)布到“/fire_polygons_json”主題;以及每個(gè)火點(diǎn)的面積,到“/fire_polygons_area_json”主題。'/fire_pattern/pose_point' 主題中也提供了火災(zāi)模式質(zhì)心的局部笛卡爾坐標(biāo)。它還發(fā)布了“/fire_tracking_image/compressed”主題,該主題帶有攝像機(jī)的原始視頻圖像,檢測(cè)到的火點(diǎn)和近似多邊形疊加。從同樣的視頻內(nèi)容中,該節(jié)點(diǎn)每隔幾秒就會(huì)在配套計(jì)算機(jī)的文件系統(tǒng)中保存一個(gè)圖片幀,然后將其發(fā)送到服務(wù)器以顯示在網(wǎng)頁(yè)上(參見圖 6)。該節(jié)點(diǎn)還發(fā)布包含相機(jī)幀當(dāng)前寬度和高度的“/modified_image/size”主題,該主題也必須上傳到服務(wù)器,以便從像素單位計(jì)算轉(zhuǎn)換系數(shù),其中表示長(zhǎng)度和面積在相機(jī)圖像中,到米,
已經(jīng)實(shí)施了“運(yùn)行平均低通濾波器”來過濾火災(zāi)模式質(zhì)心坐標(biāo),以過濾火災(zāi)檢測(cè)過程中固有的高頻噪聲。
'mlx90614_sensor_node':C++編寫,負(fù)責(zé)讀取MLX9014紅外溫度傳感器的溫度【參考mlx90614教程】。它發(fā)布包含溫度讀數(shù)的“/mlx90614/temp”主題。
'http_client_node' :用 Python 編寫,訂閱前面兩個(gè)節(jié)點(diǎn)發(fā)布的所有上述主題,以及一些 MAVROS 主題。例如,它將訂閱“/mavros/global_position/global”主題,從中獲取無(wú)人機(jī)當(dāng)前的緯度/經(jīng)度坐標(biāo),以及全球海拔高度。它還將訂閱“/mavros/global_position/rel_alt”,從中獲取無(wú)人機(jī)相對(duì)于地面的當(dāng)前相對(duì)高度;最后,到“/mavros/vfr_hud”主題,它將從中獲取無(wú)人機(jī)的地面速度。然后,該節(jié)點(diǎn)將分四步繼續(xù)與服務(wù)器交換數(shù)據(jù):
- 它將來自上述所有主題的數(shù)據(jù)累積到一個(gè) XML 文件中,并通過 HTTP POST 請(qǐng)求將其發(fā)送到 Web 服務(wù)器。
- 通過發(fā)出額外的 POST 請(qǐng)求,它還將發(fā)送火災(zāi)攝像機(jī)鏡頭,之前由“opencv_node”存儲(chǔ)在配套計(jì)算機(jī)的文件系統(tǒng)中。
- 通過發(fā)送 GET 請(qǐng)求,它將從 Web 服務(wù)器下載用戶從網(wǎng)頁(yè)發(fā)出的無(wú)人機(jī)當(dāng)前任務(wù)模式命令。
- 通過發(fā)送另一個(gè) GET 請(qǐng)求,它將從 Web 服務(wù)器下載消防員數(shù)據(jù),其中主要包含系統(tǒng)檢測(cè)到的每個(gè)船員的姓名、ID 和 GPS 坐標(biāo)。
這些數(shù)據(jù)每三秒在無(wú)人機(jī)和網(wǎng)絡(luò)服務(wù)器之間交換一次。該節(jié)點(diǎn)接收到來自 web 服務(wù)器的數(shù)據(jù)后,會(huì)發(fā)布以下 ROS 主題:
- '/drone_commands/task_mode_cmd' :包含從網(wǎng)頁(yè)發(fā)出的當(dāng)前無(wú)人機(jī)任務(wù)模式命令。以下選項(xiàng)可用:TRACK_PATTERN、TRACK_FIRE_SPOT_1、TRACK_FIRE_SPOT_2、TRACK_FIRE_SPOT_3、TRACK_ALL_SPOTS、TRACK_CREW_MEMBER、TRACK_ALL_CREW_MEMBERS);
- '/drone_commands/fighter_crew_list' :包含每個(gè)機(jī)組成員的 GPS 坐標(biāo)列表。
- '/drone_commands/sel_crew_member_idx' :包含無(wú)人機(jī)必須跟蹤的當(dāng)前選定機(jī)組成員的索引。
'mavros_offboard_node':無(wú)人機(jī)通過使用MAVROS(這是MAVLink和ROS之間的橋梁)與同伴計(jì)算機(jī)接口,該節(jié)點(diǎn)負(fù)責(zé)通過發(fā)布到MAVROS主題來控制無(wú)人機(jī)的自主飛行能力,MAVLink命令將從派生并交付給無(wú)人機(jī)。該節(jié)點(diǎn)使用 C++ 編寫,訂閱以下主題:
- '/mavros/local_position/pose' : 獲取無(wú)人機(jī)的局部笛卡爾坐標(biāo)
- '/fire_pattern/pose_point' : 獲取火焰圖案的質(zhì)心局部坐標(biāo)。
- '/fire_pattern/fire_spot1_pose_point', '/fire_pattern/fire_spot2_pose_point'和'/fire_pattern/fire_spot3_pose_point' : 獲取三個(gè)主要火點(diǎn)的局部笛卡爾坐標(biāo)。
- '/drone_commands/task_mode_cmd ':獲取當(dāng)前從網(wǎng)頁(yè)下發(fā)的任務(wù)模式命令。
- '/drone_commands/sel_crew_member_idx ':獲取無(wú)人機(jī)必須跟蹤的當(dāng)前選定機(jī)組成員的索引(對(duì)于 TRACK_CREW_MEMBER 任務(wù)命令選項(xiàng))。
- '/drone_commands/fighter_crew_list' :獲取系統(tǒng)檢測(cè)到的所有機(jī)組成員的GPS坐標(biāo)列表。
該節(jié)點(diǎn)使用 PX4 “offboard” 飛行模式來控制無(wú)人機(jī)的位置,每次無(wú)人機(jī)的跟蹤目標(biāo)發(fā)生變化時(shí),都會(huì)將新的位置坐標(biāo)發(fā)布到 'mavros/setpoint_position/local' 主題。
安卓應(yīng)用
Android 應(yīng)用程序是使用 Android Studio IDE 在 Java 中開發(fā)的。GUI(參見圖 7)由六個(gè)對(duì)象組成:
- 一個(gè)“webView”對(duì)象,用于顯示由 Web 服務(wù)器生成的地圖。
- 一個(gè)'開始位置。Tracking”按鈕,啟動(dòng)設(shè)備的 GPS 位置監(jiān)控。
- 一個(gè)'停止位置。跟蹤”按鈕,停止它。
- 一個(gè)“開始 SOS”按鈕,用于向服務(wù)器發(fā)送“幫助”信號(hào)。
- 一個(gè)“textView”,顯示 HTTP POST 請(qǐng)求的結(jié)果,由應(yīng)用程序發(fā)送到 Web 服務(wù)器以上傳機(jī)組成員的數(shù)據(jù)。
- 第二個(gè)“textView”顯示移動(dòng)設(shè)備的當(dāng)前 GPS 坐標(biāo)。
應(yīng)用程序中有一個(gè)時(shí)間觸發(fā)功能,負(fù)責(zé)收集 GPS 數(shù)據(jù)和當(dāng)前狀態(tài)(是否按下 SOS 按鈕),并每隔幾秒通過 HTTP POST 將數(shù)據(jù)發(fā)送到 Web 服務(wù)器。
網(wǎng)絡(luò)服務(wù)器應(yīng)用程序
網(wǎng)絡(luò)服務(wù)器有一個(gè)帶有 Javascript 代碼的主網(wǎng)頁(yè),以及一組 PHP 腳本,負(fù)責(zé)接收來自無(wú)人機(jī)和機(jī)組成員移動(dòng)設(shè)備的數(shù)據(jù);以及從主網(wǎng)頁(yè)的控制面板發(fā)出的無(wú)人機(jī)任務(wù)命令。讓我們看看每個(gè)腳本的作用:
'receive_telemetry_xml.php' :此腳本從配套計(jì)算機(jī)接收 XML 遙測(cè)文件,其中包含以下數(shù)據(jù):
- 無(wú)人機(jī)的 GPS 坐標(biāo)、全球/相對(duì)高度和地面速度。
- 局部笛卡爾坐標(biāo)中每個(gè)火點(diǎn)的近似多邊形頂點(diǎn)及其對(duì)應(yīng)的表面積,均以像素為單位。
- 火焰圖案的質(zhì)心笛卡爾坐標(biāo),以像素為單位。
- 相機(jī)圖像幀的寬度和高度,也以像素為單位。
- 在無(wú)人機(jī)當(dāng)前位置測(cè)量的地面溫度,以攝氏度為單位。
收到 XML 文件后,腳本會(huì)繼續(xù)將其副本保存在服務(wù)器的本地文件系統(tǒng)中。由于 XML 字符串的副本仍在 RAM 內(nèi)存中,它會(huì)繼續(xù)將所有接收到的距離和區(qū)域(以“相機(jī)像素”單位)轉(zhuǎn)換為米。為此,它將計(jì)算“$pixel_to_meters”轉(zhuǎn)換因子以將所有測(cè)量值從像素單位轉(zhuǎn)換為米。圖 8 顯示了如何通過使用無(wú)人機(jī)相對(duì)于地面的相對(duì)高度、相機(jī)的視場(chǎng)角、相機(jī)圖像大小和勾股定理來計(jì)算轉(zhuǎn)換因子。預(yù)先做出一些假設(shè)以保持計(jì)算簡(jiǎn)單。接下來,借助這個(gè)轉(zhuǎn)換因子,火焰多邊形頂點(diǎn)和火焰圖案質(zhì)心的笛卡爾坐標(biāo)從以像素為單位的局部笛卡爾坐標(biāo)轉(zhuǎn)換為極坐標(biāo),距離以米為單位,角度以弧度為單位。然后,將這些極坐標(biāo)轉(zhuǎn)換為全球經(jīng)緯度坐標(biāo)[參考 PHP 距離方位到 GPS]。
然后,該腳本將用新轉(zhuǎn)換的 GPS 坐標(biāo)替換 XML 字符串中的所有原始本地坐標(biāo),并將 XML 字符串作為名為“drone_telemetry_conv.xml”的新副本再次存儲(chǔ)在服務(wù)器的本地文件系統(tǒng)中。該網(wǎng)頁(yè)將使用新轉(zhuǎn)換的 GPS 坐標(biāo)來可視化地圖中的火災(zāi)多邊形。
'receive_image.php' : 該腳本負(fù)責(zé)接收消防攝像機(jī)鏡頭,之前由同伴計(jì)算機(jī)中的'opencv_node'保存;然后將顯示在網(wǎng)頁(yè)上并每隔幾秒鐘刷新一次。
'receive_fighter_data.php' :負(fù)責(zé)處理來自機(jī)組成員移動(dòng)設(shè)備中 Android 應(yīng)用程序的 HTTP POST 請(qǐng)求。該腳本以一組 [key:value] 對(duì)的形式接收消防員數(shù)據(jù),其中包含以下可用鍵:“unix_time”、“name”、“id_code”、“l(fā)atitude”、“l(fā)ongitude”和“status”。特別是“狀態(tài)”鍵攜帶有關(guān)應(yīng)用程序中的“SOS 按鈕”是否被按下的信息。'unix_time' 是獲得的 GPS 坐標(biāo)和其余鍵的時(shí)間戳,我認(rèn)為是不言自明的。該腳本將接收來自所有正在執(zhí)行任務(wù)的消防員的數(shù)據(jù),該應(yīng)用程序當(dāng)前在他們的移動(dòng)設(shè)備上運(yùn)行。然后它將數(shù)據(jù)存儲(chǔ)在服務(wù)器本地文件系統(tǒng)中的單個(gè)文本文件中,
'dump_fighter_data_xml.php' :該腳本應(yīng)主網(wǎng)頁(yè)('index.html')的請(qǐng)求,將每個(gè)消防員的可用數(shù)據(jù)轉(zhuǎn)儲(chǔ)為 XML 字符串;網(wǎng)頁(yè)每隔幾秒異步請(qǐng)求一次,以在網(wǎng)頁(yè)上可視化機(jī)組成員的信息。
“ receive_drone_task_cmd.php ”:負(fù)責(zé)從網(wǎng)頁(yè)接收無(wú)人機(jī)任務(wù)命令,并將其存儲(chǔ)在“drone_commands.xml”文件中。該文件由配套計(jì)算機(jī)中的“http_client_node”請(qǐng)求,以控制無(wú)人機(jī)的自主跟蹤任務(wù)。
'index.html' : 是主網(wǎng)頁(yè),運(yùn)行 Javascript 代碼與 Google Maps API、OpenWeatherMap API 和我們自己的網(wǎng)絡(luò)服務(wù)器進(jìn)行交互,以實(shí)現(xiàn)以下任務(wù):
- 從網(wǎng)絡(luò)服務(wù)器讀取無(wú)人機(jī)提供的所有數(shù)據(jù),并與 Google Maps API 接口以繪制地圖、火災(zāi)多邊形和代表無(wú)人機(jī)位置的所有地圖標(biāo)記、火災(zāi)模式的質(zhì)心位置以及所有消防人員的位置。
- 從網(wǎng)頁(yè)的控制面板讀取用戶發(fā)出的無(wú)人機(jī)任務(wù)命令,并將這些數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)服務(wù)器。
- 與 OpenWeatherMap API 交互,請(qǐng)求當(dāng)前天氣和預(yù)報(bào)天氣數(shù)據(jù);然后顯示在網(wǎng)頁(yè)底部(參見圖 9 和圖 10)。
Ajax 技術(shù)用于異步刷新上述所有動(dòng)態(tài)數(shù)據(jù),而無(wú)需重新加載頁(yè)面。要訪問 Google Maps API 和 OpenWeatherMap API,必須在網(wǎng)頁(yè)的源代碼中配置相應(yīng)的 API 密鑰才能訪問這兩種服務(wù)。
地圖上顯示的數(shù)據(jù)
除了前面描述的在網(wǎng)頁(yè)中可視化的對(duì)象之外,還有由地圖上的點(diǎn)擊事件觸發(fā)的其他數(shù)據(jù)。圖 11 顯示了它們。例如,當(dāng)單擊代表無(wú)人機(jī)當(dāng)前位置的地圖標(biāo)記時(shí),會(huì)出現(xiàn)一個(gè)信息窗口,顯示無(wú)人機(jī)的相對(duì)高度、地速、GPS 坐標(biāo)以及在其當(dāng)前位置測(cè)量的地面溫度。單擊代表火災(zāi)模式中心的地圖標(biāo)記時(shí),類似的信息窗口會(huì)顯示火災(zāi)覆蓋的總面積(以平方米為單位)和中心的 GPS 坐標(biāo)。通過單擊三個(gè)火災(zāi)多邊形中的任何一個(gè),相應(yīng)的信息窗口將顯示所選火點(diǎn)的覆蓋面積(以平方米為單位)以及發(fā)出鼠標(biāo)單擊的確切點(diǎn)的 GPS 坐標(biāo)。最后一項(xiàng)功能有助于輕松獲取任何被火覆蓋的點(diǎn)的 GPS 坐標(biāo),可用于規(guī)劃工作策略。最后,當(dāng)單擊任何代表機(jī)組成員的標(biāo)記時(shí),會(huì)顯示消防員的姓名、狀態(tài)(是否按下 SOS 按鈕)、ID 代碼和 GPS 坐標(biāo)。此外,當(dāng)戰(zhàn)斗機(jī)狀態(tài)為“正常”時(shí),其對(duì)應(yīng)的標(biāo)記圖標(biāo)顯示為綠色,當(dāng)狀態(tài)變?yōu)椤皫椭睍r(shí)(按下 SOS 按鈕后),標(biāo)記圖標(biāo)變?yōu)榧t色。
發(fā)展
與控制無(wú)人機(jī)相關(guān)的代碼是使用模擬開發(fā)的。我使用了 PX4 Gazebo 'Software in The Loop' (SITL) 模擬器,在安裝了 ROS melodic 的 Ubuntu 18.04 PC 上運(yùn)行。
該系統(tǒng)在模擬中進(jìn)行了廣泛的測(cè)試并且表現(xiàn)非常好。遺憾的是,直到該項(xiàng)目的最終提交日期,沒有足夠的時(shí)間來測(cè)試該系統(tǒng)與真正的無(wú)人機(jī)飛行,但它已準(zhǔn)備好進(jìn)行現(xiàn)場(chǎng)測(cè)試,這將在不久的將來進(jìn)行。
如何讓系統(tǒng)運(yùn)行
- 按照 NXP HoverGames 官方無(wú)人機(jī)構(gòu)建說明 ( https://nxp.gitbook.io/HoverGames/userguide/getting-started)構(gòu)建您的無(wú)人機(jī)。必須為無(wú)人機(jī)配置以下飛行模式:“Position”,用于安全起飛,“Offboard”用于啟用自主模式,“Return”用于將無(wú)人機(jī)返回到起飛位置,特別是嘗試在緊急情況下或電池耗盡時(shí)恢復(fù)無(wú)人機(jī)。“終止開關(guān)”還必須配置為在發(fā)生任何不可恢復(fù)或嚴(yán)重緊急情況時(shí)切斷電機(jī)電源。
- 下載適用于 Raspberry Pi 的 Ubuntu MATE 16.04 映像并將其刻錄在微型 SD 卡(至少 16GB)上,安裝所有軟件并進(jìn)行“rpi_configuration.md”文件中描述的所有配置,該文件可在項(xiàng)目的代碼存儲(chǔ)庫(kù)中找到。
- 將 ROS 工作區(qū)文件夾“airstrategist_ws”從存儲(chǔ)庫(kù)復(fù)制到“/home/pi”覆盆子目錄并編譯工作區(qū)。如果您是 ROS 新手,請(qǐng)查看參考資料部分以獲取基本 ROS 教程的鏈接。
- 打開 '/home/pi/airstrategist_ws/src/opencv_tracking/scripts' 文件夾中的 'http_client_node.py' 文件并更改對(duì)我服務(wù)器根目錄的所有引用 ('http://tec.bo/airstrategist/...' )為您的,以便將 HTTP POST 請(qǐng)求發(fā)送到您自己的服務(wù)器。
- 通過安裝 HTTP 服務(wù)器軟件和 PHP,或使用商業(yè) Web 托管服務(wù),在局域網(wǎng)中配置您自己的 Web 服務(wù)器。不需要數(shù)據(jù)庫(kù)軟件。
- 將存儲(chǔ)庫(kù)中“WebServer”文件夾中的“airstrategist”文件夾上傳到本地或 Web 托管服務(wù)器的根目錄。
- 進(jìn)行圖 5 所示的連接,并將 Raspberry Pi 配套計(jì)算機(jī)及其移動(dòng)電源安裝在無(wú)人機(jī)框架中,如圖 4a 和圖 4b 所示。
- 在您的開發(fā) PC 中安裝 Android Studio,打開 Android 應(yīng)用程序項(xiàng)目,然后在“MainActivity.java”文件中,更改對(duì)我服務(wù)器根目錄的所有引用(“http://tec.bo/airstrategist/...' )給你的。編譯并上傳應(yīng)用程序到一部或多部手機(jī)。該應(yīng)用程序使用三星 Galaxy Note 8 SM-N950F 設(shè)備進(jìn)行了測(cè)試。為其他設(shè)備型號(hào)編譯應(yīng)用程序可能需要更改目標(biāo) Android API 和其他附加配置。
- 啟動(dòng)無(wú)人機(jī),但不要武裝它。
- 通過將 Raspberry Pi 連接到其移動(dòng)電源來啟動(dòng)它。它使用 2 節(jié)鋰離子 18650 電池“移動(dòng)電源”,因此無(wú)人機(jī)可以在無(wú)需關(guān)閉配套計(jì)算機(jī)的情況下更換電池。
-
至少在兩個(gè)單獨(dú)的終端窗口中從您的 PC 中打開到 Raspberry Pi 的 SSH 連接。在第一個(gè)窗口中運(yùn)行 MAVROS 'px4.launch' 啟動(dòng)文件;此文件運(yùn)行 ROS 服務(wù)器并實(shí)例化 MAVROS 節(jié)點(diǎn)以通過 ROS 消息與無(wú)人機(jī)的飛行控制器進(jìn)行通信。在第二個(gè)終端窗口中運(yùn)行“hovergames_drone.launch”文件;此文件運(yùn)行為項(xiàng)目編寫的所有 ROS 節(jié)點(diǎn)。運(yùn)行此代碼后,Web 服務(wù)器將開始接收所有數(shù)據(jù),主網(wǎng)頁(yè)將位于“http://
/airstrategist/”; 可以通過任何網(wǎng)絡(luò)瀏覽器訪問。我用 Chrome 和 Firefox 測(cè)試了頁(yè)面沒有問題。查看上面的視頻演示,了解有關(guān)在模擬中熱運(yùn)行它的說明。 - 在移動(dòng)設(shè)備中打開 Android 應(yīng)用程序。該應(yīng)用程序?qū)@示包含該地圖的同一網(wǎng)頁(yè)。單擊“開始位置”。跟蹤”按鈕開始將您的移動(dòng)設(shè)備的 GPS 坐標(biāo)和其他數(shù)據(jù)發(fā)送到服務(wù)器。幾秒鐘后,您的位置將作為綠色標(biāo)記出現(xiàn)在地圖上。
- 將遙測(cè)模塊連接到您的 PC 并打開 QGroundControl 以連接無(wú)人機(jī)。
- 武裝無(wú)人機(jī)并以“位置”飛行模式起飛到方便的高度進(jìn)行測(cè)試。對(duì)于測(cè)試,跟蹤高度固定為 10 米,文件中的“OFFBOARD_FLYING_ALTITUDE”常量來更改此高度。為安全起見,除非您知道自己在做什么,否則請(qǐng)勿在海拔超過 15 米的地方使用真正的無(wú)人機(jī)測(cè)試系統(tǒng)。
- 一旦無(wú)人機(jī)到達(dá)所需高度,通過遙控發(fā)射器或地面控制軟件將無(wú)人機(jī)的飛行模式更改為“離機(jī)”,進(jìn)行自主飛行,無(wú)人機(jī)將開始跟蹤選定的目標(biāo);再次更改為“位置”模式以脫離自主飛行并重新獲得手動(dòng)控制。
- 使用遙控器手動(dòng)降落無(wú)人機(jī),或?qū)w行模式更改為“返回”,無(wú)人機(jī)將返回起飛點(diǎn)。
警告:建議使用適當(dāng)?shù)脑隽繙y(cè)試/調(diào)試策略,從第一個(gè)到最后一個(gè)分別仔細(xì)測(cè)試所有描述的步驟,以確保所有軟件和硬件正常工作;在沒有適當(dāng)測(cè)試的情況下在真正的無(wú)人機(jī)上運(yùn)行系統(tǒng)可能非常危險(xiǎn)。您可以使用“testing_in_simulation.md”文件中詳述的工作流程在模擬中首先測(cè)試系統(tǒng)。
結(jié)論和未來的改進(jìn)
該系統(tǒng)在仿真中表現(xiàn)得非常好。還需要用真正的四軸飛行器進(jìn)行廣泛的現(xiàn)場(chǎng)測(cè)試。計(jì)算機(jī)視覺火災(zāi)追蹤效果很好;雖然火災(zāi)檢測(cè)算法容易出現(xiàn)誤報(bào),因?yàn)橄鄼C(jī)還可以檢測(cè)來自其他來源的紅外光。當(dāng)然,普通的紅外熱像儀并不是探測(cè)火災(zāi)的最佳方式。然而,它非常適合構(gòu)建這個(gè)“概念驗(yàn)證”原型的目的。HoverGames 無(wú)人機(jī)硬件成本低廉且相對(duì)實(shí)惠。無(wú)人機(jī)本身經(jīng)過了廣泛的測(cè)試(盡管沒有足夠的時(shí)間與系統(tǒng)的其余部分進(jìn)行測(cè)試)并且性能非常好。它對(duì)開發(fā)非常有用;然而,在某些情況下,對(duì)硬件進(jìn)行一些升級(jí)是可取的,甚至是必要的。Raspberry Pi 3 B+ 配套計(jì)算機(jī)很好地管理了所有計(jì)算任務(wù)。有必要安裝散熱器和冷卻風(fēng)扇。在沒有散熱風(fēng)扇的情況下,處理器溫度輕松升高到 60+°C;隨著冷卻風(fēng)扇的出現(xiàn),溫度降至 48°C 左右。
我希望將來對(duì)系統(tǒng)進(jìn)行的一些改進(jìn)如下:
- 用合適的熱像儀升級(jí)系統(tǒng)會(huì)很棒;火災(zāi)識(shí)別代碼所需的更改將是最小的。
- 可以添加一個(gè) GPRS 調(diào)制解調(diào)器,也許還可以添加一個(gè)備用 LoraWAN 連接,這樣它就可以在偏遠(yuǎn)地區(qū)工作。
- 使無(wú)人機(jī)不時(shí)自動(dòng)改變高度和方向,以獲得額外的地面視角。
- 使用測(cè)得的地面溫度來調(diào)整無(wú)人機(jī)的高度。眾所周知,熱量會(huì)降低空氣密度,從而降低升力(空氣動(dòng)力)。如果空氣太熱,無(wú)人機(jī)應(yīng)該爬升到更高的高度以提高升力并使用更少的電池電量,從而保持飛行自主權(quán)。
- 實(shí)現(xiàn)無(wú)人機(jī)在火區(qū)上空的自動(dòng)起飛和重新定位會(huì)很棒,尤其是在更換電池之后。無(wú)人機(jī)起飛后會(huì)進(jìn)行相機(jī)平移,以檢測(cè)火區(qū)。然后飛過它繼續(xù)跟蹤任務(wù)。
- 使用機(jī)器學(xué)習(xí)和人工智能實(shí)施在線數(shù)據(jù)庫(kù)來存儲(chǔ)歷史數(shù)據(jù)以供進(jìn)一步分析。
?
- 國(guó)際形勢(shì)突變,中國(guó)芯片公司 能否“風(fēng)景這邊獨(dú)好” 1次下載
- 為NXP Hovergames3開發(fā)的AutoSQA項(xiàng)目文章
- 帶有AppSheet的IoT健康伴侶應(yīng)用
- 機(jī)器人伴侶掛件
- 輕松DIY伴侶機(jī)器人構(gòu)建
- 紙板伴侶機(jī)器人開源分享
- HoverGames 2特別獎(jiǎng)得主
- 微芯片PIC18F87J10家庭數(shù)據(jù)表 2次下載
- 基于航跡數(shù)據(jù)的空中交通管制自動(dòng)化系統(tǒng) 7次下載
- 2.4GHz RFID空中接口協(xié)議的詳細(xì)資料說明 13次下載
- 空中下載在移動(dòng)互聯(lián)網(wǎng)中的應(yīng)用 19次下載
- THD鋰電池伴侶(單節(jié)型)
- U盤伴侶 EasyUDisk讀寫U盤模塊
- TDMA空中接口技術(shù) 0次下載
- 工程驗(yàn)收小伴侶1.2
- 用光子連接懸浮在真空中的納米粒子,并控制它們之間的相互作用 542次閱讀
- T900數(shù)傳模塊的空中速率和串口速率如何配置 1703次閱讀
- 基于OFDM技術(shù)的LTE空中接口物理層的研究 1973次閱讀
- 大型組織如何使用數(shù)據(jù)和分析來指導(dǎo)戰(zhàn)略和運(yùn)營(yíng)決策? 4019次閱讀
- ZETAOTA提供遠(yuǎn)程升級(jí)服務(wù) 提高實(shí)用性 744次閱讀
- dfrobot 空中飛鼠鍵盤介紹 2860次閱讀
- 手機(jī)信號(hào)放大器是什么 6025次閱讀
- 如何實(shí)現(xiàn)空中喚醒LoRa和如何通過CAD來實(shí)現(xiàn)LoRa的資料概述 7630次閱讀
- 百度、阿里、騰訊、華為四家巨頭的自動(dòng)駕駛發(fā)展戰(zhàn)略分析 9214次閱讀
- 夜空中最明亮的星!自制星光瓶全教程 1w次閱讀
- 智能汽車發(fā)展戰(zhàn)略起草工作啟動(dòng) 3772次閱讀
- 總結(jié)谷歌、微軟和亞馬遜三家巨頭公司的戰(zhàn)略和戰(zhàn)術(shù) 7706次閱讀
- 無(wú)線網(wǎng)絡(luò)AI戰(zhàn)略應(yīng)該包含的六大技術(shù)要素解析 5659次閱讀
- 空中鼠標(biāo)原理及問題 8217次閱讀
- 藍(lán)牙4.0 超低功耗藍(lán)牙空中鼠標(biāo)解決方案 2953次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多