陳小順 魏子韜
關(guān)鍵詞: 巡線定位;STM32F103;人機(jī)交互;QRCode
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2024)03-0011-04
0 引言
物聯(lián)網(wǎng)沙盤可以用來構(gòu)建樓盤、城市、工廠、農(nóng)業(yè)、交通系統(tǒng)或其他復(fù)雜的環(huán)境,嵌入傳感器與執(zhí)行器,通過系統(tǒng)控制交互,模擬真實(shí)世界各種情境。通常沙盤平臺的大小比例固定,運(yùn)行在沙盤道路上的循跡車多以黑白軌跡循跡方式呈現(xiàn),物聯(lián)網(wǎng)系統(tǒng)操作復(fù)雜,交互手段單一,缺乏交互性能[1]。循跡車作為傳統(tǒng)單片機(jī)項(xiàng)目,隨著單片機(jī)性能提升,ROS的發(fā)展,以機(jī)器視覺為主的循跡車在各個(gè)行業(yè)扮演著越來越重要的角色,車輛能夠循跡定位的方法眾多。朱林海等人使用光電傳感器檢測道路位置,進(jìn)而控制小車循跡行進(jìn)[2]。聶寧等人使用TSL1401線性CCD實(shí)時(shí)獲取車道線信息,控制車輛循跡[3]。徐鵬飛等人通過機(jī)器學(xué)習(xí)方法,使用Lenet-5神經(jīng)網(wǎng)絡(luò)模型,訓(xùn)練道路數(shù)據(jù),完成循跡功能[4]。楊璞采用基于RGB-SLAM方法對機(jī)器人進(jìn)行室內(nèi)定位,進(jìn)而完成循跡與定位控制[5]。黃鳳英采用RFID室內(nèi)定位技術(shù),通過無源RFID系統(tǒng)與標(biāo)簽反射鏈路通信過程計(jì)算得出具體物體位置,進(jìn)而控制車輛行進(jìn)[6]。程智余等人提出基于AprilTag二維碼定位和IMU信息融合的機(jī)器人室內(nèi)定位技術(shù),能夠精準(zhǔn)獲取機(jī)器人姿態(tài)誤差,完成室內(nèi)定位及軌跡修正[7]。
1 地圖塊與識別車設(shè)計(jì)
1.1 地圖塊設(shè)計(jì)
如圖1 所示,一個(gè)地圖塊的長寬高為10×10×3.5cm,分為地圖塊蓋板和地圖塊底部兩部分,地圖蓋板厚度為0.5 cm,地圖塊厚度為3 cm,地圖塊蓋板頂部用于噴繪地圖。蓋板底部和地圖塊采用圓形薄片釹磁鐵吸合,地圖塊四周按照N、S磁極順序排列。
根據(jù)不同風(fēng)格主題,設(shè)計(jì)不同類型地圖塊,將各個(gè)地圖塊拼接形成完整的地圖,如表1所示,道路類型編碼預(yù)留數(shù)量可包含20種,分別為:泥路、水泥路、柏油路、石子路、可行駛草地、水路、橋……
如圖2所示,將地圖塊按照地圖類型吸合成為大型地圖,識別車根據(jù)地圖碼運(yùn)行于地圖塊上。
1.2 QRCode 地圖編碼設(shè)計(jì)
QRCode即二維碼(如圖3所示),是日常生活中使用最頻繁的編碼類型,在一個(gè)矩形平面上通過黑、白像素點(diǎn)在矩陣中的不同行列的分布對信息進(jìn)行編碼[8]。
選取編碼為170號的道路地圖塊為例,將地圖塊蓋板頂部劃分為5×5網(wǎng)格區(qū)域,按照公式1所示內(nèi)容填充網(wǎng)格區(qū)域二維碼數(shù)據(jù)。
A = a + x*215+ y*212(1)
其中,A為對應(yīng)網(wǎng)格區(qū)域中方格的內(nèi)部數(shù)值及名稱,(x , y)為自右下角起的A方格坐標(biāo),a 為表1中該地圖塊類型編碼。
如圖4所示,地圖塊網(wǎng)格右下角顯示地圖塊類型為編號170,自右下角開始,從右向左每列遞增32 768 即 215,從下至上每行遞增4 096 即212。存放在二維碼中供以識別車識別的數(shù)據(jù)即為圖4中網(wǎng)格數(shù)據(jù)。
識別車進(jìn)一步處理數(shù)據(jù),將5×5的網(wǎng)格區(qū)域數(shù)據(jù)轉(zhuǎn)換為18位二進(jìn)制。如圖5所示,其中每個(gè)二進(jìn)制的低9位為地圖的類型碼,高6位為地圖塊坐標(biāo)碼,中間為保留字段。識別車將在該地圖塊所識別的編碼與二進(jìn)制000, 000, 000, 111, 111, 111做與運(yùn)算,即可得當(dāng)前地圖塊編號。
如圖5 所示,地圖編碼右移12 位后,與二進(jìn)制000, 111做與運(yùn)算,可得所在列坐標(biāo),與二進(jìn)制111,000做與運(yùn)算可得所在行坐標(biāo)。
如圖6所示,坐標(biāo)(2,2)為地圖塊中心,坐標(biāo)行列中含數(shù)字2的點(diǎn)碼組成十字形狀,根據(jù)地圖塊的組合,即可形成網(wǎng)狀路徑。識別車可根據(jù)掃描識別的坐標(biāo)值完成巡線與定位。
編碼為170的泥路地圖塊如圖7所示,背景圖片大小與地圖塊蓋板大小一致 (10×10 cm) ,背景圖片劃分5×5 個(gè)1×1 cm 的二維碼區(qū)域,通過Python qrcode 庫,按照編碼排列公式,批量生成每個(gè)地圖塊中的25 個(gè)二維碼編碼。
將編碼融合于地圖背景中,每個(gè)二維碼編碼由透明背景顏色和編碼顏色兩個(gè)部分組成,編碼顏色根據(jù)背景圖片設(shè)為相近顏色。使用Pillow庫的ImageColor 模塊,將背景圖像轉(zhuǎn)換為RGB模式。代碼調(diào)用getcol?ors()函數(shù)計(jì)算每個(gè)二維碼的1×1cm區(qū)域圖像中每個(gè)像素的顏色,并對其進(jìn)行計(jì)數(shù),獲取圖像中最多顏色,記作C。在一張RGB圖片,像素值的范圍是0~255,其中0表示最暗,255表示最亮。
如公式(2) 所示,取顏色C三個(gè)通道計(jì)算C平均值,根據(jù)平均值計(jì)算二維碼編碼顏色Cnew,使得二維碼顏色與背景顏色形成對比,背景顏色較暗時(shí),二維碼顏色較亮,背景顏色較亮?xí)r,二維碼顏色較暗。使用Pillow庫的Image.putalpha()方法,調(diào)整二維碼圖像的透明度為65%,背景圖片透明度為0%,使用Image.blend()方法融合二維碼與背景。
如圖8所示,將不同類型的地圖塊吸合在一起組合成一個(gè)拔蘿卜的場景地圖。如圖9所示,地圖塊之間依靠磁片吸合,識別車運(yùn)行于地圖塊上。
1.3 識別車框架設(shè)計(jì)
硬件總體結(jié)構(gòu)框架如圖10 所示,識別車采用STM32F103 為控制核心,以XM1605CMOS 圖像傳感器、VL6180X光學(xué)激光測距傳感器組成點(diǎn)碼采集模塊,用于采集地圖信息??刂破鞲鶕?jù)接收到的信息,解碼識別當(dāng)前地圖塊所含信息,控制執(zhí)行模塊完成巡線,在OLED顯示屏上顯示地圖信息,通過ASR語音模塊播報(bào)當(dāng)前位置信息。使用者通過ASR語音模塊語音喚醒詞與設(shè)備交互。
地圖點(diǎn)碼識別由XM1605 CMOS 圖像傳感器完成,傳感器擁有640×480像素分辨率,通過串行信號控制采集QRCode數(shù)據(jù),識別景深4.0~18.0 cm,最小識別10×10 mm二維碼,可接受360°旋轉(zhuǎn)、傾斜±45°、偏轉(zhuǎn)±45°解碼識別。主要有VCC(供電3.3V)、RX(串口接收)、TX(串口發(fā)送)、DM(USB D-)、DP(USB D+)、TRIG(識別信號觸發(fā))。
VL6180X光學(xué)激光測距傳感器,采用時(shí)鐘信號控制測量光從物體表面反彈所需時(shí)間,進(jìn)而判斷物體接近程度,測量范圍5~100 mm,使用I2C通信模式。
ASR語音模塊內(nèi)置FLASH4MB,包含RNN算法,支持完成語音識別、聲紋識別、語音增強(qiáng)、語音檢測、360°拾音等功能。內(nèi)置39種合成人物語音播報(bào)聲,語音識別距離10m,識別響應(yīng)時(shí)間小于0.1s。語音指令分為歡迎詞、喚醒詞、命令詞、回復(fù)詞4個(gè)部分,外接麥克風(fēng)、喇叭完成語音控制及反饋。
OLED顯示屏分辨率128×64,使用SSD1306控制芯片,采用I2C通信模式,顯示顏色為藍(lán)色。
圖11中識別車頂部通過卡口與螺絲與識別車中部固定連接,頂部前端固定安裝液晶顯示屏和LED燈條。
圖12中,識別車中部與識別車底部通過螺絲固定連接,在識別車中部上端嵌入圖像傳感器用以掃描識別地圖碼,識別車中部上端固定安裝揚(yáng)聲器、麥克風(fēng)、集成語音控制模塊。
如圖13所示,識別車底部兩側(cè)固定安裝N20電機(jī)與車輪,電機(jī)中間安裝有VL6180X光學(xué)激光測距傳感器,底部后端固定安裝萬向輪,底部上端固定安裝鋰電池與電機(jī)驅(qū)動模塊,識別車長寬分別為10×10×8 cm。
1.4 識別車功能設(shè)計(jì)
識別車具有識別地圖塊信息、定位、巡線、語音交互、狀態(tài)顯示功能。
識別車CMOS圖像傳感器識別口距離地圖碼高5cm,地圖碼排列密度可保證識別車識別口范圍內(nèi)至少可以完整顯示一個(gè)二維碼。識別車啟動后,當(dāng)激光測距傳感器檢測車輛已放置平面,啟動圖像傳感器檢測點(diǎn)碼,通過運(yùn)算得出識別車所在地圖塊類型。通過點(diǎn)碼識別確認(rèn)當(dāng)前車輛大致位置,車身原地順時(shí)針旋轉(zhuǎn),同時(shí)開啟圖像傳感器檢測點(diǎn)碼,根據(jù)坐標(biāo)變化確定當(dāng)前識別車的方位,旋轉(zhuǎn)并移動識別車,使得車頭朝向正右方,識別口正下方坐標(biāo)為(1,2)。
表2中記錄人機(jī)交互中,語音控制部分的語音指令,通過語音指令控制,可以控制車輛行駛于地圖上。
如圖14所示,識別車打開電源開關(guān),通電啟動。語音模塊播報(bào)歡迎信息。點(diǎn)碼采集模塊判斷車輛是否在地圖上,若在地圖上,則順時(shí)針旋轉(zhuǎn)進(jìn)行位置校正,確定初始位置后,播報(bào)并顯示當(dāng)前地圖信息,否則進(jìn)行語音提示,告知用戶將車輛放置于地圖上。隨后進(jìn)入循環(huán),等待用戶語音指令,例如:前進(jìn)1格、向左轉(zhuǎn)、向右轉(zhuǎn)、后退1格等命令,車輛結(jié)合當(dāng)前所在地圖位置完成指令動作,并將執(zhí)行信息語音播報(bào)并實(shí)時(shí)顯示。
2 結(jié)論
在沙盤場景中,靈活性、復(fù)用性使得沙盤主題豐富,通過集成語音模塊,車輛依據(jù)點(diǎn)碼信息識別所在地圖塊信息后,通過揚(yáng)聲器播報(bào)當(dāng)前信息,麥克風(fēng)獲取用戶指令,在液晶屏上顯示文字信息, LED燈條顯示運(yùn)行狀態(tài),如此整體達(dá)到了識別車與用戶交互的功能。通過地圖塊四周按照NS極性順序設(shè)置有磁鐵,在需要更換地圖大小形狀時(shí)僅需將地圖塊重新排列吸合成所需形狀,地圖蓋板根據(jù)新地圖場景重新貼鋪。在需要更換地圖場景時(shí),僅需將已完成的場景蓋板從地圖塊上摘下,從而可回收未損壞的設(shè)備材料,進(jìn)行二次利用,從而節(jié)約設(shè)備材料資源,當(dāng)?shù)貓D塊蓋板受損需要進(jìn)行維修時(shí),因設(shè)置有磁貼,直接摘下即可更換新的地圖蓋板,如此整體達(dá)到便于維修更換主題的優(yōu)點(diǎn)。通過地圖蓋板已噴繪融合二維碼的地圖信息組成的平臺場景,配以識別車,車輛通過圖像傳感器,依據(jù)點(diǎn)碼排列信息識別所在地圖塊信息,包含車輛當(dāng)前所在地圖塊位置、地圖塊類型信息。通過車輛原地旋轉(zhuǎn)掃描識別獲取地圖位置信息,進(jìn)而調(diào)整車輛基準(zhǔn)方向與位置,如此整體達(dá)到識別車與地圖交互的優(yōu)點(diǎn)。
【通聯(lián)編輯:唐一東】