:從開箱到點云輸出全解析)
拿到IWR1843這塊板子的時候說實話我比預期中冷靜了不少。不是因為東西不夠好而是因為等快遞那幾天我已經(jīng)把TI官方的User Guide、數(shù)據(jù)手冊和一堆論壇帖子翻了個遍心里大概知道會收到什么。但真正拆開靜電袋、把USB線插上去、看到串口刷刷往外吐點云數(shù)據(jù)的那一刻還是覺得值了。這塊板子就是TI的IWR1843BOOST一顆77GHz毫米波雷達SoC的評估套件集成了射頻前端、DSP和MCU三合一單芯片就能完成從調頻連續(xù)波信號生成到目標點云輸出的全鏈路。如果你正在做智能家居里的人體存在檢測、工業(yè)場景里的距離/速度測量或者想入門毫米波雷達但不知道從哪下手這塊板子是一個非常合適的起點。這篇文章我不打算寫成一份翻譯腔的官方文檔復述而是按照我自己的實操順序把從開箱到跑通demo、再到理解底層原理和踩坑修復的完整過程記錄下來順便把幾個容易卡住新手的細節(jié)一次性講透。1. 選型思路與硬件盤點為什么是IWR1843而不是24GHz模塊1.1 77GHz與24GHz的定位差異先說一個很多人一開始會糾結的問題為什么選77GHz的IWR1843而不是那些幾十塊錢的24GHz毫米波雷達模塊我個人的看法是這兩種東西雖然都叫毫米波雷達但壓根不是同一個物種。24GHz模塊比如熱詞里那個“24GHz毫米波雷達模塊40m”通常只輸出簡單的多普勒電平或者目標距離值內部往往是一顆集成了VCO和混頻器的單芯片數(shù)據(jù)接口一般是模擬電壓或者簡單的串口協(xié)議距離分辨率大概在0.75米左右。對于測速、觸發(fā)開關這類粗粒度的場景它便宜、功耗低、開發(fā)簡單夠用。但如果想做人數(shù)統(tǒng)計、軌跡跟蹤、微動姿態(tài)識別、生命體征檢測這類需要高距離分辨率和多維特征的任務24GHz模塊基本就力不從心了。IWR1843工作在77GHz頻段可用帶寬能達到4GHz76-81GHz對應的距離分辨率理論上可以做到大約3.75厘米。什么概念24GHz模塊是“這有個東西大概在幾米外”IWR1843是“這有個東西在3.247米處徑向速度0.5米/秒正在朝我靠近”。這種級別的細節(jié)信息完全不在一個量級上。再加上IWR1843內部有完整的DSP和MCU可以直接在片上跑FFT、CFAR檢測、聚類和跟蹤算法輸出的是已經(jīng)處理好的點云而不是原始中頻信號對后端主控的計算壓力非常小。1.2 板載資源與接口速覽開箱之后先別急著上電花幾分鐘把板子上的資源認一遍后面調試能省很多事。IWR1843BOOST開發(fā)板正面最顯眼的是板載天線陣列3個接收天線RX和4個發(fā)射天線TX直接做在PCB上省去了外接天線的麻煩也少了很多射頻布線的坑。這個天線設計決定了它能做方位角測量通過多根RX天線接收信號的相位差可以解算出目標的水平到達角這也是很多應用里“目標在哪個方向”這個問題的答案來源。板子的另一側是XDS110調試器通過USB連接到電腦后會虛擬出兩個串口和一個調試接口。兩個串口的分工我在后面實操環(huán)節(jié)會細說這里先記著一個是配置/控制口一個是數(shù)據(jù)輸出口。另外板子上還有40針的LaunchPad兼容排針可以外接其他MCU或者傳感器板做多傳感器融合的時候非常有用。板載的IWR1843芯片內部結構也值得了解一下它其實是三個處理單元的組合射頻前端子系統(tǒng)BSS負責發(fā)射線性調頻脈沖、接收回波、混頻得到中頻信號然后做ADC采樣。DSP子系統(tǒng)C674x跑距離FFT、多普勒FFT、CFAR檢測這些核心算法。MCU子系統(tǒng)Cortex-R4F負責配置、控制、結果整理上報也處理一些簡單的應用邏輯。這個三核架構的好處是處理鏈路非常流暢中頻數(shù)據(jù)在片內就能完成全鏈路處理不需要把原始數(shù)據(jù)導出來實時性很強。官方SDK里的大量例程比如生命體征、人員計數(shù)、短距離雷達都是基于這套架構實現(xiàn)的。2. 開發(fā)環(huán)境搭建與工具鏈選型2.1 四件套的安裝順序與版本搭配IWR1843的開發(fā)環(huán)境說復雜也復雜說簡單也簡單本質上是四樣東西的搭配CCSCode Composer StudioTI的IDE、mmWave SDK、UniFlash燒錄工具以及毫米波工業(yè)工具箱Radar Toolbox or Industrial Toolbox看SDK版本。很多新手在這第一步就翻車所以我按我的順序講一遍。先裝mmWave SDK再裝CCS最后裝UniFlash。這個順序不是隨便來的因為mmWave SDK安裝包里自帶的文檔和腳本會關聯(lián)到CCS的安裝路徑先裝SDK再裝CCS會讓一些路徑變量自動配置失敗后面導入例程的時候還得手動補。不過我實測下來其實誰先誰后都能用最關鍵的還是版本要對上否則編譯和燒錄階段會出現(xiàn)各種匪夷所思的錯誤。以我現(xiàn)在用的這套為例CCS版本是12.x對應內置的TI Clang編譯器mmWave SDK是4.x版本我用的4.5.0UniFlash是最新的在線版。如果你手里的SDK是3.5或者更早的版本編譯器要用TI的gcc-arm-none-eabi工具鏈路徑配置會稍微不一樣。所以一個簡單粗暴的建議直接在TI官網(wǎng)上拉最新的SDK和配套的CCS安裝包不要混搭。2.2 連接板卡與驅動檢查硬件連接需要注意的細節(jié)其實不少。IWR1843BOOST有兩個USB口一個是XDS110調試口靠近天線端的micro-USB或Type-C看硬件版本另一個是UART轉USB口用于數(shù)據(jù)輸出。我建議先只接XDS110那個口因為板子的供電是通過這個口完成的接一個口就足夠上電了兩個都插容易導致串口枚舉混亂。插上USB后在設備管理器里能看到三個設備一個XDS110調試器、兩個COM端口通常是COM3、COM4這種編號具體數(shù)字每臺電腦不一樣。這兩個串口一個是Application/UART用戶數(shù)據(jù)端口一個是CLI端口配置命令端口。如果只看到一個串口或者干脆看不到大概率是驅動沒裝好XDS110的驅動會在CCS安裝時自動帶上也可以去TI官網(wǎng)單獨下載。到這里環(huán)境準備就完成了可以開始跑第一個demo。3. 開箱演示全流程實操記錄3.1 免燒錄體驗板載演示程序的上電運行IWR1843BOOST出廠時燒錄了一個“開箱演示”程序對應的上位機是mmWave Demo Visualizer。這個演示可以讓用戶在完全不寫一行代碼的情況下看到雷達的點云輸出。整個過程分四步選設備、選SDK版本、連串口、看數(shù)據(jù)。首先用瀏覽器打開mmWave Demo Visualizer直接在TI官網(wǎng)找在線版在左側Device下拉框里選擇IWR1843。然后關鍵一步在SDK版本那里選擇與板子出廠固件匹配的版本。這一步如果選錯界面會提示需要重新燒錄固件。我不知道出廠固件對應的SDK版本是多少的話有個笨辦法先把所有能選的版本都試一遍看哪個版本連接后能正常出數(shù)據(jù)。反正連接不成功也不會把板子搞壞最多就是提示版本不匹配。串口配置方面CLI Port選擇兩個中的任意一個如果不知道哪個是哪個可以先選第一個試試Data Port選擇另外一個。波特率IWR1843固定是115200不用改。配置完成后點擊Connect正常情況下會在幾秒內開始刷點云數(shù)據(jù)同時左上角能看到目標的距離、角度和速度信息下方還有一張實時更新的XY平面圖雷達的位置在坐標原點檢測到的目標會以點云的形式顯示出來。我第一次跑這個demo的時候在房間里走了幾圈點云隨著我的移動實時變化距離讀數(shù)從3米變成1米再變成2米那一刻確實有種“原來雷達是這么看世界的”的感覺。建議新手在這一步多玩一會兒把手放在雷達前面慢慢靠近再遠離觀察距離值的變化手臂左右擺動觀察角度值的變化快速揮手觀察速度值的變化。這個過程能把“測距、測速、測角”這三件事直觀地印在腦子里比看一百頁理論都管用。3.2 CLI配置命令逐條拆解演示模式雖然爽但要真正掌握這塊板子必須學會讀和寫配置命令。mmWave Demo Visualizer在連接成功后會通過CLI口向板子發(fā)送一串配置指令這條指令流就是雷達的工作參數(shù)清單我把其中幾條主要命令拆開解釋一遍。首先是channelCfg它配置的是發(fā)射和接收通道。比如channelCfg 1 1 0表示使能兩個發(fā)射通道和一個接收通道實際根據(jù)天線布局有對應關系。通道數(shù)量直接影響角度測量能力用到的RX通道越多角度分辨率越好但數(shù)據(jù)量和功耗也越高。然后是profileCfg這是最核心的一條命令配置的是發(fā)射信號的線性調頻參數(shù)。profileCfg 0 77 8 6 57 0 0 30 1 160 5000 0 0 48這一串數(shù)字里77是起始頻率8是調頻斜率57是ADC采樣率160是脈沖持續(xù)時間5000是周期。這些參數(shù)組合起來決定了雷達的探測距離上限、距離分辨率和最大不模糊速度。比如調頻斜率越大相同帶寬下掃描時間越短距離分辨率越好但ADC采樣時間變短會限制最大探測距離幀周期越短能檢測的最大速度越高但多普勒分辨率會變差。這是一組需要權衡的參數(shù)后面做實際應用調參時會反復折騰這里。最后是frameCfg配置幀結構。frameCfg 0 0 2 0 50 1 0大概的意思是一個幀里有若干chirp幀周期50毫秒也就是每秒出20幀數(shù)據(jù)。幀率越高對動態(tài)目標的跟蹤越流暢但功耗和計算量也會成倍增加。在這一步我強烈建議你做一件事把自動生成的配置命令復制出來保存成一個txt文件然后試著改動幾個參數(shù)比如把調頻斜率調大調小觀察可視化界面上距離上限和分辨率的實際變化。這是理解FMCW雷達原理最快的方式比任何仿真都直觀。4. 從演示到開發(fā)核心原理與二次開發(fā)要點4.1 距離、速度、角度的“三重奏”原理為什么IWR1843能同時測出距離、速度和角度我用一個大白話的類比來解釋。測距的原理用的是“回聲定位”的升級版。雷達發(fā)射一個頻率隨時間線性增大的信號就是FMCW調頻連續(xù)波信號碰到目標后反射回來雷達把發(fā)射信號和接收信號做一個“混頻”得到一個差頻信號。因為光速是固定的信號多跑一個來回就需要時間而這個時間差會體現(xiàn)在差頻頻率上頻率高就說明目標遠。這個差頻經(jīng)過FFT變換后變成一個峰峰的位置就是目標的距離。測速的原理稍微巧妙一點它利用的是“多普勒效應”。目標如果正在朝雷達移動反射回來的信號頻率會偏高這個頻移量正比于目標的徑向速度。IWR1843會連續(xù)發(fā)射多個chirp對同一個距離門在不同chirp之間做第二次FFT得到的就是多普勒頻率換算后就是速度。測角的原理用的是“相位干涉”。多根接收天線收到同一個目標的回波時因為目標位置相對每根天線的距離略有不同所以回波信號到達各天線的相位也不同。IWR1843通過比較不同天線之間的相位差就能算出目標的到達角。用到的天線數(shù)量越多角度分辨率越好。這三重信息在IWR1843內部是這樣流水線處理的ADC采樣后的中頻數(shù)據(jù)先做距離FFT得到“哪些距離上有目標”再做多普勒FFT得到“這些距離上的目標速度是多少”最后通過天線間的相位比較做角度估計得到“目標在哪個方向”。最終輸出一個包含距離、速度、角度、強度四個維度的點云。這也是為什么這類雷達常被稱為4D雷達的雛形——雖然IWR1843單芯片嚴格來說是3D功率但通過多片級聯(lián)或者長時間積累可以擴展到真正的4D點云。4.2 基于mmWave SDK的工程結構與關鍵函數(shù)如果不想止步于演示模式想自己寫代碼控制這塊板子那就需要進入mmWave SDK的世界。SDK里最有價值的不是代碼本身而是它把整個信號處理鏈路都封裝成了模塊你只需要填參數(shù)。SDK里的核心目錄是ti\drivers\和ti\datapath\前者包含各種硬件驅動后者是整個數(shù)據(jù)流的骨干。數(shù)據(jù)流大概是這樣的ADC數(shù)據(jù)從射頻前端出來進入一個叫DPCData Path Configuration的處理鏈DSP按順序執(zhí)行距離FFT、多普勒FFT、CFAR檢測然后MCU負責把結果打包成點云并輸出。SDK里的例程會幫你把這些模塊全部連接好你要做的只是配置參數(shù)、寫自己需要的后處理邏輯。從工程模板入手是最快的方式。在CCS里通過Resource Explorer找到mmWave SDK - mmwave_sdk_版本 - examples - mmwave - lab相關目錄選擇你板子對應的工程導入后直接編譯燒錄就行。燒錄過程通常在CCS里點個按鈕就完成了但我個人建議額外裝一個UniFlash因為有時候板子里的程序跑飛了比如配置了錯誤的參數(shù)導致DSP卡死CCS會連不上目標板這時候要用UniFlash做一次格式化并重新燒錄能救回不少磚頭。二次開發(fā)中最常改的地方是main.c里的cliCfg和dss相關配置以及mss_main里的自啟動配置。舉個例子如果你想讓雷達在開機后不依賴CLI命令自動運行可以把配置文件改成在代碼里加載預設的chirp參數(shù)省去每次上電都要手動發(fā)配置命令的麻煩。實測下來這個改動是幾乎所有量產(chǎn)項目都會做的第一步。4.3 生命體征檢測與C FFT處理的進階路徑既然熱詞里出現(xiàn)了“毫米波雷達生命體征”和“毫米波雷達C FFT程序”我順便把這兩個進階方向也寫一下。生命體征檢測的原理和前面說的測速其實是相通的只是觀察的對象從整個目標變成了目標的微動。人的呼吸和心跳會讓胸腔表面產(chǎn)生一種周期性的微小平移這個位移只有毫米甚至亞毫米級別。IWR1843的距離分辨率雖然只有3.75厘米沒法直接分辨出胸腔的位移但它可以測量回波信號的相位變化而相位變化對微小位移極其敏感能敏感到亞毫米級別。通過對特定距離門上回波信號的相位做時間序列分析再經(jīng)過帶通濾波就能分離出呼吸頻率約0.2-0.5Hz和心跳頻率約1-1.7Hz。TI官方有一個vital signs demo就是干這個的實測躺坐在雷達前1-2米位置呼吸頻率檢測很準心跳檢測需要良好的信噪比環(huán)境和合適的濾波參數(shù)。關于“毫米波雷達C FFT程序”簡單說就是雷達信號處理里最核心的計算單元。在PC上做FFT可能只需要調一個庫函數(shù)但在IWR1843的DSP上做FFT需要充分利用它的硬件加速單元FFT硬件協(xié)處理器。TI的DSP庫DSPLib提供了優(yōu)化過的FFT函數(shù)比如DSPF_sp_fftSPxSP使用前需要做位反轉表初始化使用后要做歸一化處理。如果你的應用不滿足于SDK自帶的數(shù)據(jù)鏈想自己寫更定制化的算法比如自定義CFAR閾值邏輯那就必須熟悉這套FFT調用流程。我的建議是先讀明白SDK里dopplerProcessing和rangeProcessing兩個模塊的代碼把里面的FFT調用剝出來再動手寫自己的版本別一上來就重寫整個pipeline。5. 實操中的高頻問題與排查經(jīng)驗5.1 經(jīng)典報錯與處理方法速查IWR1843開發(fā)過程中會遇到很多奇奇怪怪的問題我把自己踩過和一些朋友常問的高頻問題整理在下面可以直接對照排查。板子連接不上mmWave Demo Visualizer先檢查設備管理器里兩個串口是否存在。如果兩個串口都在但連接失敗多半是SDK版本選錯了把左側的SDK版本換成出廠匹配版本再試。如果換了好多版本都不行用UniFlash重新燒錄一遍出廠固件選擇xwr18xx_mmw_demo.bin燒完再連。連接后只在CLI口看到數(shù)據(jù)數(shù)據(jù)口無輸出這是正常的剛連接時數(shù)據(jù)口本來就沒有數(shù)據(jù)需要先通過CLI口發(fā)送配置命令啟動數(shù)據(jù)流。mmWave Demo Visualizer連接成功后會自動發(fā)送配置但如果用的是自己寫的上位機一定記得要先把配置命令發(fā)過去否則板子不會自己開始發(fā)射信號。點云一直在刷新但我在屏幕前揮手沒反應先檢查雷達前方的空曠度。毫米波雷達對金屬、墻角、大型家具非常敏感如果雷達面前有一個靜止的大金屬物體它會持續(xù)反射一個很強的靜態(tài)目標點云把動態(tài)目標的點云信息蓋掉一點。把雷達指向一個空曠區(qū)域再試。另外人的微多普勒信號本身比較弱如果增益設置過低會檢測不到。距離讀數(shù)總比實際距離偏大或偏小這是距離補償問題。IWR1843的中頻信號存在非線性和溫度漂移加上天線罩的延遲會導致固定偏移。解決辦法是做一個標定實驗把目標放在已知距離處比如2米記錄測量值然后在后處理中加上一個固定補償系數(shù)。這個補償值在不同溫度下還會輕微變化高精度應用需要帶溫度補償。5.2 供電、接地與天線端口的物理層注意事項最后提醒一個軟件之外的坑供電穩(wěn)定性。IWR1843BOOST在滿負荷發(fā)射時峰值電流不小如果用劣質USB線或者電腦USB口供電能力弱會出現(xiàn)一種很隱蔽的故障——板子能枚舉串口、能連上可視化工具但一啟動發(fā)射就復位或者數(shù)據(jù)流中斷。我遇到過好幾次換了根粗一點的USB線就解決了。還有一點是關于天線端口的保護。IWR1843BOOST的天線直接裸露在PCB邊緣沒有外接天線接口這本身是個好事少了一個“接口匹配不好導致性能暴跌”的變量。但也意味著天線很脆用手摸、磕碰或者導電物體接觸都可能導致天線性能下降甚至芯片損壞。我在調試時習慣把雷達放在一個固定支架上避免頻繁拿放。6. 一些個人體會說實話IWR1843并不是一塊容易上手的板子它的學習曲線比普通的MCU開發(fā)板陡峭不少要理解FMCW雷達原理要看得懂復雜的配置參數(shù)要能在CCS和SDK之間折騰出能跑的工程還有一系列射頻相關的物理層細節(jié)需要敬畏。但反過來講一旦你真正跑通了點云輸出理解了配置文件里那些數(shù)字背后的物理含義你會發(fā)現(xiàn)毫米波雷達其實是一個邊界極其清晰的傳感器——它的輸出永遠是有序的結構化數(shù)據(jù)不會像攝像頭那樣受光照影響也不會像超聲波那樣測不了遠距離目標在智能家居、工業(yè)檢測、交通監(jiān)控這些場景里它都有著其他傳感器難以替代的獨特位置。我自己的習慣是拿到一塊新的雷達板子一定先花半天時間純粹地看數(shù)據(jù)不寫代碼不調參數(shù)就盯著點云看不同場景下的表現(xiàn)人走動、人坐下不動、桌椅搬動、風扇轉動、甚至窗簾被風吹動在雷達眼里是什么樣。這個習慣幫我省下了后面大量的調參時間——因為只有先知道這個傳感器的邊界和脾氣才談得上去駕馭它。如果你也剛拿到這塊板子不妨先從一個目標物開始慢慢挪動、旋轉、加速觀察點云的每一幀變化。數(shù)據(jù)會告訴你一切。