掃地機(jī)器人:開源方案與導(dǎo)航閉環(huán)深度拆解)
我做這行也有年頭了。看到“掃地機(jī)器人都能自己造”這句話第一反應(yīng)是標(biāo)題黨第二反應(yīng)是點(diǎn)進(jìn)去看看第三反應(yīng)是——還真不是開玩笑。GitHub 上確實(shí)有人把一套相對完整的掃地機(jī)器人軟硬件方案開源出來了從機(jī)械結(jié)構(gòu)、傳感器布局到 SLAM 導(dǎo)航、App 控制全都給了。把這件事拆開看你會(huì)發(fā)現(xiàn)它根本不是“玩具級手工課”而是一套能把產(chǎn)品級掃地機(jī)器人做出來的開源實(shí)踐只是以前這些能力散在好幾個(gè)項(xiàng)目里現(xiàn)在有人幫你整合好了。這篇文章我想從一個(gè)做嵌入式、搞過機(jī)器人項(xiàng)目的人的角度把“自己造一臺(tái)掃地機(jī)器人”這件事從頭到尾拆一遍。它不是寫給純小白的也不是寫給資深工程師的而是寫給那些想做、又怕做不成的人。到底難在哪、簡單在哪、哪些錢不能省、哪些坑可以不踩我今天一次說清楚。1. 整體方案拆解一臺(tái)掃地機(jī)器人到底由哪幾部分構(gòu)成1.1 導(dǎo)航閉環(huán)SLAM、路徑規(guī)劃、運(yùn)動(dòng)控制是三條腿缺一條都站不住先解決一個(gè)認(rèn)知問題掃地機(jī)器人不是“一個(gè)吸塵器裝在遙控車上”它本質(zhì)是移動(dòng)機(jī)器人。一臺(tái)能在家里自己跑完、自己回充、又不會(huì)把房間撞爛的機(jī)器核心是一套導(dǎo)航閉環(huán)。我習(xí)慣把這個(gè)閉環(huán)拆成三個(gè)部分感知回答“我在哪”。常見手段是激光雷達(dá)掃描周圍環(huán)境配合編碼器、IMU慣性測量單元、里程計(jì)信息做狀態(tài)估計(jì)。目前主流的同步定位與建圖方案即 SLAM有兩種路線一是基于濾波的 Gmapping二是基于圖優(yōu)化的 Cartographer。家里結(jié)構(gòu)固定、場景不復(fù)雜的話Gmapping 就夠用計(jì)算量小樹莓派都能跑要處理大戶型、回環(huán)多的場景Cartographer 的優(yōu)勢就體現(xiàn)出來了它的回環(huán)檢測能把“走了一圈發(fā)現(xiàn)起點(diǎn)不閉合”這種誤差糾正掉。規(guī)劃回答“怎么走”。掃地機(jī)器人并不是全屋無腦走滿而是先要構(gòu)建一張柵格地圖然后對地圖做分區(qū)再在每個(gè)區(qū)域里生成弓字型覆蓋路徑。這里面涉及兩個(gè)核心算法全局路徑規(guī)劃A*、Dijkstra 這類負(fù)責(zé)從當(dāng)前點(diǎn)到目標(biāo)點(diǎn)的最優(yōu)路徑局部路徑規(guī)劃動(dòng)態(tài)窗口法 DWA、TEB 這類負(fù)責(zé)避開突然出現(xiàn)的障礙物??刂苹卮稹白卟蛔叩脺?zhǔn)”。規(guī)劃生成了軌跡底盤得執(zhí)行。這就要靠電機(jī)驅(qū)動(dòng)和 PID 閉環(huán)了。輪子上的編碼器讀取實(shí)際轉(zhuǎn)速和期望轉(zhuǎn)速做差PID 計(jì)算輸出 PWM調(diào)節(jié)電機(jī)轉(zhuǎn)速。控制周期一般要做到 50Hz 以上否則實(shí)際軌跡會(huì)明顯偏離規(guī)劃軌跡。很多人把掃地機(jī)器人看成“加了一個(gè)激光雷達(dá)的玩具車”這是最大的誤解。導(dǎo)航閉環(huán)里的每一個(gè)環(huán)節(jié)都是一個(gè)值得單獨(dú)做專項(xiàng)的技術(shù)點(diǎn)。開源方案的價(jià)值在于它把 ROS機(jī)器人操作系統(tǒng)里現(xiàn)成的工具鏈串起來了省掉你從零寫 SLAM 和路徑規(guī)劃的功夫但硬件層面的接線、電機(jī)調(diào)試、傳感器標(biāo)定還是得自己一點(diǎn)一點(diǎn)攢經(jīng)驗(yàn)。1.2 機(jī)械與電氣設(shè)計(jì)風(fēng)道、底盤、傳感器布局直接決定能不能落地我見過好幾個(gè) DIY 項(xiàng)目軟件跑通了結(jié)果機(jī)器人放地上根本沒法用——要么吸力不夠要么傳感器裝錯(cuò)位置要么走起來像癲癇。機(jī)械和電氣設(shè)計(jì)才是掃地機(jī)器人真正接地氣的地方。先看風(fēng)道結(jié)構(gòu)。掃地機(jī)的吸力不是靠電機(jī)功率硬堆而是靠風(fēng)道密封性。塵盒、風(fēng)機(jī)、吸口之間如果漏氣風(fēng)壓就起不來地面灰塵根本吸不進(jìn)去。開源方案一般會(huì)給 3D 打印的風(fēng)道模型文件但打印出來的件表面粗糙接縫處推薦用軟膠墊或硅膠密封實(shí)測下來漏氣對吸力的影響非常大。再看底盤和輪組結(jié)構(gòu)。翻看開源方案里的結(jié)構(gòu)圖紙你大概率會(huì)遇到兩種驅(qū)動(dòng)布局兩輪差速加萬向輪或者四輪獨(dú)立驅(qū)動(dòng)。掃地機(jī)領(lǐng)域用兩輪差速的占絕大多數(shù)原因不是成本而是控制簡單可靠。兩輪差速模型在做原地旋轉(zhuǎn)、弓字路徑時(shí)非常自然而四個(gè)獨(dú)立輪的底盤要做精確的運(yùn)動(dòng)學(xué)折算控制周期稍微拉長軌跡就會(huì)亂。萬一你看到“四輪驅(qū)動(dòng)”的方案先別急著興奮先算算它的運(yùn)動(dòng)學(xué)有沒有閉環(huán)驗(yàn)證過。最后是傳感器布局。掃地機(jī)上最容易被忽視的傳感器是防跌落紅外專門檢測機(jī)身下方距離地面高度。裝的位置一般在底盤四個(gè)角的邊緣向地面斜照紅外光一旦測距值突變說明到了臺(tái)階邊緣。這個(gè)傳感器一旦布局不對比如離地角度太高、探測范圍太窄機(jī)器人在桌子邊緣就會(huì)直接摔下去。我的經(jīng)驗(yàn)是所有傳感器的測試用例里防跌落應(yīng)當(dāng)最先做因?yàn)樗钊菀自斐晌锢頁p壞。2. 核心硬件選型與參數(shù)參考2.1 主控方案STM32 加樹莓派嵌入式里常見的“雙腦”結(jié)構(gòu)我在拆各類開源機(jī)器人項(xiàng)目時(shí)最??吹降目刂萍軜?gòu)就是“雙腦”一顆 MCU 負(fù)責(zé)實(shí)時(shí)性要求高的底層控制一顆高性能處理器負(fù)責(zé)計(jì)算和決策。底層 MCU一般用 STM32F103 或更高級別的 F4 系列負(fù)責(zé)電機(jī) PWM 輸出、編碼器計(jì)數(shù)、超聲波或紅外傳感器讀取、電池電壓監(jiān)測。上層處理器常用樹莓派 4B 或 Jetson Nano負(fù)責(zé)跑 Ubuntu ROS、激光雷達(dá)驅(qū)動(dòng)、SLAM、路徑規(guī)劃和 App 通信。上下層通信機(jī)器人里最短平快的方式是串口UART協(xié)議自行定義比如幀頭 數(shù)據(jù)長度 校驗(yàn)位 數(shù)據(jù)體。主控把里程計(jì)數(shù)據(jù)上報(bào)給上層上層下發(fā)速度指令給主控一來一回控制閉環(huán)就通了。這套雙腦架構(gòu)的好處有兩個(gè)一是職責(zé)清晰底層控制不因?yàn)?ros 進(jìn)程卡死而失靈——這一點(diǎn)很關(guān)鍵樹莓派上跑 SLAM 時(shí) CPU 經(jīng)常飆到 80% 以上萬一上層進(jìn)程 OOM底層還是能維持一個(gè)安全的停車動(dòng)作二是方便調(diào)試激光雷達(dá)或?qū)Ш焦?jié)點(diǎn)的日志出問題只需要看樹莓派終端不會(huì)影響電機(jī)驅(qū)動(dòng)代碼。如果你預(yù)算有限也可以嘗試用單板機(jī)直接連接所有傳感器省掉 MCU 層。但我勸你別省原因是底層控制代碼必須放在不會(huì)崩潰的地方。F4 級別的 MCU 裸機(jī)或 FreeRTOS 跑起來非常穩(wěn)定樹莓派哪怕是官方電源也偶有欠壓降頻的情況工業(yè)界做移動(dòng)機(jī)器人基本都采用這種冗余分工策略。2.2 傳感器組合激光雷達(dá)、IMU、防跌落、碰撞各司其職一個(gè)常見的傳感器組合是這么搭的傳感器作用選型建議激光雷達(dá)建圖、定位、障礙物檢測市面上常見的高性價(jià)比雷達(dá)多為 360° 三角測距或 ToF 方案測距半徑 10 米左右即可IMU姿態(tài)估計(jì)、輔助里程計(jì)融合低端方案 MPU6050 可用高端用 ICM 系列注意標(biāo)定零偏防跌落紅外檢測臺(tái)階、邊緣使用定制的紅外收發(fā)對管需標(biāo)定觸發(fā)閾值碰撞傳感器檢測物理碰撞一般用微動(dòng)開關(guān)布置在保險(xiǎn)杠彈片上觸發(fā)可靠編碼器輪速測量霍爾編碼器足夠光柵編碼器更準(zhǔn)但貴DIY 推薦霍爾型超聲傳感器近距離避障可作為激光雷達(dá)盲區(qū)補(bǔ)充但選型時(shí)注意波束角問題萬向輪支撐底盤用牛眼輪還是普通萬向輪要看底盤的轉(zhuǎn)彎半徑和重心分布激光雷達(dá)有必要多說一嘴。閑魚上很多幾十塊錢的二手雷達(dá)型號(hào)老舊、驅(qū)動(dòng)不兼容買回來你花在調(diào)驅(qū)動(dòng)上的時(shí)間可能比機(jī)器本身還多。我建議直接選 ROS 社區(qū)支持良好的雷達(dá)ROS 驅(qū)動(dòng)節(jié)點(diǎn)穩(wěn)定、話題格式標(biāo)準(zhǔn)這樣你在跑roslaunch的時(shí)候就能少踩很多坑。IMU 的作用容易被低估。掃地機(jī)在光滑地板上空轉(zhuǎn)、打滑時(shí)輪式里程計(jì)的輸出是會(huì)失真的這時(shí)候 IMU 數(shù)據(jù)可以作為融合參考把姿態(tài)變化修正回來。開源的 Cartographer 和機(jī)器人定位組件如 robot_localization 包都支持多傳感器融合你只需要把 IMU 的線性加速度和角速度發(fā)布成對應(yīng)的 ROS 話題即可。不要嫌傳感器多后期調(diào)試時(shí)你就知道多一個(gè) IMU 數(shù)據(jù)源機(jī)器人姿態(tài)的穩(wěn)定性就高一個(gè)檔次。2.3 電源與調(diào)試供電整機(jī)耗電怎么算、電池怎么選電源方案是開源項(xiàng)目里被很多人隨手糊弄、最后又不得不返工的部分。掃地機(jī)器人的負(fù)載是典型的高動(dòng)態(tài)負(fù)載風(fēng)機(jī)啟動(dòng)和電機(jī)堵轉(zhuǎn)瞬間電流會(huì)竄得很高電源設(shè)計(jì)做不好主控就會(huì)頻繁復(fù)位。我建議用這個(gè)思路來算統(tǒng)計(jì)整機(jī)最大持續(xù)電流兩個(gè)驅(qū)動(dòng)電機(jī)各 1.5A風(fēng)機(jī) 2A樹莓派 1.2A傳感器和 MCU 板 0.5A合計(jì)約 6.7A。預(yù)留 30% 裕量電源設(shè)計(jì)目標(biāo)就是至少 8A 的持續(xù)輸出能力。電池選用 3 串或者 4 串的鋰聚合物或 18650 電芯容量建議至少 3000mAh 以上按 6A 平均電流估算可以跑半小時(shí)左右。底層加一塊穩(wěn)壓模塊或電源管理板保證輸出穩(wěn)定在 5V/12V 兩路。一個(gè)要注意的問題是電機(jī)堵轉(zhuǎn)。掃地機(jī)卡在床底縫隙時(shí)電機(jī)不是不轉(zhuǎn)而是轉(zhuǎn)不動(dòng)此時(shí)電流會(huì)迅速上升輕則電源板保護(hù)重則燒驅(qū)動(dòng)。所以電機(jī)驅(qū)動(dòng)選型時(shí)要帶電流限制或過流保護(hù)建議驅(qū)動(dòng)芯片至少留 2 倍峰值電流余量。這一塊絕不能省我在實(shí)測中就燒過兩次驅(qū)動(dòng)板原因都是堵轉(zhuǎn)過流。3. 實(shí)操過程與核心模塊實(shí)現(xiàn)3.1 底盤組裝與電機(jī)驅(qū)動(dòng)調(diào)試先讓機(jī)器人“站得穩(wěn)”這里假設(shè)你已經(jīng)拿到了開源方案的模型文件和 PCB 文件第一步是把底盤結(jié)構(gòu)件裝好。結(jié)構(gòu)件不管是 3D 打印還是淘寶定制亞克力切割組裝時(shí)都要注意兩個(gè)驅(qū)動(dòng)輪要嚴(yán)格對稱輪距誤差太大會(huì)導(dǎo)致機(jī)器人走直線時(shí)明顯跑偏。萬向輪安裝位置要落在底盤幾何中心附近否則轉(zhuǎn)向時(shí)阻力不均勻里程計(jì)讀數(shù)會(huì)偏移。電池盡量平放并靠近底盤中央降低重心防止過坎時(shí)側(cè)翻。電機(jī)驅(qū)動(dòng)調(diào)試這塊我用的是一個(gè)很基礎(chǔ)的閉環(huán)框架讀取編碼器 → 計(jì)算當(dāng)前轉(zhuǎn)速 → 與目標(biāo)轉(zhuǎn)速做 PID 計(jì)算 → 輸出 PWM。關(guān)鍵點(diǎn)在于 PID 參數(shù)整定。我一般先只調(diào) P從小往大加讓電機(jī)響應(yīng)變快但不要振蕩等 P 到位后再加 I 消除穩(wěn)態(tài)誤差。D 項(xiàng)在大部分底盤上用不上除非你的電機(jī)響應(yīng)特別“沖”。實(shí)際調(diào)試時(shí)可以寫一個(gè)簡單的測試腳本讓左輪和右輪分別以相同 PWM 運(yùn)行對比兩個(gè)輪子的編碼器讀數(shù)。大多數(shù)代碼里這步是通過串口命令行完成的它會(huì)輸出實(shí)實(shí)在在的編碼器數(shù)值——如果左右差異超過 3%請優(yōu)先檢查機(jī)械結(jié)構(gòu)而不是刷 PID 參數(shù)。輪子轉(zhuǎn)得穩(wěn)了后面導(dǎo)航閉環(huán)才有基礎(chǔ)。3.2 激光雷達(dá)驅(qū)動(dòng)與建圖從“能看到”到“能記地圖”雷達(dá)驅(qū)動(dòng)在 ROS 下通常是現(xiàn)成的你只需要安裝對應(yīng)驅(qū)動(dòng)包、修改串口權(quán)限啟動(dòng)后rostopic echo /scan就能看到原始掃描數(shù)據(jù)。拿到掃描數(shù)據(jù)后第一步是雷達(dá)標(biāo)定讓雷達(dá)勻速轉(zhuǎn)一圈檢查數(shù)據(jù)里有沒有明顯缺口、噪點(diǎn)、畸變。激光雷達(dá)最怕反光和玻璃家里的鏡子、落地窗、亮面瓷磚都會(huì)造成測距異常前期標(biāo)定不解決后面建圖就會(huì)有一堆“幽靈墻”。建圖我用的是 Cartographer原因很簡單它的回環(huán)檢測能讓我這種手殘玩家少犯“地圖沒閉合”的錯(cuò)誤。具體流程是啟動(dòng)機(jī)器人底盤節(jié)點(diǎn)讓底盤能接收/cmd_vel速度指令。啟動(dòng)雷達(dá)驅(qū)動(dòng)確認(rèn)/scan話題有數(shù)據(jù)。啟動(dòng) IMU 驅(qū)動(dòng)如果有發(fā)布/imu數(shù)據(jù)。啟動(dòng) Cartographer 建圖節(jié)點(diǎn)融合雷達(dá)和里程計(jì)/IMU 數(shù)據(jù)實(shí)時(shí)生成地圖。手動(dòng)遙控機(jī)器人緩慢走遍房間建圖完成。運(yùn)行地圖保存命令把地圖發(fā)布出去。建圖時(shí)的“緩緩走”特別關(guān)鍵。新手最容易犯的錯(cuò)是推著遙控器猛走一個(gè)急拐彎掃描匹配就跟不上地圖直接糊掉。我的體會(huì)是建圖階段按 0.1m/s 左右的速度走最簡單寧可慢一點(diǎn)多兜兩圈也比建完一張廢圖重來強(qiáng)。3.3 導(dǎo)航與自動(dòng)回充讓機(jī)器人為自己“找路回家”建完圖之后導(dǎo)航是另外一套流程。在 ROS 里一般用move_base這個(gè)包它負(fù)責(zé)接收地圖、目標(biāo)點(diǎn)和實(shí)時(shí)激光數(shù)據(jù)然后輸出速度指令給底盤。導(dǎo)航的兩個(gè)關(guān)鍵參數(shù)配置全局代價(jià)地圖由靜態(tài)地圖和膨脹層組成膨脹半徑要按機(jī)身寬度的一半來設(shè)置否則機(jī)器人會(huì)撞墻。局部代價(jià)地圖實(shí)時(shí)監(jiān)測激光雷達(dá)看到的障礙物用于局部避障更新頻率一定要遠(yuǎn)高于全局地圖。自動(dòng)回充的核心不是“回到充電樁坐標(biāo)”而是“對準(zhǔn)充電樁觸點(diǎn)”。方法不復(fù)雜在建圖時(shí)把充電樁附近設(shè)為“回充點(diǎn)”機(jī)器人完成清掃任務(wù)后先全局規(guī)劃到回充點(diǎn)附近然后低速前進(jìn)利用紅外接收器尋找充電樁上的紅外發(fā)射源對準(zhǔn)后緩慢倒車或直行直到觸碰到充電極片并檢測到電流回路。這個(gè)方法看似簡單但在黑暗環(huán)境中特別依賴紅外信號(hào)。實(shí)測下來回充的成功率在 90% 以上如果失敗了大概率是回充路徑上有個(gè)障礙物剛好在紅外發(fā)射角邊緣。4. 常見問題與排查技巧實(shí)錄4.1 高頻問題的排查清單我把常見故障整理成表方便你直接對著排查現(xiàn)象可能原因排查方法與解決方案開機(jī)后系統(tǒng)反復(fù)重啟供電不足、電池電壓過低用萬用表量主控供電電壓觀察啟動(dòng)瞬間壓降更換電池或加大電源輸出能力雷達(dá)數(shù)據(jù)滿屏噪聲雷達(dá)供電不穩(wěn)、機(jī)械結(jié)構(gòu)松動(dòng)檢查雷達(dá)電源必要時(shí)單獨(dú)供電重新固定雷達(dá)支架建圖時(shí)地圖扭曲里程計(jì)/IMU 未融合、輪子打滑檢查編碼器是否裝緊重新標(biāo)定 IMU降低走速收到速度指令但輪子不動(dòng)串口通信協(xié)議不匹配、電機(jī)驅(qū)動(dòng)過流保護(hù)用串口調(diào)試工具比對協(xié)議幀格式復(fù)位驅(qū)動(dòng)板并檢查堵轉(zhuǎn)電流頻繁撞擊物體碰撞傳感器觸發(fā)邏輯錯(cuò)誤、代價(jià)地圖膨脹半徑太小檢查碰撞傳感器接線和按鍵電平邏輯增大膨脹半徑自動(dòng)回充回不到充電樁回充信標(biāo)安裝位置不佳、紅外干擾調(diào)整回充信標(biāo)高度和角度確保與機(jī)器人接收器平行關(guān)閉附近紅外干擾源掃地機(jī)一邊走一遍偏左右輪輪速不一致、重心偏載先檢查機(jī)械對稱性再用 PID 補(bǔ)償兩個(gè)輪子的速度差風(fēng)機(jī)噪聲大但仍吸不上灰風(fēng)道漏氣、塵盒濾網(wǎng)堵塞檢查塵盒密封圈、風(fēng)管接口是否松動(dòng)清理濾網(wǎng)4.2 調(diào)試踩坑經(jīng)驗(yàn)別迷信“開源即能用”開源方案給我的整體印象是原理上通工程上還得潤。我見過很多人下載開源代碼后直接編譯編譯不過就覺項(xiàng)目是假的。其實(shí)開源項(xiàng)目最常見的問題就是依賴版本對不上比如 ROS 版本、Python 版本、某個(gè)驅(qū)動(dòng)庫版本不一致。拿到一個(gè)項(xiàng)目第一個(gè)動(dòng)作不是編譯而是先看 README 里的環(huán)境要求把這幾個(gè)項(xiàng)逐一對齊ROS 版本ROS1 Noetic 還是 ROS2 Humble差別很大很多驅(qū)動(dòng)包不能跨版用操作系統(tǒng)版本Ubuntu 18.04 / 20.04 直接決定你該怎么設(shè)置依賴源Python 版本有的激光雷達(dá)驅(qū)動(dòng)只兼容 Python2放棄它別和它杠底層 MCU 的編譯環(huán)境STM32 工程一般用 STM32CubeMX 生成或 Keil 打開注意芯片型號(hào)和庫版本要匹配另一個(gè)踩坑點(diǎn)是 USB 串口權(quán)限。樹莓派上插雷達(dá)、插主控板、插 IMU經(jīng)常會(huì)遇到/dev/ttyUSB0不存在或者沒有權(quán)限。這不是接線問題是 Linux 用戶組和 udev 規(guī)則的問題。通用做法是lsusb確認(rèn)設(shè)備有沒有被系統(tǒng)識(shí)別ls /dev/tty*確認(rèn)串口號(hào)把當(dāng)前用戶加入dialout組sudo usermod -aG dialout $USER有條件的話寫好 udev 規(guī)則把設(shè)備的串口號(hào)固定下來。這個(gè)步驟看起來瑣碎但實(shí)際開發(fā)中 80% 的“連不上設(shè)備”問題都出在這。4.3 如何驗(yàn)證自己搭的導(dǎo)航靠譜不靠譜導(dǎo)航調(diào)完了不能口說“能跑就算成功”建議按以下步驟做驗(yàn)收測試直線測試遙控機(jī)器人前進(jìn) 2 米測量實(shí)際偏移。左右偏差超過 10cm 就說明里程計(jì)有問題?;丨h(huán)測試讓機(jī)器人走一個(gè) 2m×2m 的正方形回到起點(diǎn)觀察地圖上足跡是否閉合。不閉合就查掃描匹配和 IMU 融合。避障測試在行進(jìn)路線上放幾個(gè)紙箱機(jī)器人應(yīng)能以合理路徑繞開而不是原地長時(shí)間旋轉(zhuǎn)?;爻錅y試連續(xù)執(zhí)行 10 次回充任務(wù)成功率至少要達(dá)到 8 次否則說明回充的硬件安裝或策略有問題。續(xù)航測試在中等吸力模式下跑完整機(jī)電池記錄可運(yùn)行時(shí)間判斷電池容量匹配度。這套測試方法不只是給開源項(xiàng)目用的很多家用掃地機(jī)器人的驗(yàn)收測試也是類似思路。做完這幾項(xiàng)你才有底氣說“我造出來了”。5. 這個(gè)開源方案的價(jià)值邊界與我的個(gè)人建議說實(shí)話自己做一臺(tái)掃地機(jī)器人成本其實(shí)不算低。買激光雷達(dá)、主控板、電機(jī)驅(qū)動(dòng)、電池、結(jié)構(gòu)件零零總總加起來可能比一臺(tái)入門級成品掃地機(jī)還貴。那為什么還要折騰我的理解是真正的產(chǎn)出不是那臺(tái)機(jī)器而是你把它跑通后建立起的系統(tǒng)認(rèn)知。造完這臺(tái)機(jī)器后你再回頭看市面上的掃地機(jī)就能看懂廠商宣傳里的每一個(gè)詞了。激光導(dǎo)航對應(yīng)的是 SLAM 方案斷點(diǎn)續(xù)掃對應(yīng)的是地圖分區(qū)和路徑規(guī)劃自動(dòng)回充對應(yīng)的是紅外對準(zhǔn)和電源管理。所有營銷術(shù)語落到工程上就是我在上面拆的那幾條鏈路。如果你想嘗試我給幾個(gè)基于實(shí)操經(jīng)驗(yàn)的建議先別急著下單所有硬件先看方案文檔的硬件清單和結(jié)構(gòu)圖確認(rèn)你有能力加工或買到對應(yīng)結(jié)構(gòu)件。第一次弄推薦先采用雙腦架構(gòu)哪怕多花一百塊錢調(diào)試體驗(yàn)完全不一樣。建圖和導(dǎo)航階段建議準(zhǔn)備一個(gè)“測試跑道”比如客廳里擺好固定障礙物方便反復(fù)測試定位穩(wěn)定性。不要把電池安全當(dāng)兒戲鋰電充電必須用帶平衡充的保護(hù)板充電時(shí)人要在旁邊觀察防止意外。最后分享一個(gè)小技巧做底盤調(diào)試前先把機(jī)器人想辦法架起來讓輪子懸空。這樣在調(diào) PID 時(shí)既不會(huì)撞墻也不會(huì)燒電機(jī)還能隨時(shí)觀察編碼器數(shù)值變化。等底層控制代碼沒問題了再把機(jī)器人放到地上讓它在真實(shí)空間中接受導(dǎo)航和避障的考驗(yàn)。這個(gè)順序看著簡單但能幫你省下大量折騰時(shí)間。我自己折騰完這個(gè)項(xiàng)目之后最大的感受是開源不是把答案擺在你面前而是把“自己也配擁有問題”的這個(gè)資格變成了現(xiàn)實(shí)。掃地機(jī)器人這條開發(fā)路徑上的每個(gè)坑掉進(jìn)去一次爬起來一次你對機(jī)器人的理解就會(huì)扎實(shí)一層。