资讯动态

Hurys毫米波雷达调试全攻略:CAN驱动安装与数据采集

发布时间:2026/10/17 8:54:35 来源:尧图企业网站定制
简介这份资源面向汽车电子工程师、毫米波雷达调试人员及ADAS相关专业学生提供Hurys雷达调试软件与CAN分析仪驱动的完整工具组合用于雷达参数配置、性能测试与总线数据分析。压缩包共19个文件约5.6MB包含3个exe可执行程序、2个sys与2个inf驱动文件、2个dll动态库、2个rar子包以及pdf配置说明、pptx操作演示和txt使用提示等文档覆盖软件安装、驱动部署与调试参考的完整链路。其中雷达调试软件支持工作频率、探测距离、角度分辨率与更新率等参数调整并提供目标距离、速度、角度的可视化展示、故障诊断与固件在线更新配套驱动则针对南京来可与创芯科技CAN分析仪涵盖设备识别、总线仿真、数据捕获分析与波形显示。目前已有1719人学习下载适合需要快速搭建雷达调试环境、理解CAN通信行为并排查硬件软件问题的读者参考。1. 拆开这个 Hurys 雷达调试包为什么一线标定工程师总在找它如果你手上正拿着一块 Hurys 毫米波雷达板子插上 CAN 分析仪却发现上位机连不上、波形出不来、参数写不进去那你大概率缺的不是技术而是一套能跑通的调试环境。这个压缩包解决的就是这件事它把 Hurys 毫米波雷达的调试软件和 CAN 分析仪驱动打包在一起让你不用再满世界找某个特定版本的安装程序、某个被删掉的驱动文件。毫米波雷达调试和普通串口调试最大的区别在于它依赖 CAN 总线做参数下发和数据回传而 CAN 分析仪的驱动版本、调试软件的协议解析层、雷达固件的通信协议三者必须对齐任何一个环节错位你看到的就是一堆乱码或者干脆没反应。这套资源适合三类人刚接手雷达标定任务的嵌入式工程师、需要复现雷达点云和原始 ADC 数据的算法验证人员、以及做车载雷达产线测试的现场调试人员。它不是什么开发框架就是一套能让你把雷达跑起来的工具链底座。2. Hurys 雷达调试软件与 CAN 驱动先搞清通信链路再动手2.1 毫米波雷达调试的通信拓扑长什么样Hurys 毫米波雷达的调试链路常见做法是 PC 端调试软件通过 USB 转 CAN 模块接入雷达的 CAN 总线雷达再把配置参数、波形数据、目标列表通过 CAN 帧回传给上位机。这里有个容易被忽略的点CAN 分析仪在系统里扮演的是物理层和链路层的桥接角色它把 USB 报文转成 CAN 差分信号同时把雷达发回来的 CAN 帧缓存后交给上位机。调试软件则负责解析这些帧按 Hurys 定义的协议格式拆出距离、速度、角度、信噪比等字段。所以整条链路是调试软件 → CAN 驱动 → USB 转 CAN 硬件 → 雷达 CAN 收发器 → 雷达信号处理链。任何一层出问题现象都不一样。驱动没装好设备管理器里能看到未知设备驱动装了但版本不对调试软件能打开但扫描不到通道协议解析层不匹配能看到 CAN 帧但数据全是 0 或者跳变异常。我一般会先确认设备管理器里 CAN 分析仪被识别成什么设备再打开调试软件看通道列表能不能枚举出来最后才去连雷达。2.2 安装顺序和驱动签名处理这个包里通常包含调试软件安装程序、CAN 分析仪驱动、以及可能的固件升级工具。安装顺序有讲究先装 CAN 驱动再装调试软件最后接硬件。如果反过来调试软件在安装时可能会尝试绑定一个默认驱动后面再换就麻烦了。# 以管理员身份打开命令提示符检查驱动签名状态 bcdedit /enum | findstr testsigning # 如果输出 testsigning Yes说明系统允许测试签名驱动 # 如果输出 No 或没有这一行安装未签名驱动时会被拦截上面这条命令用来确认系统是否允许安装未签名的驱动。很多 CAN 分析仪驱动是未签名的尤其在较新的 Windows 10/11 上会被强制拦截。如果输出是 No你有两个选择一是进 BIOS 关闭 Secure Boot 后临时开启测试签名模式二是找已签名的驱动版本。我一般会先试已签名版本实在没有再动测试签名因为测试签名模式会降低系统安全性而且每次重启会显示水印。# 开启测试签名模式需管理员权限重启后生效 bcdedit /set testsigning on # 重启后安装驱动装完再关掉 bcdedit /set testsigning off参数说明testsigning on让系统加载未签名驱动off恢复默认。注意这个操作需要管理员权限而且开启后桌面右下角会有测试模式水印生产环境不要长期开着。2.3 调试软件里的通道配置和波特率对齐驱动装好后打开 Hurys 调试软件第一件事是配置 CAN 通道。常见参数包括通道号、波特率、采样点、终端电阻使能。Hurys 雷达常用 500 kbps 波特率但不同型号可能不一样这个必须和雷达固件里的配置一致。; 典型 CAN 通道配置示例以某款 USB-CAN 分析仪为例 [Channel1] BaudRate 500000 SamplePoint 0.875 TerminalResistor 1 Mode Normal参数说明BaudRate是 CAN 总线速率单位 bps必须和雷达端一致SamplePoint是采样点位置0.875 表示在位时间的 87.5% 处采样这是 CAN 标准推荐的默认值TerminalResistor控制是否启用内置 120 欧姆终端电阻如果雷达端已经有终端电阻这里要关掉否则总线负载会过重导致通信不稳定。我见过太多人卡在终端电阻上现象是能收到几帧然后总线报错把电阻关掉就稳了。配置完通道后点扫描或连接如果能看到雷达发出来的心跳帧或版本帧说明物理层通了。接下来才是加载 DBC 文件或者手动配置报文解析规则。Hurys 的调试软件一般内置了协议模板选对型号就能自动解析。3. 从零跑通一次雷达数据采集参数下发、波形回传与日志留存3.1 参数下发的报文构造与校验雷达调试的核心操作之一是下发配置参数比如发射波形、帧周期、检测阈值、天线配置。这些参数通常通过一组 CAN 报文写入雷达的寄存器或配置区。Hurys 调试软件一般提供图形化界面让你填参数但如果你要批量刷配置或者做自动化测试就得自己构造报文。import struct def build_config_frame(radar_id, param_addr, param_value): 构造 Hurys 雷达配置下发帧 radar_id: 雷达节点 ID通常 0x01 param_addr: 参数寄存器地址2 字节 param_value: 参数值4 字节 返回 8 字节 CAN 数据 # 帧格式命令字(1B) 地址(2B) 值(4B) 校验(1B) cmd 0x10 # 写配置命令 addr_bytes struct.pack(H, param_addr) value_bytes struct.pack(I, param_value) payload bytes([cmd]) addr_bytes value_bytes checksum sum(payload) 0xFF return payload bytes([checksum]) # 示例设置帧周期为 50ms假设寄存器地址 0x0102值单位 us frame build_config_frame(0x01, 0x0102, 50000) print( .join(f{b:02X} for b in frame)) # 输出类似10 01 02 00 00 C3 50 XX逻辑说明这个函数按 Hurys 常见的配置帧格式拼装数据命令字 0x10 表示写配置后面跟 2 字节地址和 4 字节值最后 1 字节是累加和校验。参数说明radar_id在标准帧里不体现在数据段而是放在 CAN ID 里这里简化处理param_addr和param_value的具体含义要查对应型号的协议手册不同型号地址映射不一样。我一般会先用调试软件的图形界面改一个参数同时用 CAN 分析仪抓包看它实际发出来的报文长什么样然后照着抄格式比翻手册快。3.2 波形数据回传的解析与可视化雷达配置好之后会周期性地往 CAN 总线上发波形数据或目标列表。原始 ADC 数据量很大通常不会全量走 CAN而是发经过处理的点云或距离-多普勒矩阵的压缩形式。Hurys 调试软件一般能直接显示一维距离像和二维热力图但如果你要把数据接到自己的算法里就得自己解析。import can import numpy as np import matplotlib.pyplot as plt def parse_range_profile(data): 解析一维距离像报文 data: 8 字节 CAN 数据 返回 距离单元索引和幅度值 # 假设前 2 字节是起始距离单元后 6 字节是 6 个单元的幅度 start_bin (data[0] 8) | data[1] amplitudes list(data[2:8]) bins list(range(start_bin, start_bin len(amplitudes))) return bins, amplitudes # 初始化 CAN 总线 bus can.interface.Bus(channelcan0, bustypesocketcan) # 或 Windows 下bus can.interface.Bus(channel0, bustypeixxat) profile np.zeros(256) plt.ion() fig, ax plt.subplots() line, ax.plot(profile) ax.set_ylim(0, 255) ax.set_xlabel(Range Bin) ax.set_ylabel(Amplitude) for msg in bus: if msg.arbitration_id 0x200: # 假设距离像报文 ID bins, amps parse_range_profile(msg.data) for b, a in zip(bins, amps): if b len(profile): profile[b] a line.set_ydata(profile) plt.pause(0.001)逻辑说明这段代码用 python-can 库监听 CAN 总线收到 ID 为 0x200 的报文后按约定格式拆出距离单元和幅度然后实时更新曲线。参数说明channel和bustype要根据你实际用的 CAN 分析仪改SocketCAN 是 Linux 下的Windows 下常用 ixxat、pcan 或 kvaserarbitration_id要换成 Hurys 协议里距离像的实际报文 ID。注意 CAN 帧只有 8 字节一帧传不了多少数据实际协议里会用多帧拼接或者更高层的传输协议这里只是演示单帧解析逻辑。3.3 日志留存与回放别等数据丢了再后悔雷达调试经常需要复现问题比如某个场景下目标丢失、虚警突然增多。如果你没有留存原始 CAN 日志事后只能靠回忆。我一般会在调试软件里开启报文记录同时用 candump 或 CAN 分析仪自带的日志功能存一份原始数据。# Linux 下用 candump 记录原始 CAN 报文到文件 candump can0 -l -f radar_log.txt # -l 表示按行记录-f 指定输出文件 # 回放时用 canplayer canplayer -I radar_log.txt参数说明-l让 candump 以可读文本格式记录方便后续用脚本解析-f指定日志文件名。回放时 canplayer 会把日志里的报文按时间戳重新发到总线上这样你可以在实验室里反复复现现场问题。Windows 下大多数 CAN 分析仪软件也有类似功能找“记录”或“回放”菜单就行。注意日志文件会随时间线性增长长时间采集要定期切割不然几个 G 的文件打开都费劲。4. 避坑排查驱动装不上、通道扫不到、数据跳变怎么查4.1 现象设备管理器里 CAN 分析仪显示未知设备原因驱动没有正确安装或者驱动签名被系统拦截。Windows 10/11 默认要求驱动有有效签名很多国产 CAN 分析仪的驱动是未签名的。解决先确认硬件型号找到对应驱动文件夹右键 inf 文件选安装。如果提示签名错误按 2.2 节的方法临时开启测试签名模式。装完后在设备管理器里看是否出现 CAN 或 USB 设备类别没有的话换一个 USB 口再试前置面板的 USB 口供电可能不足。4.2 现象调试软件能打开但通道列表是空的原因驱动装了但调试软件没有权限访问设备或者驱动版本和软件不匹配。有些 CAN 分析仪需要先运行一个后台服务调试软件通过服务来枚举通道。解决先确认设备管理器里设备正常没有黄色感叹号。然后以管理员身份运行调试软件。如果还是空检查安装目录下有没有配套的通道配置工具或服务程序先启动它。我遇到过某款分析仪必须先用厂商自带的测试工具打开一次调试软件才能识别玄学但有效。4.3 现象能收到报文但数据全是 0 或跳变剧烈原因波特率不匹配、终端电阻配置错误、或者协议解析模板选错了。波特率不匹配时CAN 控制器会进入错误被动状态偶尔能收到几帧但数据不可信。解决先用 CAN 分析仪自带的示波器功能看总线波形确认波特率。然后检查终端电阻总线上两端各 120 欧姆如果雷达端已经内置分析仪端就要关掉。最后确认调试软件里选的雷达型号和实际硬件一致不同型号的报文 ID 和解析规则可能不同。4.4 现象参数下发成功但雷达行为没变化原因参数写到了错误的地址或者写完后没有触发生效命令。有些参数需要复位雷达或者发一条“应用配置”命令才会生效。解决先用调试软件图形界面改一个参数抓包对比你自己构造的报文看地址和值是否一致。然后确认协议里有没有生效命令通常是一个单独的 CAN ID 或者配置帧里的特定命令字。我一般会在写完参数后主动发一条软复位命令等雷达重新心跳后再读回参数确认。4.5 现象长时间采集后数据丢帧或软件卡死原因CAN 总线负载过高或者调试软件没有做流控。毫米波雷达在点云密集场景下数据量很大如果波特率只有 500 kbps很容易跑满。解决降低雷达数据输出速率比如增大帧周期、减少每帧目标数。或者换用 CAN FD 分析仪和雷达带宽能到 2 Mbps 以上。软件层面把可视化刷新率降下来别每帧都重绘。我一般会在采集脚本里加一个队列缓冲CAN 接收线程只管收解析和绘图放另一个线程避免丢帧。5. 进阶用 Python 做自动化标定与批量验证5.1 把调试软件的操作录成脚本当你需要反复给多块雷达刷同一套参数时手动点界面效率太低。常见做法是用 python-can 直接操作 CAN 分析仪把配置下发、参数回读、数据采集串成一个脚本。下面是一个批量标定的骨架。import can import time def write_param(bus, radar_id, addr, value): 下发单个参数并等待确认 cmd 0x10 payload bytes([cmd]) addr.to_bytes(2, big) value.to_bytes(4, big) checksum sum(payload) 0xFF msg can.Message(arbitration_idradar_id, datapayload bytes([checksum]), is_extended_idFalse) bus.send(msg) time.sleep(0.05) # 等待雷达处理 def read_param(bus, radar_id, addr): 回读参数返回解析后的值 cmd 0x20 # 读命令 payload bytes([cmd]) addr.to_bytes(2, big) b\x00\x00\x00\x00 checksum sum(payload) 0xFF msg can.Message(arbitration_idradar_id, datapayload bytes([checksum]), is_extended_idFalse) bus.send(msg) # 等待回读帧实际项目里要加超时和过滤 for resp in bus: if resp.arbitration_id radar_id 1: # 假设回读 ID 偏移 1 return int.from_bytes(resp.data[3:7], big) return None # 批量标定流程 bus can.interface.Bus(channelcan0, bustypesocketcan) params { 0x0102: 50000, # 帧周期 50ms 0x0103: 30, # 检测阈值 0x0104: 0x03, # 天线配置 } for addr, val in params.items(): write_param(bus, 0x01, addr, val) time.sleep(0.1) readback read_param(bus, 0x01, addr) print(fAddr {addr:#06x}: wrote {val}, readback {readback}) assert readback val, f参数 {addr:#06x} 回读不一致逻辑说明write_param构造写配置帧并发送read_param发读命令后等待回读帧。参数说明radar_id是 CAN ID回读 ID 假设为雷达 ID 加 1实际要按协议改time.sleep给雷达留处理时间太短会丢响应。这个骨架可以扩展成自动遍历参数表、记录每块雷达的标定结果、生成测试报告。5.2 用回读校验代替盲目信任自动化标定最容易翻车的地方是“发了就当成功了”。CAN 总线没有 TCP 那样的确认机制你发了写命令雷达可能因为忙没处理也可能地址越界被丢弃。所以每写一个参数必须回读校验。我一般会在脚本里加断言回读不一致就停下来报警而不是继续往下跑。批量生产时这个习惯能帮你省掉大量返工。5.3 数据采集与算法验证的衔接如果你采雷达数据是为了喂给感知算法那 CAN 日志只是第一步。常见做法是把 CAN 日志解析成结构化数据比如每帧的时间戳、目标距离、速度、角度、RCS存成 CSV 或 Parquet再用 pandas 或 numpy 做离线分析。Hurys 调试软件一般能导出 CSV但字段可能不全自己解析更灵活。import pandas as pd def parse_target_frame(msg, timestamp): 解析目标列表帧返回结构化记录 # 假设每帧包含 3 个目标每个目标 2 字节距离 1 字节速度 1 字节角度 targets [] for i in range(3): offset i * 4 if offset 4 len(msg.data): break dist (msg.data[offset] 8) | msg.data[offset 1] speed msg.data[offset 2] - 128 # 有符号偏移 angle msg.data[offset 3] - 128 targets.append({timestamp: timestamp, range_m: dist * 0.1, speed_mps: speed * 0.5, angle_deg: angle * 0.5}) return targets # 假设已经有一组 CAN 消息列表 records [] for msg, ts in can_messages: if msg.arbitration_id 0x300: records.extend(parse_target_frame(msg, ts)) df pd.DataFrame(records) df.to_parquet(radar_targets.parquet) print(df.describe())逻辑说明这段代码把目标列表帧拆成逐目标的记录距离、速度、角度按协议里的比例因子换算成物理单位。参数说明比例因子 0.1、0.5 是假设值实际要查 Hurys 协议手册arbitration_id要换成目标列表的实际 ID。存成 Parquet 比 CSV 省空间且读取快适合后续做统计分析。从那以后我每次拿到新的雷达调试包都会先跑一遍最小闭环装驱动、开通道、发一个参数、回读确认、采一段数据、存日志。这套流程走通了再去做复杂的标定和算法验证。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑