15. 常见问题 FAQ
适用产品:Odin1
配套软件:ROS Driver、MindCloud Studio
版本:v0.1.0 · 2026.05
录制bag包规范:ros2录制bag包之前,请使用QoS进行录包,可以尽可能的减少丢包几率。使用方法如下:
ros2 bag record /odin1/cloud_raw /odin1/imu /odin1/image/compressed --qos-profile-overrides-path rosbag2_qos.yaml
rosbag2_qos.yaml文件获取
一、硬件与供电
❓ Q1.1 标配适配器规格是什么?为什么强烈要求按规格供电?
回答:
- 标配:建议使用 12V / 2A 适配器。
- 风险点:输入电压超过 26V 会直接烧毁内部 DC 芯片,26.8V 即烧毁。
- 建议:客户使用电源前,请提供电源型号 / 输出范围 / 尖峰电压参数确认;切勿使用非官方电源线。拿到的电源线如果有裸线,请在使用前将裸露的地方用绝缘胶带包起来后使用。
❓ Q1.2 设备红灯不亮 / 无法上电怎么办?
回答:
- 常见原因:电源正负极是否反接;航插头接触不良;反复插拔后表现为间歇性失败。
- 现场操作:
- 万用表检查电源是否符合 DC 12V 2A(12~24V 以内);
- 拔下航插重新插紧到位、确认锁紧,左右轻微晃动观察红灯是否亮起;
- 问题排查:万用表调至【导通/降压】档位,黑色笔接 GND,红色笔先后接触 SYNC 和 GPIO(wiki 中有定义说明)引脚,观察万用表读数:
- 正常情况:SYNC 引脚降压在 0.9V 左右,GPIO 引脚降压在 1.3V 左右;
- 异常情况:低于 0.6V 或者不显示压降证明芯片内部烧坏,请联系售后。
❓ Q1.3 Odin1 连接到电脑后运行驱动没有数据
回答:
- 请检查设备是否供电正常,正常供电红灯常亮;
- 输入
lsusb查看设备是否被识别,设备 id:2207:0019; - 检查
/etc/udev/rules.d/99-odin1.rules文件是否存在,如果不存在请手动创建,存在则检查文件内容是否正确; - 重启 udev 服务:
sudo udevadm control --reload-rules && sudo udevadm trigger; - 检查驱动中的 Log 信息是否出现版本过低的提示字样,如果有请更新固件,更新方法见 固件升级。
- 如果之前可以正常使用,使用过程中提示
start listening usb event, further connection should be handleed by hotplug_callback,一般这种情况是脚本启动驱动,后台仍存在节点在运行,需要将后台节点杀掉后重新插拔USB,重新启动驱动。杀进程时务必使用 SIGINT / SIGTERM 让驱动走清理流程释放 USB,详见 Q2.7,否则下一次启动会出现LIBUSB_ERROR_BUSY。
❓ Q1.4 线材与航插选型?
回答:
- 我司提供原生 USB 3.0 数据线、防水航插供电线。
- 目前没有提供 90 度弯头航插头。
- 极端紧凑安装可选定制方案:① 取消防水,电源线背板直出 + 密封胶;② 定制弯头 / 长度(联系商务沟通)。
二、USB 与连接稳定性
❓ Q2.1 USB 频繁报 heartBeat timeout / waiting for device connecting / 需要掉电重启?
回答: 建议排查顺序:
- USB 集线器负载:避免 Odin 与多台高带宽设备共享同一 USB 2.0 hub。建议 Odin1 独占总线,或在系统启动时最后上电 Odin,让其握手更稳定;
- 驱动版本:升级到最新 ROS Driver(v0.10.5 及以上);
- 重定位地图配置:确认地图文件路径正确,且地图与算法版本匹配,即使用最新版的驱动采集地图或使用最新版的 MindCloud 处理地图;
- 主机算力:弱算力平台(如部分边缘计算盒)CPU 长期满载会导致心跳漏帧,建议预留资源。
❓ Q2.2 心跳超时后 USB 从 3.2 协商降到 2.0 / 2.1?
回答: 典型成因:
- 单台 LiDAR 硬件异常(换线无效、换设备恢复 → 通常是该设备硬件故障,需返修);
- 主机 USB 控制器降速兼容(部分平台启用了 USB 兼容模式)。
处置:先在另一台主机上交叉验证;若另一台主机无问题,可能是当前使用开发板问题。
❓ Q2.3 升级固件报 LIBUSB_ERROR_NO_MEM / 传输到 90%+ 失败?
回答:
- 升级时单独接到 PC 进行,不要挂在机器人主机上;
- 升级期间避免 host 总线上其他高带宽设备占用,可通过
lsusb检查; - 偶发情况下重试 1–2 次可通过。
❓ Q2.4 lsusb 看不到设备 / 红灯亮但无任何枚举?
回答: 大多为底层供电或硬件问题(与非官方电源线相关案例较多),请按 Q1.2 排查电源;如本地手段无法恢复,按售后流程寄回。
❓ Q2.5 系统中存在多个 OpenCV / libusb 版本时驱动启动失败?
回答:
- 现象:报错
[host sdk sample-2] process has died [pid 6487, exit code -11 ......];单独关闭 sendrgb 可正常启动; - OpenCV:ROS1 同时存在 4.2 / 4.5 时部分系统会冲突。建议按 README 强制安装单一版本;或者使用 docker 进行环境隔离;
- libusb:可临时通过调整
LD_LIBRARY_PATH优先加载系统兼容版本规避。
❓ Q2.6 Odin1 和 RTK 一起使用时,RTK 无法固定?
回答:
- USB 3.0 在工作时会产生宽频带电磁辐射,其中包含 GNSS L1 频段(1575.42 MHz)附近的噪声;
- 建议降级为 USB 2.0 或者使用屏蔽更好的连接线。
❓ Q2.7 启动驱动报 failed to claim interface 0: LIBUSB_ERROR_BUSY / 提示 further connection should be handled by hotplug_callback?
回答: 这是上一次启动残留的驱动节点仍占着 USB 接口导致的,常见于用脚本反复启动驱动、或上一次用 kill -9 强杀过进程。
1. 根因:必须用 SIGINT,不能用 kill -9
驱动主进程 host_sdk_sample 只对 SIGINT(2) 和 SIGTERM(15) 注册了清理回调(close device、释放 libusb interface、DeInit lidar):
// host_sdk_sample.cpp
static void signal_handler(int signum) {
if (signum == SIGINT || signum == SIGTERM) {
// Close device → 释放 USB interface
// Deinitializing lidar system
}
}
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
kill -9 PID(SIGKILL)不能被捕获,进程被强杀,USB interface 没释放 → 下次启动LIBUSB_ERROR_BUSY;kill -2 PID(SIGINT)等价于命令行Ctrl+C,会走清理流程,USB 正常释放;kill -15 PID(SIGTERM)效果一样。
2. 手动清理命令
# 按进程名发 SIGINT(推荐,不用查 PID)
pkill -SIGINT -f host_sdk_sample
# 等价写法
pkill -2 -f host_sdk_sample
killall -SIGINT host_sdk_sample
-f 是匹配整条命令行,host_sdk_sample 是 launch 文件里启动的主可执行文件,是真正持有 USB 句柄的那个节点。
3. 推荐写进启动脚本的清理片段
在 ros2 launch ... 之前插入:
#!/bin/bash
# === 启动前先优雅清理上一次残留的节点(关键:先 SIGINT 让它释放 USB) ===
cleanup_old() {
local procs=(
host_sdk_sample
pcd2depth_ros2_node
cloud_reprojection_ros2_node
image_overlay_node
)
# 第 1 步:发 SIGINT(=Ctrl+C),触发 signal_handler 释放 USB
for p in "${procs[@]}"; do
pkill -SIGINT -f "$p" 2>/dev/null
done
# 第 2 步:最多等 5 秒让它自己清理退出
for i in {1..10}; do
if ! pgrep -f host_sdk_sample >/dev/null; then
break
fi
sleep 0.5
done
# 第 3 步:兜底——如果还赖着不走,再 SIGTERM;最后才 SIGKILL
if pgrep -f host_sdk_sample >/dev/null; then
echo "进程未在 5s 内退出,发送 SIGTERM..."
for p in "${procs[@]}"; do pkill -SIGTERM -f "$p" 2>/dev/null; done
sleep 2
fi
if pgrep -f host_sdk_sample >/dev/null; then
echo "仍未退出,强杀 SIGKILL(USB 可能仍占用,需要拔插)"
for p in "${procs[@]}"; do pkill -SIGKILL -f "$p" 2>/dev/null; done
fi
}
cleanup_old
# === 然后再正常启动 ===
source /opt/ros/humble/setup.bash
source ~/odin_ws/install/setup.bash
ros2 launch odin_ros_driver odin1_ros2.launch.py
要点:
- 先 SIGINT → 等待 → 再 SIGKILL,顺序不能颠倒;
- 必须
sleep几秒,因为 close device、DeInit 不是瞬间完成的; host_sdk_sample是最重要的那个,其他几个跟 launch 一起起的节点顺手清理掉,避免节点名冲突;- 不要一上来就
pkill -9,否则必然留下LIBUSB_ERROR_BUSY的坑。
4. 兜底:USB 已被强杀进程占住的恢复方法
# 方法 A:直接重置 USB 设备(不用拔线)
sudo usbreset 2207:0019
# 或:sudo usbreset /dev/bus/usb/<bus>/<device>
# 方法 B:物理重新插拔 Odin1 USB 线
按上述脚本改造后,failed to claim interface 0: LIBUSB_ERROR_BUSY 基本不会再出现。
三、ROS Driver 报错
❓ Q3.1 ROS Driver 无法获取标定参数
回答: 表现:
- config 文件夹中没有生成
calib.yaml文件; cloud_slam点云呈现黑色,且 odometry 很容易发散。
解决方案:联系留形售后支持,获取参数重新写入工具。若之前正常运行,则可以在之前的驱动中找到标定文件进行复用。若无记录保存,可联系留形售后支持协助查询出场记录。
❓ Q3.2 怎么查看当前固件和驱动的版本?
回答: 运行驱动,在驱动运行终端中可以看到固件与驱动版本的打印信息。
❓ Q3.3 重定位模式下启动驱动报错 file start fail. transfer relocalizaiton map fail. please retry. / 开流崩溃 / 进程内存被打满?
回答:
- 典型现象:终端持续打印
file start fail. transfer relocalizaiton map fail. please retry.,重试无效甚至导致 driver 进程内存被打满。 - 根因:旧版 Driver 在重定位模式下,开流过程中触发
deinit,已知deinit之后再开流会爆内存。下列两种情况会触发deinit:- 地图文件路径错误(最常见)—— 加载路径不存在 / 没有读权限 / 不是合法 odin1 地图;
- 地图上传 odin1 连续 3 次失败 —— 通常发生在 USB 链路不稳或主机算力被占满时。
- 解决方案:
- 升级到最新 ROS Driver(v0.11.0),固件版本升级到 0.12.0;
- 检查启动参数中的地图绝对路径,确保文件可读、与算法版本匹配;
- 如果链路上传仍然失败,请按 Q2.1 排查 USB 集线器 / 自配线材 / 主机算力,并确认升级期间无其他高带宽设备占用同一总线。
❓ Q3.4 算法是否有重置功能,怎么使用?
回答: 使用 Driver 版本高于 0.10.0,建议使用 0.10.5 驱动版本 + 0.11.9 固件版本:
cd $ROS_WORKSPACE/src/odin_ros_driver
./set_param.sh algo_reset 1
同时配套:IMU 平滑发送(最高 400 Hz)、PTP 平滑、双图叠加可视化、修复重投影不准确。
❓ Q3.5 驱动报错 the queue is full?
回答:
- 原因:SDK 内部队列发布速度 < 入队速度,导致积压溢出。常见于本地资源被抢占或网络带宽不足。
- 解决方法:
- 给 Odin1 分配独立的数据传输链路,避免共享网络;
- 通过
ROS_DOMAIN_ID做通信域隔离,减少无关广播; - 确保 pub/sub 的 QoS 一致(reliable / sensor_data / best_effort 不匹配会阻塞);
- 关闭不必要的话题(如
sendrgb: 0、sendcloudrender: 0); - 优先订阅小数据量话题,如用
/odin1/image/compressed替代/odin1/image。
四、时间同步与延迟
❓ Q4.1 Odin 时间比 host 时间”靠后”是 bug 吗?
回答: 早期版本存在该问题,已通过 PTP 平滑 + Driver 时间戳改造在 0.11.0 系列修复。请升级到最新固件 + Driver 后重新配置。
❓ Q4.2 IMU / RGB / 点云通道间相对延迟是多少?
回答: 已发布资料覆盖 RGB 延迟与 IMU 延迟统计;dTOF 延迟数据将在后续版本补齐。如需第一手白盒数据请联系技术支持。
❓ Q4.3 cloud_raw 与 image 时间戳存在 20–30 ms gap?
回答: 已定位为 IMU 回调路径上的发布阻塞与 high_odo 处理阻塞,新版 Driver 通过异步化拆分回调修复。请升级到最新 Driver。
❓ Q4.4 TF 时间戳与点云时间戳偏差大 / 高速场景 TF 不跟车?
回答: 适合启用高频 TF(HIGHFREQ)模式发布,建议同时关闭 config 中不必要的数据通信而非仅关闭 publish,可显著降低 odometry_highfreq 的时间戳跳变。
❓ Q4.5 点云的 header.stamp 代表一帧的起始时刻还是结束时刻?
回答: dtof 点云分成 32 组逐一曝光(类似卷帘快门),第一点位于第一组曝光,因此 header.stamp 与第一组曝光开始时刻一致,代表整帧的起始时刻。
❓ Q4.6 点云 offset_time 的生成依据:dtof_subframe_odr 是速率还是微秒间隔?
回答: dtof_subframe_odr(odr = output data rate)是每组(subframe)的输出频率(速率),不是微秒间隔。SDK 头文件中”微秒间隔”的描述有误,已安排修改,请以示例代码(按速率使用)为准。
❓ Q4.7 第一块点 offset_time = 0 是真同时刻,还是未填充?
回答: 是真时刻。第一点位于第一组曝光,其时间戳与整帧数据 header.stamp 一致,因此 offset_time = 0 表示真实的同步起点,并非未填充。
❓ Q4.8 图像 header.stamp 对应曝光中点还是开始?相机是全局快门还是卷帘快门?
回答:
- 图像时间戳:对应曝光中点;
- 相机快门类型:全局快门(Global Shutter)。
五、点云质量
❓ Q5.1 0.4m 近距离点云畸变?
回答: 当前 0.4m 内已出现明显畸变,建议避障近距离用 cloud_raw,建图与定位用 cloud_slam。安装时若机器有近距遮挡(如保险杠 / 防撞圈),建议把传感器适度前倾或避让,防止反射干扰。
❓ Q5.2 点云看起来有噪点,怎么办?
回答: FOV 边缘 110° 以上区域容易出现噪点,安装时尽量让目标处于 FOV 中央偏向位置。
❓ Q5.3 cloud_raw 与 cloud_slam 有什么区别?为什么 cloud_raw 看起来”分层”?
回答:
cloud_raw:未矫正历史位姿的原始点云,时延最低,用于近处避障 / 实时感知;cloud_slam:经位姿矫正后的点云,用于建图、定位,无分层现象;- “分层”是 Odin1 不回放矫正历史点云的设计本身,不是 bug;建议按用途使用对应话题。
❓ Q5.4 RGB 颜色异常(偏暗 / 偏紫)?
回答:
- 偏紫:固件层 ISP 配置异常,请联系售后刷新固件即可恢复;
- 暗光偏暗:对环境补光,后续硬件版本将改善高增益场景。
六、重定位与地图
❓ Q6.1 用 Q9000 建图给 Odin1 重定位很难定位?
回答:
- 现象:Q9000 扫描的地图相对 Odin1 自建地图更不容易重定位成功。
- 排查方向:
- 使用最新版本的 MindCloud 处理和导出 Q9000 的地图文件;
- Q9000 手持扫描时正面镜头角度和高度对齐 Odin1 实际安装角度。
- 建议方案:使用
custom_init_pos功能,给定初始位姿,可提高重定位效率。
❓ Q6.2 静态重定位 / 设备不动时无法定位?
回答:
- 算法机制:算法需要累积 10 次重定位检测后才输出,特征不明显的场景原地不动场景较难凑齐;
- 建议:开机后让设备做小幅度运动(步行 / 转身 / 缓慢旋转)以触发检测;针对”上电不在平地、原地旋转风险高”的场景(如机器狗),静态重定位建议搭配init_pose使用。
❓ Q6.3 竖装雷达重定位困难?
回答: 升级最新固件与驱动即可。
❓ Q6.4 地图保存失败 / 失败率较高?
回答: 已知优化项已在最新固件 + Driver 落地,建议升级后重测;如仍失败,请录制保存阶段完整日志反馈。
❓ Q6.5 地图导入 / 导出与 MindCloud Studio?
回答:
- 重定位地图导入 MindCloud Studio:1.0.3 版本 MindCloud 已经可以正常使用;
- MindCloud Studio 导出编辑后的地图:目前不支持,研发已立项;
- Q9000 数据导入云平台 → 导出 Odin 重定位地图:已实现。
❓ Q6.6 MindCloud 授权 / 涉密地图不上云?
回答:
- 授权机制不需要联网,可在内网通过离线授权方式完成;
- MindCloud 授权后可离线使用,无需上网。
七、极端场景定位(机载 / 隧道 / 暗光)
❓ Q7.1 暗光 + 飞行震动 + 低纹理(白墙立面)场景?
回答:
- 现场加装补光(建议白光 / 发散光源);
- 安装尽量减少震动(橡胶减震)。
❓ Q7.2 隧道场景:odom 模式悬停打滑、SLAM 模式沿线退化?
回答:
- odom 模式:当前 odom 模式下不输出”位置变化”信息,飞控不能纠偏,弱纹理隧道易漂;
- SLAM 模式:长直退化场景需要充足特征支撑。
建议:
- 优化结构设计,确认 Odin1 可视范围内没有扫到机翼、机身、机架等固定障碍物;
- 提供至少 5°~10° 的横滚 / 俯仰小幅扰动,避免完全单调直行;
- 若测试仍有问题,建议提前联系技术支持做 bag 复盘,建议客户录制
/odin1/cloud_raw&/odin1/imu&/odin1/image/compressed成一个 bag 包,另提供重定位 bin 地图和标定参数calib.yaml文件到 FAE。
❓ Q7.3 算法重置(algo_reset)什么时候用?
回答: 用于碰撞、剧烈位姿跳变后主动让 SLAM 重新初始化。0.10.5+ Driver 已提供 algo_reset 接口与 demo,可由客户在异常事件触发时调用。
调用方式:另起终端,进入 $ros_workspace/src/odin_ros_driver/ 目录,执行:
./set_param.sh algo_reset 1
八、抗冲击与工作温度
❓ Q8.1 抗冲击数据
回答:
| 测试场景 | 数值 |
|---|---|
| 铁锤直接砸 | ≈ 32 G(超日常 10 倍) |
| 流星锤甩 | 合角速度 ≈ 17.49 rad/s(≈ 2.78 圈/秒) |
| 机器狗跳跃(第三下) | ≈ 16.8 G |
注:超过陀螺仪量程时会输出最大量程并短暂失能,宣传抗冲击时不要与极限振动场景混用。
❓ Q8.2 工作温度 / 存储温度?
回答:
| 项 | 范围 |
|---|---|
| 工作温度 | -20 °C ~ 55 °C |
| 存储温度 | -20 °C ~ 60 °C |
- 主要发热源:dTOF 与 SOC。
- 影响因素:
- 环境温度(建议 ≤ 50 °C);
- dTOF 帧率(10 Hz vs 14.5 Hz,后者发热更高);
- 场景复杂度(特征越多 SOC 计算量越大)。
九、帧率模式与 FOV
❓ Q9.1 高速运动场景效果差?
回答: Odin1 提供 14.5 Hz 隐藏模式,高速场景下开启效果更好。
❓ Q9.2 修改 Odin1 FOV?
回答: 在 Driver 启动配置中可指定 FOV,需配合算法 dynamic 文件中的 init_pose_search_radius、init_pose_max_rot_deg 等参数。完整文档将在 0.12.0 版本配套发布。
十、多机同场使用
❓ Q10.1 同一场地能放多少台 Odin?会互相干扰吗?
回答:
- Odin1 dTOF 采用编码 / 时分等机制,多台同场干扰较低,已在赛事场景试验;
- 具体最大并发数受空间密度与遮挡关系影响,建议批量部署前做现场试装;如需技术联调,联系技术支持。
❓ Q10.2 与机械式 LiDAR 相比的差异化?
回答:
- 黑漆 / 低反射率材料:机械式 LiDAR(如部分 mid 系列、机械旋转激光)容易扫不出,Odin(dTOF)可正常成像;
- 结构紧凑:无机械旋转,抗振动能力更好(参见第八章)。
十一、系统兼容
❓ Q11.1 Odin1 支持的系统有哪些?
回答: Odin1 支持 x86 架构和 ARM 架构 Ubuntu 20.04 ROS1/ROS2、Ubuntu 22.04 ROS2 等 Linux 系统。
十二、售后服务
❓ Q12.1 返修政策与维修周期?
回答:
- 返修政策:
- 适配器规格内损坏(参见 Q1.1):常规返修流程;
- 软件 / 配置类问题:原则上远程协助 + 升级固件 / Driver 即可解决,不需要回寄。
- 维修周期:正常维修周期为 4~5 个工作日,以售后回执为准;复杂硬件问题(如 USB 协商降级 /
lsusb不识别)需要工厂级排查。 - 备用机机制:批量项目可申请备用机;具体规则联系商务。
十三、标准录包命令
❓ Q13.1 Odin1 录包命令?
回答:
# ros1
rosbag record /odin/image/compressed /odin/imu /odin/cloud_raw /odin/odometry
# ros2
ros2 bag record /odin/image/compressed /odin/imu /odin/cloud_raw /odin/odometry
注 1:需同时提供标定文件
calib.yaml,重定位模式需提供地图文件;
注 2:可根据问题现象,录制问题相关的话题。
附录 A:Odin1 关键版本对照
| 组件 | 版本 | 关键变更 |
|---|---|---|
| 固件 0.11.0 | 2026-03 | 多机能力对齐、algo_reset 接口、mask 传输接口 |
| 固件 0.11.3 | 2026-04 | 修复心跳超时模组需重启的问题、动态初始化、照片盲区设置 |
| 固件 0.11.4 | 2026-04 | 升级时偶现 LIBUSB_NO_MEM,重试 1–2 次可过 |
| 固件 0.11.5+ | 2026-05+ | 默认开启 confidence 滤波 |
| ROS Driver 0.10.0 | 2026-04 | IMU 平滑 400 Hz、PTP 平滑、双图叠加、algo_reset demo |
| ROS Driver v1.0.0+ | 2026-04 | 多 Odin1 支持、热插拔修复、重定位地图下发稳定性(强烈推荐) |
如本手册未涵盖您的问题,请联系技术支持并提供:① 设备 SN;② 固件 / Driver 版本;③ 完整启动日志;④ 复现 bag(建议 30 秒以上)。我们将按工单优先级响应。