設(shè)計(jì)一個(gè)設(shè)備:使用一個(gè)安裝在云臺(tái)上的距離傳感器來(lái)測(cè)量墻壁,并用可見(jiàn)激光在墻上顯示用戶自定義的一組點(diǎn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
用手在墻上測(cè)量和布置點(diǎn)是很困難的,這是我們大多數(shù)人都曾在某些時(shí)候掙扎過(guò)的事情。一個(gè)人可能不得不使用梯子從天花板開(kāi)始測(cè)量,或者他們可能需要在墻壁的整個(gè)寬度上創(chuàng)造均勻間隔的洞。由于結(jié)構(gòu)的不對(duì)準(zhǔn),氣泡水準(zhǔn)儀和鉛錘等基于重力的調(diào)平工具可能不準(zhǔn)確。目前可用的計(jì)算機(jī)化激光調(diào)平裝置非常昂貴。我在這個(gè)項(xiàng)目中的目標(biāo)是創(chuàng)造一個(gè)輕量、低成本的設(shè)備,可以放置在墻前,計(jì)算墻上的點(diǎn),而不管設(shè)備相對(duì)于結(jié)構(gòu)的方向如何。這是CNM Ingenuity提供的物聯(lián)網(wǎng)/快速原型訓(xùn)練營(yíng)的頂點(diǎn)項(xiàng)目。
功能
五個(gè)組件是該設(shè)備功能的關(guān)鍵(除了粒子光子2微控制器)-步進(jìn)電機(jī),2軸模擬操縱桿,OLED顯示器,可見(jiàn)激光二極管和ST微電子的VL53L1X飛行時(shí)間距離傳感器。云臺(tái)由兩個(gè)步進(jìn)電機(jī)驅(qū)動(dòng)(每個(gè)軸一個(gè))。馬達(dá)采取的每一步都以一個(gè)已知的角度旋轉(zhuǎn)萬(wàn)向節(jié),這是用于布置點(diǎn)的三角函數(shù)的關(guān)鍵之一。另一個(gè)是法向量到壁的長(zhǎng)度,由VL53測(cè)量。操縱桿允許用戶將萬(wàn)向節(jié)驅(qū)動(dòng)到墻的角落,消除了計(jì)劃的角落檢測(cè)方法,這與項(xiàng)目組件固有的精度水平是不可能的。激光二極管直觀地表示萬(wàn)向節(jié)指向的位置。操作過(guò)程中指令顯示在OLED顯示屏上。
VL53L1X飛行時(shí)間距離傳感器
這種傳感器使用一種叫做“飛行時(shí)間”(ToF)的原理來(lái)測(cè)量光子發(fā)射、反射和探測(cè)所需的時(shí)間。接收器有一個(gè)可配置的視場(chǎng)(通過(guò)與API交互,從默認(rèn)的27°降至15°)。它提供相當(dāng)精確的點(diǎn)距離測(cè)量(在傳感器的最大范圍內(nèi)誤差約為5cm,約為4米)。它通過(guò)I2C進(jìn)行通信,允許無(wú)縫集成到物聯(lián)網(wǎng)設(shè)備中。它的低成本和小占地面積使其成為輕量級(jí)應(yīng)用的理想選擇。
28BYJ-48步進(jìn)電機(jī)
本項(xiàng)目采用的低成本步進(jìn)電機(jī)有32個(gè)內(nèi)部位置。為了減少每一步的角度旋轉(zhuǎn),1/64的傳動(dòng)比是內(nèi)置的。完成一個(gè)完整的旋轉(zhuǎn)需要2048步,這意味著每一步將電機(jī)旋轉(zhuǎn)約0.176°。這對(duì)于這個(gè)應(yīng)用程序來(lái)說(shuō)是相當(dāng)準(zhǔn)確的。然而,這些電機(jī)有一個(gè)問(wèn)題,導(dǎo)致這個(gè)項(xiàng)目的重大問(wèn)題(下面討論)。
2軸模擬操縱桿
這些操縱桿通常在游戲主機(jī)控制器中被用作拇指控制。我把我的安裝在一個(gè)由切特·約翰斯頓設(shè)計(jì)的3d打印的房子里(在Thingiverse上可以找到——非常感謝切特的偉大設(shè)計(jì)!)操縱桿包含一個(gè)按鈕和2個(gè)電位器(每個(gè)軸一個(gè)),返回0-4095的模擬值,這取決于他們?cè)谶\(yùn)動(dòng)范圍的哪一邊。操縱桿是這個(gè)設(shè)備的唯一控制裝置。它允許用戶手動(dòng)驅(qū)動(dòng)萬(wàn)向節(jié),點(diǎn)擊操縱桿允許用戶通過(guò)程序流程進(jìn)行操作。我還編寫了允許用戶在布局模式設(shè)置期間選擇和輸入值的代碼。
OLED顯示器
這個(gè)128x64顯示器通過(guò)I2C進(jìn)行通信。有限的屏幕尺寸需要簡(jiǎn)明的說(shuō)明。Switch/case語(yǔ)句控制在程序運(yùn)行的任何給定點(diǎn)顯示哪些指令。
可見(jiàn)激光二極管
這個(gè)小的激光二極管從Adafruit運(yùn)行在3V3電源,可以很容易地打開(kāi)或關(guān)閉使用數(shù)字輸入通過(guò)TIP120晶體管。它的小尺寸,低價(jià)格,和體面的光束質(zhì)量使它非常適合這種應(yīng)用。
程序流
歸一化
打開(kāi)設(shè)備后,萬(wàn)向節(jié)開(kāi)始一個(gè)正常化的過(guò)程。首先,它掃過(guò)x軸,尋找ToF傳感器測(cè)量到的最短距離。一旦找到這個(gè)點(diǎn),在x最小值上下的y軸上重復(fù)這個(gè)過(guò)程。X和Y距離最短的點(diǎn)表示從云臺(tái)到墻壁的法向量(垂直向量)。這個(gè)點(diǎn)是云臺(tái)坐標(biāo)系的原點(diǎn)。測(cè)量的距離被儲(chǔ)存起來(lái)供計(jì)算。
Manualdrive
找到法向量后,用戶必須使用操縱桿將萬(wàn)向節(jié)驅(qū)動(dòng)到房間的左下角、左上角和右上角。因?yàn)樵c(diǎn)(0,0)在法線點(diǎn)上,所以到達(dá)X和Y上每個(gè)角的步數(shù)是已知的(因此到達(dá)這些角的角度也是已知的)。
Wallcalculations
在確定了墻上的點(diǎn)之后,計(jì)算就開(kāi)始了。要更全面地了解這個(gè)項(xiàng)目背后的數(shù)學(xué)原理,請(qǐng)查看GitHub的repo。
模式選擇和用戶輸入
系統(tǒng)提示用戶選擇一種模式并使用拇指桿輸入值。目前只支持Free Grid模式。該模式允許用戶輸入X和Y偏移量、行和列的數(shù)量以及行和列之間的間隙。
點(diǎn)計(jì)算
然后,該設(shè)備使用歸一化向量計(jì)算這些點(diǎn)在墻上的位置。然后用可見(jiàn)激光一次顯示一個(gè)這些點(diǎn)。用戶點(diǎn)擊操縱桿進(jìn)入下一個(gè)點(diǎn)。完成后,最后的點(diǎn)擊驅(qū)動(dòng)萬(wàn)向節(jié)回到法向量。
限制和潛在的解決方案
步進(jìn)電機(jī)坡度
當(dāng)旋轉(zhuǎn)方向改變時(shí),齒輪齒之間的小空間導(dǎo)致運(yùn)動(dòng)損失。這就是所謂的反彈,發(fā)揮,或傾斜。
我使用的馬達(dá)有正常的斜率,我用橡皮筋把x軸拉向一個(gè)方向。對(duì)于y軸,懸掛在云臺(tái)上的金屬絲的重量通常會(huì)使y軸向上拉。
然而,在這些電機(jī)中存在第二個(gè)“斜坡”或死區(qū),通常發(fā)生在電機(jī)方向改變后的20°或更多。由于傳動(dòng)系統(tǒng)的進(jìn)動(dòng),這個(gè)死區(qū)可能會(huì)延遲。正常的斜坡不是什么大問(wèn)題,但死區(qū)給這個(gè)設(shè)備帶來(lái)了嚴(yán)重的問(wèn)題。處理污水的方法有很多,但大多數(shù)都假定污水會(huì)立即被處理掉。事實(shí)上,它在我的馬達(dá)運(yùn)動(dòng)的不同點(diǎn)上占用,使得上面描述的規(guī)范化過(guò)程變得困難。
VL53L1X準(zhǔn)確性
盡管VL53L1X在規(guī)模、精度和成本方面令人印象深刻,但它并不完美。Adafruit創(chuàng)建了一個(gè)輕量級(jí)的庫(kù),它從ST創(chuàng)建的API中暴露了一些基本的測(cè)量函數(shù)。ST API包含許多方法,可用于提高某些應(yīng)用程序的精度。不幸的是,我缺乏必要的C經(jīng)驗(yàn),無(wú)法深入研究SPAD/ROI配置和其他校準(zhǔn)功能等API。這是在不使用更昂貴的激光雷達(dá)傳感器的情況下提高該項(xiàng)目精度的主要方法之一。
當(dāng)使用這些傳感器時(shí),環(huán)境光條件和表面反射率是重要的考慮因素。房間可能暴露在陽(yáng)光下,這會(huì)對(duì)準(zhǔn)確性產(chǎn)生負(fù)面影響。表面反射率和紋理也有影響。傳感器返回的值在某種程度上是可變的,所以我對(duì)多次測(cè)量進(jìn)行了一些平均,以減少誤差。平均后,傳感器在我用于測(cè)試的尺度(高、寬約1米的模擬墻)上的精度在1-2mm以內(nèi)。這種差異使得歸一化變得困難,因?yàn)閭鞲衅骺赡軙?huì)在幾個(gè)度的弧度上讀取相同的值。由于時(shí)間限制,我實(shí)現(xiàn)了一個(gè)臨時(shí)解決方案,導(dǎo)致在尋找法向量時(shí)誤差約2cm。這種方法檢查至少兩個(gè)連續(xù)的距離讀數(shù)大于或等于前一個(gè),然后將電機(jī)步進(jìn)到類似值范圍的中間點(diǎn)。
線拖
因?yàn)檫@個(gè)設(shè)備是一個(gè)原型,我有幾個(gè)星期的時(shí)間來(lái)完成,電線布線不是一個(gè)考慮因素。6根電線連接到云臺(tái)- 4用于ToF傳感器和2用于可見(jiàn)激光器。目前,這些電線從萬(wàn)向架的背面搖擺,是相當(dāng)僵硬的,因?yàn)槲覜](méi)有獲得非常小規(guī)格的電線。由于馬達(dá)很快,如果我的步進(jìn)代碼出錯(cuò),很容易把萬(wàn)向架包裹在電線中。在開(kāi)發(fā)過(guò)程中,設(shè)備甚至在我拔掉插頭之前就把自己的電線拔掉了。
對(duì)于萬(wàn)向節(jié)來(lái)說(shuō),沒(méi)有電線的解決方案是最好的,但它不適合這樣的項(xiàng)目。在這個(gè)設(shè)備的未來(lái)迭代中,我將使用滑環(huán)通過(guò)萬(wàn)向節(jié)傳輸能量和數(shù)據(jù)。這將允許它自由旋轉(zhuǎn),給它一個(gè)完整的運(yùn)動(dòng)范圍,使像房間掃描模式成為可能。
激光/傳感器校準(zhǔn)
我遇到的另一個(gè)困難是確??梢?jiàn)激光的位置實(shí)際上是指向萬(wàn)向節(jié)“看”的地方。我設(shè)計(jì)了這樣的框架,激光和傳感器安裝是平行的。傳感器安裝在由Adafruit創(chuàng)建的分?jǐn)喟迳?,所以我?chuàng)建了一個(gè)平面來(lái)安裝它。我把橡膠管周圍的螺絲,我用來(lái)連接它,并收緊了管板下來(lái)。油管的反彈將木板推到螺絲的背面,使我能夠?qū)战沁M(jìn)行微調(diào)。由于傳感器的紅外激光在沒(méi)有紅外相機(jī)的情況下是看不見(jiàn)的,因此不可能獲得真正的對(duì)齊。相反,我使用參考曲面使其接近真正的平行線。
我用固定螺絲把可見(jiàn)激光器安裝在一個(gè)掛在傳感器下面的桶里。激光和傳感器的光束彼此相距約1厘米,這是我在不可能在傳感器的斷線板上鉆洞的情況下盡可能接近它們的距離。我接受這個(gè)偏移量作為項(xiàng)目的一個(gè)怪癖,如果這真的是一個(gè)精確的應(yīng)用程序,我會(huì)在我的計(jì)算中使用偏移量每當(dāng)激光點(diǎn)的位置重要(手動(dòng)驅(qū)動(dòng)和點(diǎn)顯示)。
三維投影
這是我第一次使用萬(wàn)向節(jié)。在我看來(lái),只需要幾個(gè)已知的值就可以完全描述墻與傳感器的關(guān)系。不幸的是,事實(shí)并非如此。當(dāng)接近法向量時(shí),云臺(tái)的行為正常,但當(dāng)它遠(yuǎn)離時(shí),相對(duì)于云臺(tái)的觀點(diǎn),墻壁的傾斜變得明顯。當(dāng)激光沿著壁面頂部的x軸直線驅(qū)動(dòng)時(shí),所描述的直線是一個(gè)圓錐截面。因此,計(jì)算出的點(diǎn)也相對(duì)于墻的傾斜度發(fā)生了傾斜。
為了獲得一條真正的直線(物理上和計(jì)算上),需要在傳感器坐標(biāo)和墻壁坐標(biāo)之間進(jìn)行3D投影/轉(zhuǎn)換。這超出了我的能力范圍(目前)。這個(gè)問(wèn)題是我在設(shè)計(jì)和構(gòu)建這個(gè)項(xiàng)目的后期才發(fā)現(xiàn)的,所以我不能完全解釋清楚。我能夠通過(guò)繪制接近法向量的點(diǎn)得到一個(gè)不錯(cuò)的結(jié)果,這證明我至少能夠計(jì)算相對(duì)于墻的角落的點(diǎn)。
未來(lái)的改進(jìn)
?正確的3D投影
如果我弄清楚了這一點(diǎn),這個(gè)項(xiàng)目就會(huì)運(yùn)行得非常好(考慮到所有其他挑戰(zhàn))。
?更好的組件
移除中距離盲區(qū)將大大改善功能。
更好的距離傳感器(如激光雷達(dá))。
由于誤差范圍較小,準(zhǔn)確測(cè)量正常值將更容易,我還可以使用提高的精度來(lái)獲得點(diǎn)測(cè)量,完全消除了手動(dòng)駕駛的需要。滑環(huán)可以消除電線的阻力,并允許不受限制的運(yùn)動(dòng)。
使它自導(dǎo)向——幾種可能的方法:
?使用霍爾傳感器檢測(cè)萬(wàn)向節(jié)位置
?用陀螺儀測(cè)量螺距,使y軸水平
?使用EEPROM存儲(chǔ)并返回到一組已知步驟(從最后一個(gè)位置,它是在被關(guān)閉之前)
更多的模式
螺柱模式:找到一個(gè)螺柱,驅(qū)動(dòng)到它,并用激光線二極管顯示所有其他螺柱。
邊緣/角落檢測(cè)-用于房間映射和其他類似的應(yīng)用。
多房間模式-用于確定房間之間的連續(xù)性。房間尺寸和相對(duì)位置(通過(guò)加速度計(jì)收集)可以存儲(chǔ)在內(nèi)存中,以創(chuàng)建連接內(nèi)部空間的工作模型。
本文編譯自hackster.io