1. 先把硬件链路理顺:连接顺序、SOP跳线和COM口的坑
说实话,第一次用mmWave Studio配TI毫米波雷达的人,卡住的时间多半不在软件本身,而在硬件连接。我见过太多同事拿着IWR6843ISK和DCA1000EVM,驱动装好了,板子也亮了,结果点Connect就是连不上,最后折腾半天发现只是SOP跳线拨错了,或者COM口选成了Debug口。这些事一旦经历过一次,之后就再也不会犯,但首次接触真的容易原地打转。这篇我先讲硬件链路里最容易出问题的三个环节,因为后面的软件配置、Lua脚本一键配置,全部建立在"PC能稳定找到雷达板"这个前提上。
1.1 一张清单确认你手里的东西
手把手做之前,先对照清单确认东西齐不齐。以最常见的调试组合为例:
| 硬件/软件 | 用途 | 注意事项 |
|---|---|---|
| TI毫米波雷达评估板(IWR6843ISK / IWR1443BOOST / AWR1843BOOST) | 雷达前端,负责发射和接收 | 不同板子支持的频段不同,IWR6843是60GHz,IWR1443/AWR1843是77GHz |
| DCA1000EVM数据采集卡 | 把雷达的LVDS原始ADC数据从板子搬到PC,供mmWave Studio / MATLAB / Python处理 | 如果不做原始数据采集、只看板上点云输出,可以不用,但大多数配置场景还是建议配上 |
| 5V/2.5A及以上直流电源 | 给雷达板和DCA1000供电 | 别用电脑USB口直接带DCA1000,实测经常供电不足导致枚举失败 |
| 两根Micro USB或Type-C线(按板型) | 一根接雷达板的xDS110调试口,一根接DCA1000的USB口 | 有些板子一个USB口就能同时出配置串口和调试串口,具体看板子丝印 |
| mmWave Studio | TI官方上位机,用于配置雷达参数、加载固件、采集数据 | 版本尽量选新的,但要注意和雷达型号匹配,比如老版本不一定支持IWR6843 |
| xDS110驱动、FTDI驱动 | 让PC识别板载调试器和DCA1000的USB转串口芯片 | Windows系统第一次插上板子后设备管理器里能看到带感叹号的设备,就是缺驱动 |
这里有一条非常容易被忽略的规则:雷达板上的xDS110会枚举出两个串口,一个是Application/User UART,一个是Debug UART。mmWave Studio配置时用的是Application/User UART,波特率通常115200。如果你在软件里选了Debug口,连接就会失败。后面会详细说怎么区分。
1.2 SOP跳线:开发和刷写模式千万别弄反
TI毫米波雷达板上的SOP(Sense on Power)跳线,决定了板子上电后从什么模式启动。它并不是随便拨的,拨错了轻则连不上mmWave Studio,重则把固件刷到不该刷的区域。以IWR6843ISK为例,常见的SOP模式如下:
| SOP模式 | 含义 | 典型场景 |
|---|---|---|
| SOP=0 | 功能模式,板子直接运行Flash里已有的固件 | 用mmWave Demo Visualizer直接看点云时用 |
| SOP=1 | 刷写模式,允许通过UART把固件烧进Flash | 使用UniFlash烧录固件时用 |
| SOP=2 | 开发模式,由外部上位机(如mmWave Studio)加载固件并控制运行 | 做mmWave Studio配置时用 |
所以用mmWave Studio做配置和采集时,SOP一定要设在2。设置好之后必须重新上电,让跳线状态生效。
不同板子的跳线位置和命名不一样,有的标SOP0/SOP1/SOP2,有的标成短接块。我自己的习惯是拿到板子先翻一遍评估板User Guide里的"Configuring the Device"章节,把跳线图示截个图放手机里,免得现场忘了。经验教训:第一次自己配的时候把SOP放到了1,结果mmWave Studio加载固件时直接写进Flash,后续测试就乱套了。
1.3 上电、插线、认准COM口
硬件连接顺序也影响稳定性。推荐这样做:
- 先把DCA1000EVM和雷达板通过60pin接口对接好,确认卡扣到位。
- 把SOP跳线设在开发模式(SOP=2)。
- 接通直流电源,等待板子上的LED正常亮起。
- 插入雷达板的USB线,再插入DCA1000的USB线。
- 打开设备管理器,记下新增的COM口号。
正常状态下,设备管理器里应该能看到这么几类设备:
- 两个xDS110 Class Serial Port(一个Application UART,一个Debug UART,名称里通常会带注释);
- 一个DCA1000对应的USB Serial Port(FTDI芯片),或者一个以太网接口(DCA1000也支持网口传输,但mmWave Studio配置时一般用USB串口)。
很多人卡在"不知道用哪个COM口"。我在Windows设备管理器里的判断方法很简单:xDS110那两个串口,通常在“端口(COM和LPT)”下面显示为"XDS110 Class Application/User UART (COMx)"和"XDS110 Class Auxiliary/Debug UART (COMx)",mmWave Studio里要选的是Application/User UART,不是Debug,更不是DCA1000那个串口。
还有一种很常见的坑是COM口号漂移。今天插上去是COM5,明天电脑重启变成COM7,脚本里写死COM5就开始报错。解决办法是右键串口 -> 属性 -> 端口设置 -> 高级 -> 把COM端口号固定成一个不常用的号,比如COM10。这样Lua脚本里的串口号就不用老改。
2. 手动配置一遍,理解mmWave Studio到底在做什么
在进入Lua脚本之前,我强烈建议先手动走通一遍完整的配置流程。原因很简单:如果你不理解每个步骤在干什么,脚本出了问题你根本不知道怎么排查。这一节我按实际操作顺序讲,并且把背后的逻辑也解释清楚。
2.1 界面操作的本质:GUI在替你发CLI命令
mmWave Studio虽然是个图形界面,但它本质上是一个"命令搬运工"。雷达板内部运行着一套叫mmWaveLink的固件协议栈,它接收特定的文本命令,比如"配置chirp参数""配置帧参数""启动发射"。上位机里的每一次鼠标点击,最终都会变成一条这样的文本命令,通过UART串口发给雷达板。
这一点对后面的Lua脚本化至关重要。因为mmWave Studio的设计里,所有GUI操作都会在软件自带的Lua Console里同步生成一行Lua代码。你手动点一遍,软件其实已经帮你把每个操作的脚本指令记录下来了。这也是为什么我说"别自己凭空写Lua脚本,先手动配置一遍再导出"——脚本最可靠的来源就是软件自动生成的那份。
2.2 加载固件与连接雷达
打开mmWave Studio后,第一步通常是选择设备型号。以IWR6843ISK为例,界面里选好对应型号后,软件会要求加载两个固件文件:
- radarss的固件(比如xwr68xx_radarss.bin),负责射频前端控制;
- masterss的固件(比如xwr68xx_masterss.bin),负责主系统、通信和数据通路。
这两个文件在TI官网的mmWave SDK里都有,版本要和mmWave Studio兼容。如果加载的固件和板子型号不匹配,连接阶段就会报错。我的习惯是加载固件后用串口助手看一眼板子打印的信息,出现mmwavelink之类的提示符就说明固件跑起来了。
连接串口时,在软件里选择之前记下的Application/User UART对应的COM口,波特率115200,点Connect。成功后软件会读取到设备信息,此时硬件链路算是真正打通了。这个阶段如果失败,回到第一章检查SOP和COM口选择。
2.3 Profile、Chirp、Frame参数到底怎么填
连接完成后,真正决定雷达性能的是三组配置参数:Profile、Chirp、Frame。这三者是从底到顶的三层结构:
- Profile定义了一个"基础的发射配置":起始频率、调频斜率、ADC采样数、采样率等;
- Chirp是在Profile基础上定义的具体chirp波形:用哪个profile、发送使能、chirp之间的空闲时间等;
- Frame则把多个chirp组织成一帧:每帧多少个chirp、多少帧、帧周期多少。
手动配置时,界面里会有对应的输入项,填完后软件通过CLI命令发下去。这里我给一组合法且常用的示例参数,以77GHz设备为例(IWR1443/AWR1843),如果用的是60GHz的IWR6843,需要把起始频率改成60GHz附近:
| 参数 | 示例值 | 说明 |
|---|---|---|
| 起始频率 startFreq | 77GHz / 60.25GHz | 决定频段起点 |
| 调频斜率 freqSlope | 50MHz/us | 斜率越高,同样扫频带宽下chirp时间越短 |
| ADC采样点数 numAdcSamples | 256 | 每个chirp采多少个点,直接影响距离维FFT长度 |
| ADC采样率 adcSampleFreq | 5MHz(2000KSps? 注意单位) | 决定最大可测距离 |
| chirp周期 chirpCycle | 约50us | 由空闲时间+调频时间决定,影响最大测速 |
| 每帧chirp数 numLoops | 128 | 多普勒维FFT的点数 |
| 帧数 numFrames | 16 | 总共采集多少帧 |
这里补充一个新手容易懵的点:距离分辨率、最大测距、最大测速之间是互相制约的。几个常用公式如下:
- 距离分辨率:
ΔR = c / (2B),其中B是调频带宽。带宽越大,距离分辨率越好。 - 最大测距:
Rmax = Fs * c / (2S),其中Fs是ADC采样率,S是调频斜率。采样率越高、斜率越低,能测的距离越远。 - 最大测速:
Vmax = λ / (4Tc),其中λ是波长,Tc是chirp周期。chirp周期越短,能测的速度越高。 - 速度分辨率:
ΔV = λ / (2Tf),其中Tf是帧周期。帧周期越长,速度分辨率越好。
比如我配置256个采样点、5MHz采样率、50MHz/us斜率时,理论上最大测距大概是(5e6 * 3e8) / (2 * 50e12) = 15米,距离分辨率则由带宽决定。如果你需要测更远,要么降低斜率,要么提高采样率,但这样chirp时间变长,chirp周期就变长,最大测速又会下降。所以没有一组参数是万能的,全看你的场景。
2.4 手动触发一帧,确认数据链路
配置好Profile、Chirp、Frame之后,下一步是配置DCA1000的数据通路。DCA1000主要有几个设置点:
- LVDS lane数量,和雷达板实际使用的Lane对应;
- 数据格式,选16bit复数格式还是别的;
- 触发模式,通常选Frame Trigger,也就是雷达每发一帧,DCA1000就记录一帧数据。
这些设置完成后,点击Trigger Frame按钮,雷达开始发frame,DCA1000同步录制。mmWave Studio界面上会出现Range Profile之类的实时曲线。如果你能看到一个像样的距离峰(比如板子前面放一块金属板),说明数据链路完全打通了。
我特别强调一点:第一次手动配置,一定要盯着Range Profile确认有东西再继续。如果你放一块金属板在雷达正前方,Range Profile完全没有任何峰,那多半是数据解析格式或LVDS Lane配置不对,这时候直接进Lua脚本只有死路一条。
3. 把手动操作翻译成Lua脚本:一键配置的核心
手动跑通一次之后,接下来的核心任务就是让这个过程变成一键操作。mmWave Studio内置Lua解释器,所有ar1.*函数都和GUI操作背后的API一一对应。我们不需要学习整套API,只需要把手动操作时软件生成的Lua命令整理成一个脚本文件,以后每次打开软件,直接加载脚本,点一下运行,所有配置自动完成。
3.1 不要手写参数,从Lua Console导出
这是我最想强调的一点。很多人看到Lua脚本会下意识觉得自己得把每个参数的顺序背下来,其实完全不用。mmWave Studio在GUI状态下会把每次操作翻译成Lua命令并打印在Lua Console里,你只要手动配置一遍,在控制台里找到对应的命令,复制出来就行。
比如我手动配置Profile时,控制台可能出现这样一行:
ar1.ProfileConfig(0, 60.25, 7, 5, 43, 0, 0, 49.99, 0, 256, 5000, 0, 0, 30)这一行本质上就是前面说的Profile参数。手动点击配置触发了好几个函数调用,它们全都会出现在控制台里。正确的做法是:
- 手动配置成功后,打开Lua Console窗口;
- 从底部往上翻,找到从连接、加载固件、配置Profile/Chirp/Frame、配置DCA1000到触发Frame这一整段命令;
- 把它们复制到一个新的.lua文件中;
- 在文件开头加好注释,写上板子型号、参数含义、日期。
这样生成的脚本,函数名和参数个数一定是对的,比自己对着手册敲要可靠得多。因为不同芯片、不同mmWave Studio版本之间,同一函数可能有细微差异,手写特别容易出错。
3.2 一个能跑的Lua自动配置脚本长什么样
下面是我整理出来的脚本结构模板,用于演示。你需要用自己Lua Console里复制出来的真实命令替换掉示例参数,但结构可以直接套用。
-- mmWave雷达一键配置脚本示例 -- 适用:IWR6843ISK + DCA1000EVM,mmWave Studio 3.x -- 使用前:把下面COM口号改成你自己的Application/User UART local comPort = 10 -- 根据设备管理器填写 local savePath = "C:/radar_data/test" local recordTimeMs = 3000 -- 记录/采帧时长 -- 1. 复位设备 ar1.FullReset() ar1.SOPControl(2) ar1.Sleep(200) -- 2. 连接设备 ar1.Connect(comPort, 115200, 1) ar1.Sleep(300) -- 3. 选择芯片 ar1.SelectChip("AR1") -- 4. 射频参数配置 -- 注意:以下三行参数是示例,一定要替换为Lua Console里复制出的真实命令 ar1.ProfileConfig(0, 60.25, 7, 5, 43, 0, 0, 49.99, 0, 256, 5000, 0, 0, 30) ar1.ChirpConfig(0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0) ar1.FrameConfig(0, 0, 0, 128, 16, 50, 0, 0, 0) -- 5. 数据通路配置 ar1.DataPathConfig(1, 1, 0) ar1.LaneConfig(1, 1, 1, 1, 1, 1, 1, 1) ar1.LVDSLaneConfig(0, 1, 1, 0, 0, 1, 0, 0) -- 6. DCA1000开始记录 ar1.CaptureCardConfig_SetStartFrameTrigger(1, 0, 0) ar1.CaptureCardConfig_StartRecord(savePath, 1, 1, 1, 1, 1) -- 7. 触发采集 ar1.StartFrame() ar1.Sleep(recordTimeMs) ar1.StopFrame() -- 8. 保存日志 ar1.SaveLog(savePath .. "_cfg.log")这段脚本的逻辑非常直白:先把雷达复位到干净状态,然后连接,再按顺序下发射频参数、数据通路参数,最后启动DCA1000并触发雷达开始采集。有些版本里DCA1000的接口函数名可能是ar1.DCA1000StartRecord而不是ar1.CaptureCardConfig_StartRecord,这就是为什么我反复强调要以你当前软件自动生成的命令为准。
还有一点要注意:脚本里ar1.Sleep的参数单位是毫秒。连接之后、下发配置之前,一定要给板子留一点响应时间,否则命令发过去而板子还在忙,后面的函数可能返回失败。
3.3 执行脚本时怎么看状态和日志
脚本写完以后,在mmWave Studio的Lua Editor里加载运行。运行过程中,Lua Console会打印每一步的执行结果。很多ar1.*函数会返回布尔值或状态值,返回1/true表示成功,返回0/false表示失败。我一般这样判断:
ar1.Connect返回失败:串口被占用、SOP跳线不对、COM口号不对;ar1.ProfileConfig返回失败:参数超出芯片允许范围,比如起始频率设得超出频段;ar1.StartFrame之前一切正常,但最后文件里没有数据:DCA1000触发模式或数据格式配置问题。
为了更直观,我习惯在脚本里加上几个print,比如:
local ok = ar1.Connect(comPort, 115200, 1) print("Connect = " .. tostring(ok)) if not ok then return end这样跑完一轮,日志里会清楚标出是哪一步挂的。如果所有步骤都返回成功,采出来的数据就能直接交给后处理程序。
4. 从"能跑"到"批量跑":脚本参数化与自动化采集
一键配置脚本跑通之后,你的效率已经比手动点GUI高出一大截。但真正让这套方案价值翻倍的,是把它改造成可参数的批量采集脚本。尤其是做实验需要换场地、换目标、换参数采集几十组数据时,手工一组组点真的会崩溃。
4.1 用变量把脚本里的关键参数抽出来
我在脚本开头定义一个"配置区",把所有可能需要改的项集中在一起。这样做的好处是,下次换参数只需要改最上面几行,不需要动下面的核心逻辑。
-- ===== 配置区 ===== local comPort = 10 local saveRoot = "C:/radar_data/exp" local numFrames = 16 local chirpLoops = 128 local framePeriodicty = 50 -- 也可以定义距离、角度等场景描述,写进日志然后在下面的ar1.FrameConfig里直接引用这些变量:
ar1.FrameConfig(0, 0, 0, chirpLoops, numFrames, framePeriodicty, 0, 0, 0)这样你改一组参数,脚本其他部分完全不用动。我还会把"记录文件名"和"这组参数的意义"拼接进日志输出,方便事后回看。
需要注意的是,ar1.CaptureCardConfig_StartRecord里的保存路径如果包含中文字符,某些版本会出问题。我建议统一用英文路径,目录一定要先创建好,软件不会帮你自动建文件夹。这个坑我踩过不止一次,脚本跑完提示成功,结果去看路径发现文件夹不存在,数据根本没写进去。
4.2 多组实验自动采集
批量采集的典型做法是在脚本最外层套一个循环。比如我要采集5组不同场景的数据,可以这样组织:
local experiments = { { path = "C:/radar_data/exp1", desc = "空场地" }, { path = "C:/radar_data/exp2", desc = "行人走动" }, { path = "C:/radar_data/exp3", desc = "车辆经过" }, { path = "C:/radar_data/exp4", desc = "有遮挡" }, { path = "C:/radar_data/exp5", desc = "远距离目标" } } for i, e in ipairs(experiments) do print("开始实验:" .. e.desc) ar1.FullReset() ar1.Sleep(200) ar1.Connect(comPort, 115200, 1) ar1.Sleep(300) ar1.SelectChip("AR1") -- ... 下发同一个Profile/Chirp/Frame配置 ... ar1.CaptureCardConfig_StartRecord(e.path, 1, 1, 1, 1, 1) ar1.StartFrame() ar1.Sleep(recordTimeMs) ar1.StopFrame() end这只是一个示例,实际使用中,每次切换场景时我至少预留十几秒,让现场布置稳定、人也远离雷达,再触发下一组采集。另外,每组之间我会加ar1.FullReset(),确保雷达状态完全干净,不会把上一组的残余状态带到下一组。
4.3 和Python/MATLAB后处理串成流水线
mmWave Studio本身做实时数据处理的能力有限,但它擅长把原始数据老老实实存下来。所以我习惯让mmWave Studio只负责采集,把bin文件落盘,再交给Python或MATLAB做后续的点云、测距测速、目标跟踪算法。
实际工作流是这样的:
- 用Lua脚本跑完一批实验,得到一个目录、多个bin文件;
- Python脚本轮询这个目录,检测到新的bin文件就自动解析、绘图、跑算法;
- 处理结果保存成npy或csv,连同bin文件和配置脚本一起归档。
这样整条链路下来,从按下脚本运行按钮到最后看到处理结果,中间不需要任何人工干预。有一次我做连续采集实验,下班前把脚本挂上,第二天早上来,几十组数据已经全部采集并且处理完了。这在手动时代是不可想象的。
这里补充一句:DCA1000输出的bin文件格式和你配置的DCA1000数据格式强相关。我用的多是16bit复数格式,也就是I和Q分量各占16bit,一个采样点占4字节。后续解析时一定要在代码里写清楚每个采样点的字节数,不然数据全歪。
5. 实测中遇到的四个翻车现场与排查思路
脚本化之后,问题从"手点太累"变成了"自动化出问题怎么排查"。我在实际项目里遇到过很多次看起来匪夷所思的故障,这里把最有代表性的四个记录一下,给出排查思路,不见得每条都适用,但排查路径是通用的。
5.1 连不上串口,问题不一定在串口本身
现象:mmWave Studio点Connect,报错或者一直转圈。
第一反应是看设备管理器。如果COM口还在,而且确实是Application/User UART,那就要按顺序往下查:
- 是不是SOP跳线不在开发模式?重新上电,确认跳线位置。
- 是不是雷达板的调试串口被其他软件占用?关掉串口助手、其他雷达软件,再试。
- 是不是用了Hub?有些USB Hub供电和信号质量都不行,直接把线插到电脑主板上的USB口。
- 是不是固件加载流程没走完?加载固件后要等几秒,让雷达板完全启动。
我遇到最隐蔽的是杀毒软件把mmWave Studio的驱动服务给拦了,设备管理器显示正常,但软件始终无法打开串口。后来以管理员身份运行mmWave Studio,问题消失。所以遇到莫名奇妙的串口问题,先试试"右键->以管理员身份运行"。
5.2 脚本执行到一半卡住或返回异常
现象:脚本里前面几步返回正常,执行到ar1.StartFrame()或者配置命令时卡住,不再往下走,或者某个函数返回false。
我自己的排查顺序:先在脚本开头打印每步返回值,定位是卡在哪个函数。如果是配置类函数失败,多半是参数超界,比如起始频率设置到了芯片不支持的范围。如果是ar1.StartFrame卡住,先确认上一帧是不是还在发,可以先调用ar1.StopFrame()把状态停干净,再重新触发。
还有一点,有些版本的DCA1000在开始记录前必须先在硬件上处于空闲状态。如果上一次采集异常退出,DCA1000可能还处于"等待数据"状态,这时候直接跑脚本就会卡。遇到这种情况,最简单的办法是把DCA1000和雷达板都断电重来。脚本化虽然快,但有时候物理断电重启比任何软件复位都管用。
5.3 采出来的bin文件大小和预期对不上
这是非常经典的问题。明明配置了256个采样点、128个chirp、16帧,4个RX通道,结果bin文件的大小和手算的完全不一样。
先算一下预期大小。按16bit复数格式,每个采样点4字节:
- 一个chirp的数据量 = 256采样点 × 4通道 × 4字节 = 4096字节;
- 一帧128个chirp = 4096 × 128 = 524288字节;
- 16帧 = 8388608字节,约8MB。
如果实际文件远大于预期,通常是因为DCA1000配置了多个文件记录,或者触发了多次frame。如果远小于预期,多半是实测过程中帧提前停了,或者LVDS Lane数配少了。这时候我会先改小参数,比如1帧、少量chirp,重新采集,再逐步放大参数,定位是哪一层数量对不上。
这个排查思路适用于所有数据采集工具:先把规模调到最小,确认单帧数据正确,再成倍扩展。
5.4 mmWave Studio闪退或界面卡死
mmWave Studio是个比较吃内存和CPU的上位机,特别是实时显示Range Profile/Doppler图时,如果采样点数大、帧率高,界面很容易假死。我踩过的坑:
- 杀毒软件实时扫描mmWave Studio的临时文件,导致界面卡顿。解决:把mmWave Studio的安装目录和采集数据目录加入白名单。
- 任意文件路径含有中文或空格,某些版本处理不了。解决:统一用英文路径。
- 软件版本和雷达板固件版本不匹配。解决:到TI官网下载和固件配套的mmWave Studio版本,不要盲目求新。
还有一个小技巧:如果只是需要采集数据、不需要实时看图,可以把界面里的实时绘图关掉,只留数据录制。这样脚本跑得快,软件也稳定得多。
6. 长期使用后我觉得值得养成的几个习惯
配置这套流程已经有一段时间了,有些习惯是踩了足够多的坑之后才慢慢总结出来的。写在这里,算是给后来者一点参考,也方便我自己以后查阅。
6.1 GUI标定一次,脚本固化终身
我现在的固定流程是:拿到一块新板子,第一次配置绝不用脚本,老老实实在GUI里手动点,确认Range Profile正常、bin文件大小符合预期、后处理结果能出来,然后把整套Lua命令保存为模板脚本。之后所有实验都从这个模板改,而不是重新开始。
这样做还有一个好处:模板脚本本身就是一份"可执行的文档"。它记录了这个项目用的雷达型号、固件版本、参数配置、DCA1000设置。三个月后再回来看,只要打开脚本看注释,就知道当时是怎么配的,不用翻聊天记录和邮件。
6.2 每次实验配一份参数记录
我现在每个实验目录下至少会有三个文件:
- 一个
config.lua,就是当时跑的脚本; - 一个
README.md,记录现场环境、目标类型、参数含义; - 若干bin文件和对应的解析结果。
这看起来有点繁琐,但做研究或者做产品迭代的时候价值非常大。很多数据处理完发现异常,回去翻实验记录,就是因为参数记录不全导致无法复现。Lua脚本本身带注释,其实就是参数记录的一部分。
6.3 数据解析从理解bin格式开始
最后说一个和数据打交道的核心习惯:拿到bin文件后,第一件事不是直接套自己写的解析代码,而是先弄懂DCA1000的输出格式。TI提供的数据说明文档里会写清楚数据是按"chirp主序"还是"frame主序"排列,是复数交错还是实部虚部分开,有没有头信息。
我见过不少人拿着别人写的Python解析脚本,直接改个路径就跑,结果出来的Range Profile一塌糊涂,还以为是雷达坏了,其实是数据格式不匹配。解析代码的开头,一定要明确写出你的几个关键假设:多少个采样点、多少个通道、多少个chirp、每个采样点几字节。这些常量必须和Lua脚本里配置的一致。
从我自己的经历看,把mmWave Studio和Lua脚本这套流程吃透之后,再做毫米波雷达的算法开发或产品demo,效率完全不在一个量级。以前手动配置一帧数据要反复点鼠标,现在脚本一跑,几分钟就能完成一组完整实验。希望能帮你少走一些弯路。