手?jǐn)€一臺(tái)掃地機(jī)器人:三條路線全解析)
如果你想擁有一臺(tái)真正屬于自己的掃地機(jī)器人可能并不需要等到什么大促再去搶一臺(tái)旗艦成品機(jī)。市面上既有買來(lái)就直接用的現(xiàn)成掃地機(jī)器人也有“半成品”級(jí)別的開(kāi)源套件更可以像攢電腦一樣從電機(jī)、傳感器、輪子、控制板一步步攢出一臺(tái)專屬于你自己的機(jī)器。這篇文稿講的就是三條路線加一張攢機(jī)路線圖怎么買、怎么改、怎么從零開(kāi)始攢以及中間踩坑的經(jīng)驗(yàn)和我的建議。對(duì)DIY玩家、電子愛(ài)好者、想做機(jī)器人入門項(xiàng)目的學(xué)生朋友來(lái)說(shuō)不管你之前有沒(méi)有基礎(chǔ)都能照著往下走一段。我先把結(jié)論放前面三條路線的名字分別叫“成品機(jī)路線”“套件組裝路線”“完全攢機(jī)路線”。它們不是互相替代的關(guān)系而是適合不同階段的人。如果你以前沒(méi)碰過(guò)單片機(jī)卻想快速了解掃地機(jī)器人的導(dǎo)航邏輯買一臺(tái)成品機(jī)拆開(kāi)看是成本最低的學(xué)習(xí)方式如果你有點(diǎn)編程基礎(chǔ)但不熟悉機(jī)械結(jié)構(gòu)套件路線會(huì)讓你少走很多彎路如果你就是想從頭到腳都握在自己手里那完全攢機(jī)路線才是真正的歸宿。這三條路我都走過(guò)一遍也都在上面花過(guò)冤枉錢。下面按路線、部件、實(shí)操、排障和成本這條順序展開(kāi)需要的直接抄作業(yè)。1. 三條路線到底怎么選成品機(jī)、套件升級(jí)、還是完全自攢1.1 成品機(jī)路線省心但不一定真的“擁有”成品機(jī)是大多數(shù)人的認(rèn)知入口。你把它買回家充滿了電按一下開(kāi)始鍵它就會(huì)自己沿著墻角跑、回充、拖地。沒(méi)錯(cuò)這是最省心的方式但我建議你在下單前先把它當(dāng)成一次學(xué)習(xí)而不是一次消費(fèi)落地的瞬間?,F(xiàn)在市面上的成品掃地機(jī)器人從工作邏輯上可以分成幾類隨機(jī)碰撞型、激光導(dǎo)航型、視覺(jué)導(dǎo)航型。隨機(jī)碰撞型靠單片機(jī)碰撞傳感器和陀螺儀“掃大街”走一個(gè)不重復(fù)的隨機(jī)路徑適合小戶型激光導(dǎo)航型通過(guò)頂部的旋轉(zhuǎn)雷達(dá)建圖路徑更規(guī)整但雷達(dá)對(duì)環(huán)境光有一定要求視覺(jué)導(dǎo)航型用攝像頭識(shí)別天花板特征成本低但暗光環(huán)境下表現(xiàn)會(huì)變差。你買的時(shí)候宣傳頁(yè)只會(huì)寫“智能規(guī)劃”三個(gè)字但實(shí)際背后的技術(shù)棧差別很大。我個(gè)人的建議是如果你選擇成品機(jī)最好選帶物理回充底座、有懸崖傳感器、有拖布自清潔和可拆卸塵盒這幾個(gè)特性的。這些不是高端賣點(diǎn)而是你后面做對(duì)比和拆解時(shí)的錨點(diǎn)。買回來(lái)之后不要急著用先找一個(gè)空房間讓它跑一遍觀察它在桌腿、地毯邊緣、插座線纜附近是怎么處理的再打開(kāi)App看它的運(yùn)行軌跡。這個(gè)過(guò)程能讓你建立第一手直覺(jué)什么環(huán)境信息重要什么算法需要處理為什么掃地機(jī)器人有時(shí)還會(huì)撞墻。這些直覺(jué)會(huì)直接影響到后面你自己攢機(jī)時(shí)選傳感器和寫邏輯。成品機(jī)路線的短板也很明顯你買到的是一整套封閉系統(tǒng)。想調(diào)整它的掃拖策略想改自動(dòng)回充的判斷邏輯想換一個(gè)更好用的地平線傳感器都被鎖定死了。而且一旦某個(gè)模塊損壞部分品牌的維修成本已經(jīng)逼近主機(jī)價(jià)格的一半。也就是說(shuō)這條路線幫你解決了時(shí)間和上手門檻但犧牲了幾乎所有可玩性和可控性。1.2 套件組裝路線半DIY適合第一次想動(dòng)手的人第二條路線是買一套機(jī)器人開(kāi)發(fā)套件自己回來(lái)組裝。你不需要自己畫(huà)底盤、不需要自己選主控型號(hào)、也不需要自己解決減速電機(jī)的固定孔位但你需要自己接線、自己寫避障邏輯、自己配置導(dǎo)航算法。我用過(guò)的套件里最常見(jiàn)的是基于Arduino或ESP32的智能小車套件再配一個(gè)激光雷達(dá)模塊和一個(gè)萬(wàn)向輪結(jié)構(gòu)。這類套件的門檻是“會(huì)拼樂(lè)高的大小朋友愿意看幾頁(yè)英文文檔”。套件路線最大的好處是安全感足底盤和驅(qū)動(dòng)模塊都開(kāi)好孔了電源模塊留好了接口傳感器有現(xiàn)成的庫(kù)函數(shù)。你在這條路線上主要學(xué)的是代碼和調(diào)試而不是機(jī)械干涉和電路layout。我第一次做掃地機(jī)器人就是走這條路線的具體是買了一個(gè)四輪小車底盤裝上了超聲波測(cè)距模塊再用一塊L298N驅(qū)動(dòng)板把兩個(gè)直流減速電機(jī)接起來(lái)。當(dāng)時(shí)只寫了十幾行Arduino代碼效果就已經(jīng)讓我真實(shí)感慨“原來(lái)掃地機(jī)器人就可以這么簡(jiǎn)單”——當(dāng)然它當(dāng)時(shí)只能躲開(kāi)正前方的障礙物不能轉(zhuǎn)彎也不能回充但那份成就感是真的。不過(guò)套件路線的“天花板”也比較低。很多套件的底盤軸距短、負(fù)載低如果再裝一個(gè)RPLIDAR雷達(dá)、一個(gè)大容量電池整機(jī)重量上去之后電機(jī)扭矩就跟不上了。傳感器接口也會(huì)遇到?jīng)_突比如同時(shí)使用超聲波、紅外懸崖模塊和編碼器時(shí)Arduino的GPIO不夠用就得換主控。所以如果你決定走套件路線我的建議是不要為了便宜去買傳感器數(shù)量固定的“全家桶”盡量選擇能夠自由擴(kuò)展接口的套件比如預(yù)留了IIC、UART、GPIO擴(kuò)展排針的型號(hào)。1.3 完全攢機(jī)路線從螺絲到算法都是你的第三條路線也是這篇文稿最核心的部分是“完全攢機(jī)”。什么叫完全攢機(jī)就是你像配一臺(tái)游戲電腦一樣去單獨(dú)選擇主板主控、電源電池和穩(wěn)壓模塊、顯卡算力平臺(tái)、外設(shè)傳感器甚至定制底盤。這條路線的所有決策權(quán)重都在你手里你讓這臺(tái)掃地機(jī)器人長(zhǎng)什么樣子、用多大輪子、把雷達(dá)放在哪、回充邏輯怎么寫都由你來(lái)定。完全攢機(jī)的技術(shù)棧其實(shí)并不神秘。主控選型上有三個(gè)層次最輕量級(jí)的ESP32適合做一個(gè)“能跑能躲”的掃地機(jī)器雛形支持WiFi和藍(lán)牙但算力有限中間檔是樹(shù)莓派4B或者樹(shù)莓派Zero 2W跑輕量級(jí)Linux可以接入標(biāo)準(zhǔn)USB激光雷達(dá)也能跑Gmapping和簡(jiǎn)單路徑規(guī)劃再往上一點(diǎn)是Jetson Nano這類帶GPU的板子可以跑視覺(jué)方案但也意味著更大的供電負(fù)擔(dān)和散熱需求。傳感器層面通常需要輪式里程計(jì)、碰撞/觸發(fā)傳感器、懸崖傳感器、IMU慣性測(cè)量單元、以及一個(gè)用于建圖的核心雷達(dá)這幾個(gè)部分缺一不可。底盤也不是勸退的地方網(wǎng)上有賣現(xiàn)成的麥克納姆輪底盤、差速驅(qū)動(dòng)底盤也有人用鋁型材自己搭更有狠人拿厚亞克力板和3D打印件開(kāi)模。我第一次完全攢機(jī)用的就是一塊七塊錢的透明亞克力板自己拿尺子和電鉆開(kāi)的孔輪子用的是直徑6.5cm的橡膠輪兩個(gè)N20減速電機(jī)加一個(gè)萬(wàn)向輪。丑是真的丑但跑起來(lái)的那一刻你會(huì)覺(jué)得整個(gè)科技領(lǐng)域的魅力都在那一堆零件里。完全攢機(jī)路線要付出的代價(jià)是時(shí)間和反復(fù)試錯(cuò)。你需要自己能看懂原理圖能解決電源干擾導(dǎo)致的電機(jī)亂轉(zhuǎn)還要會(huì)調(diào)算法參數(shù)。對(duì)于零基礎(chǔ)的人我建議不要把目標(biāo)一開(kāi)始就定成“做一臺(tái)完整的掃地機(jī)器人”拆成四個(gè)里程碑更實(shí)際能跑起來(lái)、能遙控、能避障、能自動(dòng)回充。每完成一個(gè)里程碑你都離“擁有一臺(tái)自己的掃地機(jī)器人”更近一步。2. 攢機(jī)路線圖先拆需求再上部件2.1 把需求寫成一條一條的比直接挑芯片型號(hào)更重要網(wǎng)上很多教程一上來(lái)就列物料清單告訴你買什么雷達(dá)、什么驅(qū)動(dòng)板、什么單片機(jī)。但你照著買回來(lái)之后會(huì)發(fā)現(xiàn)很多參數(shù)用不上有些傳感器連接口都定義不清楚。所以我的習(xí)慣是先從需求出發(fā)把“我要一臺(tái)什么樣的掃地機(jī)器人”翻譯成可量化的指標(biāo)。給一個(gè)我常用的需求模板你直接照著填空就可以清掃面積一般是20平方米到120平方米之間這決定你需要多大的電池和地圖范圍。自主性是只需要隨機(jī)避障還是需要走柵格地圖規(guī)劃路徑還是需要自動(dòng)回充后繼續(xù)打掃。外形尺寸要不要進(jìn)沙發(fā)底下、床底決定了你的底盤高度和雷達(dá)安裝方式。負(fù)載能力要不要拖地水箱和拖布模塊有多重需要電機(jī)多大扭矩。預(yù)算范圍預(yù)算決定了你的主控和雷達(dá)能到什么檔位。調(diào)試時(shí)間你能接受幾天的調(diào)試周期決定了選開(kāi)源庫(kù)還是自己寫邏輯。把這些需求寫下來(lái)之后很多問(wèn)題會(huì)自動(dòng)明確。比如說(shuō)如果只需要清理40平方米的客廳那就不需要上太貴的激光雷達(dá)一個(gè)超聲波測(cè)距加碰撞傳感器就能完成基本任務(wù)但如果要掃全屋那沒(méi)有地圖規(guī)劃就會(huì)非常低效還是得老老實(shí)實(shí)上SLAM方案。這一個(gè)步驟看起來(lái)簡(jiǎn)單但能幫你省下大量買錯(cuò)部件的錢。2.2 核心部件選型每個(gè)模塊都在干什么掃地機(jī)器人的核心部件雖然名稱不同但其職責(zé)基本固定。我先列一張常用選型對(duì)照表再逐個(gè)拆開(kāi)講解。模塊常用型號(hào)/方案職責(zé)注意事項(xiàng)主控ESP32 / 樹(shù)莓派4B / Jetson運(yùn)行避障邏輯或SLAM算法ESP32算力低官方庫(kù)少驅(qū)動(dòng)電機(jī)N20減速電機(jī) / TT電機(jī) / 帶霍爾編碼器電機(jī)驅(qū)動(dòng)輪子并輸出里程信息全向輪與差速輪邏輯不同電機(jī)驅(qū)動(dòng)板L298N / TB6612 / DRV8833放大控制信號(hào)驅(qū)動(dòng)電機(jī)L298N壓降大發(fā)熱明顯建圖雷達(dá)RPLIDAR A1/A2 / 激光測(cè)距模塊獲取周圍點(diǎn)云數(shù)據(jù)進(jìn)行建圖匹配不能用普通測(cè)距模塊替代碰撞傳感器微動(dòng)開(kāi)關(guān) / 雙路循跡紅外輔助判斷被障礙物卡住成品機(jī)一般做在內(nèi)部懸崖傳感器紅外反射傳感器 / 超聲傳感器防止從臺(tái)階或桌面掉下去紅外受表面顏色影響大電流檢測(cè)模塊INA219 / ACS712監(jiān)測(cè)電機(jī)堵轉(zhuǎn)、電池電量大電流采樣用ACS712更直接電池18650動(dòng)力電池組 / 3S鋰電池整機(jī)供電加一個(gè)低壓保護(hù)板否則等著廢電池充電底座紅外引導(dǎo)金屬觸點(diǎn)方案自動(dòng)回充比完全靠隨機(jī)對(duì)接可靠得多軟件框架Arduino庫(kù) / ROS1/ROS2 / 自寫狀態(tài)機(jī)調(diào)度所有模塊從簡(jiǎn)到繁漸進(jìn)不要一步到位從“掃地機(jī)器人”這個(gè)關(guān)鍵詞出發(fā)最容易被忽略的是輪式里程計(jì)和懸崖傳感器。輪子上的霍爾編碼器不是用來(lái)炫技的它在沒(méi)有雷達(dá)的環(huán)境下就是判斷“我走了多遠(yuǎn)”的主要來(lái)源SLAM算法里叫odom。懸崖傳感器看似簡(jiǎn)單但當(dāng)你的機(jī)器從桌面上掉下來(lái)的時(shí)候有沒(méi)有它完全是兩種結(jié)局。所以這兩個(gè)模塊的錢是最不能省的。2.3 供電、底盤和控制的基本計(jì)算完全攢機(jī)之前先把物理需求做一遍計(jì)算。絕不需要微積分最簡(jiǎn)單的初中物理就夠用。我拿當(dāng)時(shí)那臺(tái)只用N20電機(jī)的小機(jī)器人舉例。假設(shè)整車質(zhì)量m2公斤輪子與地面的滾動(dòng)摩擦系數(shù)大約取0.1那么需要的牽引力大約是Fmg×0.1≈2N牛頓。如果選N20減速電機(jī)通常它的輸出扭矩為0.3—0.8kg·cm也就是大約0.03—0.08N·m。配合直徑6.5cm的輪子輪子半徑約0.0325m單輪最大可提供的推力大約是0.08/0.0325≈2.46N兩個(gè)輪子就足夠推動(dòng)整車。這個(gè)計(jì)算說(shuō)明了一件事不是所有機(jī)器人都需要大扭矩電機(jī)關(guān)鍵是匹配整車重量。供電計(jì)算更是實(shí)用別只看電池標(biāo)稱容量。假設(shè)你選的是2節(jié)18650鋰電池串聯(lián)標(biāo)稱電壓7.4V容量2600mAh電機(jī)堵轉(zhuǎn)電流按1A一只算兩個(gè)電機(jī)同時(shí)堵轉(zhuǎn)時(shí)耗電約2A再帶上雷達(dá)和主控大約再加0.5A整機(jī)峰值電流接近2.5A。如果你希望連續(xù)運(yùn)行60分鐘那么電池容量至少要3Ah以上三節(jié)或者四節(jié)并聯(lián)是更穩(wěn)妥的答案。這里有一個(gè)我踩過(guò)的坑如果只按巡航電流計(jì)算續(xù)航數(shù)字會(huì)非常好看但一旦遇到地毯、門檻、雜物堆等場(chǎng)景電機(jī)瞬間電流會(huì)拉高電池容量不足就會(huì)導(dǎo)致主控復(fù)位掃到一半它自己黑屏重啟??刂茖用娴挠?jì)算主要是“比例控制”P控制。簡(jiǎn)單來(lái)說(shuō)如果你想讓它直走就用左右輪的編碼器差值做反饋差值為正就往左修正差值為負(fù)就往右修正修正系數(shù)需要實(shí)際調(diào)。你不需要一開(kāi)始就把PID全家桶搬出來(lái)我建議只做“直行修正轉(zhuǎn)彎等待”兩項(xiàng)邏輯等這兩項(xiàng)穩(wěn)定了再考慮更復(fù)雜的閉環(huán)。3. 關(guān)鍵環(huán)節(jié)從底盤到SLAM的落地過(guò)程3.1 先讓底盤動(dòng)起來(lái)再談“規(guī)劃”這件事很多新手拿到套件的第一個(gè)動(dòng)作就是去下載SLAM代碼結(jié)果堆積了一堆依賴庫(kù)編譯錯(cuò)誤一個(gè)接一個(gè)最后連最基本的電機(jī)pwm測(cè)試都沒(méi)做。這就叫做順序錯(cuò)了。正確順序是先手動(dòng)通電用最簡(jiǎn)單的一串代碼控制電機(jī)正反轉(zhuǎn)確認(rèn)你的驅(qū)動(dòng)板接線沒(méi)有反然后寫一個(gè)轉(zhuǎn)速固定函數(shù)讓兩個(gè)輪子能以接近相同的轉(zhuǎn)速轉(zhuǎn)動(dòng)接著再讓機(jī)器人走直線測(cè)量一段距離實(shí)際耗時(shí)多少。這個(gè)階段最大的經(jīng)驗(yàn)教訓(xùn)就是不要迷信PWM百分比。比如你給兩個(gè)電機(jī)都寫50%的PWM它們轉(zhuǎn)速不一定相同因?yàn)橹绷麟姍C(jī)的減速箱摩擦力不完全一致兩個(gè)輪子的地面接觸也略有差異??梢杂谩爸毙衅顪y(cè)試”來(lái)感知讓車跑3米看它偏了多少厘米然后在固件里寫入一個(gè)固定修正量。這一步做得好不好直接決定了后面雷達(dá)建圖是不是會(huì)發(fā)生漂移。底盤結(jié)構(gòu)方面差速驅(qū)動(dòng)是掃地機(jī)器人最經(jīng)典的結(jié)構(gòu)兩個(gè)驅(qū)動(dòng)輪分布在底盤兩側(cè)前面或后面加一個(gè)萬(wàn)向輪。它的好處是轉(zhuǎn)向靈活控制邏輯簡(jiǎn)單左右輪速度相同就是直行一快一慢就是轉(zhuǎn)彎。麥克納姆輪能做斜向平移但機(jī)械損耗大剎車控制繁瑣用在掃地機(jī)器人上屬于給自己加難度。我勸新手不要被“全向移動(dòng)”四個(gè)字唬住先把差速輪玩明白。3.2 傳感器組到底怎么裝位置比型號(hào)更關(guān)鍵傳感器不是買回來(lái)就能用的它在底盤上的安裝角度和高度直接決定了信號(hào)質(zhì)量。先講懸崖傳感器。這玩意兒是用來(lái)判斷“底下是空的”的情況比如桌子邊緣或者復(fù)式樓梯口。常見(jiàn)方案是向下方發(fā)射紅外然后讀取反射光強(qiáng)度。當(dāng)?shù)孛娲嬖跁r(shí)反射光強(qiáng)判斷為“安全”到了邊緣反射光變?nèi)跖袛酁椤拔kU(xiǎn)”。聽(tīng)起來(lái)很簡(jiǎn)單但如果你把傳感器裝得太貼近地面即使沒(méi)有臺(tái)階它也可能因?yàn)榈卮u反光弱而誤報(bào)如果裝得離地太高它又可能看不到低矮的深色門檻。我試過(guò)幾次之后得出的經(jīng)驗(yàn)是傳感器探頭離地大約1-2厘米先用白色、深色、亮面地磚分別測(cè)一遍閾值然后取中間值作為判斷線。然后是碰撞傳感器。掃地機(jī)器人不可能完全只靠雷達(dá)避開(kāi)所有東西尤其是低矮的電視柜、床腳這些在雷達(dá)掃描平面以下的目標(biāo)物理碰撞檢測(cè)是兜底方案。裝碰撞傳感器時(shí)不要只裝正前方左右兩側(cè)最好也覆蓋到否則從側(cè)面刮到桌腳機(jī)器人會(huì)一直空轉(zhuǎn)給你的感覺(jué)是它在卡住但你看不到任何報(bào)錯(cuò)。激光雷達(dá)的安裝更要講究。它需要一個(gè)水平的環(huán)境視野不能太低否則掃到的全是椅子腿也不能太高壓過(guò)機(jī)殼否則回充底座的紅外信號(hào)會(huì)被雷達(dá)支架擋住。實(shí)際裝機(jī)時(shí)我建議把雷達(dá)裝在旋轉(zhuǎn)中心附近并且讓雷達(dá)的零點(diǎn)對(duì)準(zhǔn)機(jī)器人正前方。這個(gè)校正很容易被忽略但一旦偏了建圖出來(lái)的輪廓就會(huì)整體旋轉(zhuǎn)一個(gè)角度在后續(xù)路徑規(guī)劃時(shí)你會(huì)越看越頭大。3.3 主控和軟件讓“能跑”變成“會(huì)干活”當(dāng)?shù)妆P和傳感器都調(diào)通了就可以把主控升級(jí)到一個(gè)能跑SLAM的平臺(tái)。這里我聊兩條典型軟件路線。低端路線是用ESP32寫一個(gè)狀態(tài)機(jī)平時(shí)直行撞到障礙物后右轉(zhuǎn)90度遇到懸崖傳感器報(bào)警就后退再轉(zhuǎn)向同時(shí)用編碼器統(tǒng)計(jì)大概走了多遠(yuǎn)電量低時(shí)自動(dòng)朝回充座方向跑。這套邏輯不是算法上的完美規(guī)劃但你有完全的主控權(quán)而且代碼量少適合理解掃地機(jī)器人的基本行為模式。更高一檔是ROS2加Cartographer或者Gmapping。主控建議直接用一臺(tái)樹(shù)莓派4B再接一個(gè)USB口的小型雷達(dá)跑起cartographer節(jié)點(diǎn)同時(shí)把輪式里程計(jì)和IMU數(shù)據(jù)通過(guò)串口喂給ROS2。這個(gè)過(guò)程在你第一次跑通的時(shí)候會(huì)覺(jué)得有點(diǎn)復(fù)雜因?yàn)橐渲胾rdf、tf變換、激光的frame_id還有訂閱的話題名。我的建議是第一次照著官方turtlebot3教程改配置就行別自己發(fā)明話題命名先用默認(rèn)跑通之后再去改自己喜歡的名稱和習(xí)慣。當(dāng)?shù)貓D建出來(lái)之后還需要一個(gè)路徑規(guī)劃模塊。簡(jiǎn)單來(lái)說(shuō)就是讓機(jī)器人自己算一條從A點(diǎn)到B點(diǎn)不撞墻的路徑。ROS2的navigation2堆棧已經(jīng)把這個(gè)封裝好了但你需要給它正確的costmap參數(shù)。最關(guān)鍵的幾個(gè)參數(shù)是膨脹半徑不要設(shè)太大否則機(jī)器人會(huì)在寬敞的客廳中間不敢接近任何墻邊掃地漏一條縫機(jī)器人本體半徑要按底盤最大半徑填不能光填輪子半徑因?yàn)槿绻阒挥休喿有±走_(dá)就會(huì)磕到機(jī)身前端突出物。這些參數(shù)我調(diào)了很多次才找到手感。3.4 回充和拖地模塊像“掃地機(jī)器人”的分界線如果一臺(tái)機(jī)器只會(huì)跑不會(huì)自己回充你在使用體驗(yàn)上會(huì)打大折扣。自動(dòng)回充的實(shí)現(xiàn)思路很多最簡(jiǎn)單可靠的是“紅外引導(dǎo)接觸對(duì)接”。在充電底座上裝兩個(gè)紅外發(fā)射管一個(gè)寬角一個(gè)窄角機(jī)器人的充電觸板上裝兩個(gè)紅外接收器當(dāng)檢測(cè)到寬角信號(hào)時(shí)先轉(zhuǎn)向底座方向再接窄角信號(hào)做最終對(duì)準(zhǔn)觸碰到充電觸點(diǎn)后再通過(guò)驅(qū)動(dòng)板檢測(cè)電壓變化進(jìn)入充電狀態(tài)。這個(gè)過(guò)程中最容易出問(wèn)題的位置是充電座位置的選擇。不要把充電座放在窗邊因?yàn)楣饩€強(qiáng)的時(shí)候紅外信號(hào)會(huì)被干擾也不要放在容易被機(jī)器人撞移位的輕薄門簾邊上。充電座的正面必須留出至少50厘米的凈空兩側(cè)留出20厘米否則機(jī)器人在接近時(shí)會(huì)反復(fù)橫跳最后要么對(duì)準(zhǔn)不了要么直接把充電座干翻。拖地模塊則是另一個(gè)層面的工程問(wèn)題。它意味著你的底盤上多了一個(gè)水箱和拖布結(jié)構(gòu)整車負(fù)載直接上升轉(zhuǎn)彎半徑和摩擦力中心都會(huì)變化。我個(gè)人的體驗(yàn)是功能驗(yàn)證階段先做“掃地”等路徑和回充邏輯都穩(wěn)定了再考慮拖地。如果你一上來(lái)就同時(shí)搞定掃拖大概率會(huì)在測(cè)試中間分不清到底是傳感器的問(wèn)題還是負(fù)載的問(wèn)題排查起來(lái)特別痛苦。4. 攢機(jī)最容易翻車的幾個(gè)地方4.1 電機(jī)驅(qū)動(dòng)電流不足機(jī)器人卡一下就沒(méi)反應(yīng)了這是我自己在完全攢機(jī)時(shí)踩得最狠的坑。當(dāng)時(shí)選了一塊相對(duì)便宜的L298N驅(qū)動(dòng)板規(guī)格書(shū)上寫“最大電流2A”我以為綽綽有余結(jié)果在測(cè)試時(shí)發(fā)現(xiàn)當(dāng)兩個(gè)電機(jī)同時(shí)啟動(dòng)再遇上機(jī)器人爬過(guò)一塊地毯瞬間電流一疊加驅(qū)動(dòng)板進(jìn)入過(guò)熱保護(hù)PWM輸出直接掉到零機(jī)器人就愣在原地不動(dòng)了。最開(kāi)始我還以為是編碼器出了問(wèn)題反復(fù)檢查發(fā)現(xiàn)驅(qū)動(dòng)板外殼已經(jīng)燙手。正確做法是選電流余量充足的驅(qū)動(dòng)方案比如TB6612FNG這類MOS管方案壓降低發(fā)熱小或者用DRV8833堵轉(zhuǎn)電流減半之后依然能穩(wěn)定輸出。如果你手里只有L298N那就把邏輯電壓和電機(jī)電壓分開(kāi)供電電機(jī)電源單獨(dú)走一個(gè)大線徑導(dǎo)線盡量不要從主控板的5V引腳取電。實(shí)際測(cè)試時(shí)記得用萬(wàn)用表鉗流表看一下堵轉(zhuǎn)電流值選驅(qū)動(dòng)板的原則是額定電流至少是工作電流的1.5倍。4.2 傳感器數(shù)值“忽高忽低”問(wèn)題往往出在標(biāo)定和電平轉(zhuǎn)換上傳感器讀數(shù)不穩(wěn)定不一定就是元件壞了。首先是供電問(wèn)題很多傳感器的參考電壓來(lái)自主控板的3.3V或5V如果電池電壓波動(dòng)過(guò)大傳感器參考電平也會(huì)跟著波出來(lái)的數(shù)值就跳來(lái)跳去。解決方法是給傳感器加一個(gè)穩(wěn)壓模塊或者在主控輸入引腳前加RC濾波電容。其次是標(biāo)定問(wèn)題超聲波傳感器和紅外傳感器都有各自的返回閾值同樣的障礙物在不同距離下讀數(shù)并不會(huì)呈線性變化所以你不能靠單一閾值判斷所有情況應(yīng)該先用串口輸出打印數(shù)值再?zèng)Q定閾值區(qū)間。還有一個(gè)容易踩到的是電平轉(zhuǎn)換。3.3V的主控和5V的傳感器直接接串口一般不會(huì)立刻燒壞但長(zhǎng)期使用容易出偶發(fā)掉包表現(xiàn)就是有時(shí)能收到完整數(shù)據(jù)有時(shí)全是亂碼。正確做法是用IIC線或串口加一個(gè)邏輯電平轉(zhuǎn)換模塊兩塊板子十塊錢不到能省你一整天的排查時(shí)間。4.3 電池續(xù)航和充電邏輯顯示不對(duì)會(huì)誤導(dǎo)整個(gè)調(diào)試電池顯示不準(zhǔn)確會(huì)直接影響回充邏輯的判斷。很多DIY方案只用電阻分壓測(cè)電池電壓但當(dāng)負(fù)載突然變大時(shí)電池電壓會(huì)有波動(dòng)主控可能會(huì)誤判成“電量不足”觸發(fā)回充回充之后又發(fā)現(xiàn)電量還有不少于是又自己跑出去掃往復(fù)循環(huán)。我的經(jīng)驗(yàn)是加一個(gè)電流檢測(cè)模塊比如INA219它能同時(shí)讀電壓和電流再通過(guò)軟件做低通濾波用“后端電壓穩(wěn)定值”作為判斷依據(jù)而不是讀瞬時(shí)值。同時(shí)在充電過(guò)程中要設(shè)置一個(gè)回充“遲滯區(qū)間”比如充電到4.1V才算充滿放電到3.5V才開(kāi)始低電量報(bào)警中間留0.6V的緩沖范圍避免在臨界電壓附近反復(fù)橫跳。4.4 常見(jiàn)問(wèn)題速查表故障現(xiàn)象可能原因排查方法輪子不動(dòng)驅(qū)動(dòng)板電源腳接反或PWM為0用萬(wàn)用表測(cè)電機(jī)兩端電壓直行偏航嚴(yán)重左右輪轉(zhuǎn)速不一致、胎壓不同做3米直線測(cè)試并加修正量雷達(dá)建圖出現(xiàn)斷層雷達(dá)安裝不水平或者里程計(jì)漂移檢查雷達(dá)支架先測(cè)直線再測(cè)地圖懸崖傳感器總是誤報(bào)傳感器離地高度不對(duì)改安裝高度重新標(biāo)定反射閾值回充座對(duì)接不上紅外信號(hào)被雜物或強(qiáng)光干擾用擋板遮擋環(huán)境光調(diào)整底座朝向機(jī)器人撞上低矮物體碰撞傳感器覆蓋不全增加左右側(cè)碰撞微動(dòng)開(kāi)關(guān)系統(tǒng)頻繁重啟電池容量不足、供電瞬斷換并聯(lián)電池組加穩(wěn)壓電容模塊毛刷或邊刷卡手安裝角度不對(duì)、灰塵纏繞停機(jī)清理加裝擋塵毛刷以上的每一個(gè)問(wèn)題我都至少花了大半天才定位到根因。多碼一些調(diào)試日志真的非常重要你可以在主控程序里定期把“當(dāng)前狀態(tài)、電池電壓、傳感器狀態(tài)、里程計(jì)數(shù)值”打印到串口或者寫到SD卡上。沒(méi)有日志就去猜原因大概率是霧里看花。5. 三條路線的成本賬與我的最終建議5.1 造價(jià)對(duì)比先說(shuō)結(jié)論完全攢機(jī)不一定便宜套件路線也不一定比成品機(jī)劃算很多關(guān)鍵要看你已有的工具和空閑時(shí)間。成品機(jī)路線如果選帶激光導(dǎo)航和自動(dòng)回充的中端型號(hào)目前市場(chǎng)上價(jià)格大概在2000塊到4000塊之間。它的溢價(jià)里有軟件研發(fā)、結(jié)構(gòu)設(shè)計(jì)、售后和品牌服務(wù)。如果你的時(shí)間很貴那這條路線最劃算因?yàn)榈诙炀湍苡蒙?。套件組裝路線一套帶電機(jī)、驅(qū)動(dòng)板、傳感器、亞克力底盤的機(jī)器人套件大約500塊到1000塊再加一個(gè)入門級(jí)雷達(dá)可能總共要1200塊左右但還需要搭一套電腦環(huán)境做算法編譯再加上調(diào)試時(shí)間整體投入就很難用錢衡量了。如果選帶ROS2官方支持的底盤套件價(jià)格會(huì)貴一些可能直接到3000塊但這已經(jīng)是半成品里的“高配”了。完全攢機(jī)路線按我這臺(tái)反復(fù)拆裝的機(jī)器來(lái)算主控板加電機(jī)驅(qū)動(dòng)和傳感器大約300塊N20電機(jī)帶輪子兩個(gè)大約250塊18650電池加充電模塊大約150塊一個(gè)二手激光雷達(dá)大約400塊再加上螺絲、打印件、線材、底盤板材加起來(lái)差不多1200塊到2000塊之間。如果再算上你可能毀掉的一塊主控板或者燒掉的一組電池預(yù)算是要做到2500塊的準(zhǔn)備。5.2 如果你想繼續(xù)擴(kuò)展可以從這幾步接著走完全攢機(jī)并不意味著終點(diǎn)。一臺(tái)能跑、能避障、能回充的掃地機(jī)器人其實(shí)已經(jīng)是絕佳的機(jī)器人學(xué)習(xí)平臺(tái)。你可以給它加一個(gè)語(yǔ)音傳感器用語(yǔ)音說(shuō)“去廚房掃地”這在技術(shù)上不過(guò)是在路徑規(guī)劃前端接一個(gè)語(yǔ)音識(shí)別節(jié)點(diǎn)你可以加一個(gè)攝像頭把抓拍到的畫(huà)面上傳到本地服務(wù)器變成一個(gè)會(huì)巡更的小機(jī)器人你甚至可以把底盤拆掉換一套六足機(jī)器人套件跑同一套建圖算法體驗(yàn)不同運(yùn)動(dòng)模型對(duì)算法的影響。從我個(gè)人的體驗(yàn)來(lái)看如果你決定走完全攢機(jī)路線第一臺(tái)的目標(biāo)不要定得太宏大。設(shè)置成“能在十平方米內(nèi)完成避障回充”就是巨大勝利。我第一臺(tái)掃地機(jī)器人用了整整三個(gè)周末才達(dá)到并不完美的“能跑通一圈加回充”狀態(tài)中間還燒了一塊驅(qū)動(dòng)板。現(xiàn)在回頭看那些看似浪費(fèi)時(shí)間的調(diào)試才是攢機(jī)路線最值錢的部分。每排除一個(gè)故障你對(duì)這個(gè)機(jī)器人系統(tǒng)的理解就會(huì)深一層這比手里多一臺(tái)能干的成品機(jī)器更有意思。如果非要給一個(gè)選型建議我的說(shuō)法是如果你只是想讓它把地掃干凈買成品機(jī)如果你想低成本體驗(yàn)“機(jī)器從無(wú)到有”的感覺(jué)套件路線最甜如果你想徹底搞懂掃地機(jī)器人每一毫米誤差是怎么來(lái)的、每個(gè)傳感器為什么這樣裝那就從攢機(jī)路線開(kāi)始。無(wú)論你選哪條路都建議把“掃地機(jī)器人”當(dāng)成一個(gè)系統(tǒng)來(lái)學(xué)而不是一臺(tái)家電。螺絲刀拿起來(lái)之后你會(huì)發(fā)現(xiàn)它遠(yuǎn)比你想象中更能教給你東西。