98f4277849
这四个都是「现场看着正常、结果不对」的故障源,共同特征是**不报错**,所以要把它们
从流程里拎出来单独判,并且给出可执行的下一步,而不是只报一个失败。
scripts/lib/usb_health.py
RealSense 协商到 480Mbps(USB 2.0)时能出图、不报错,只是帧率掉到 1/2 且
深度不稳定。这里解析 sysfs 拓扑,把「速率对不对」独立于「有没有图」来判,
并在 --watch 下统计掉线/重连次数(线/口/供电 Hub 的问题会表现为反复抖)。
scripts/lib/v4l_health.py
触觉相机有两类完全不同的坏法,处置方式相反,以前都只表现为「没有 /dev/video*」:
· unplugged —— sysfs 里也没有,是没插/线坏
· wedged —— sysfs 里在、/dev/video* 没有,是 USB 端点了卡死(要复位或重插)
2026-09-28 现场左指就是 wedged(1-3.4.1 在 uvcvideo 下,video 节点缺失)。
scripts/lib/rdk_status.py
ros2_control 卡在 wait_for_operational 时,现象是「栈起来了但关节全是 0、
流程一直等」。原因全在 OperationalStatus 上,而它只有 RDK 读得到。
这里把状态翻成人话 + 处置(Auto(Remote) / 松急停 / 清故障)。
判据取自厂商头文件原话:IN_MANUAL_MODE = "need to switch to Auto (Remote) mode"。
scripts/lib/real_geometry_check.py
手眼矩阵与悬停几何。手眼写坏不会报错,只会让位姿整体偏几毫米到几厘米;
判据:R 正交(|RᵀR−I| ≤ 2e-3)、det(R)=+1、平移量级在 10–500mm。
悬停几何直接复用 gauge_fsm.hover_z_guard(流程里唯一判定处,不另写一套);
工件面未标定(site.yaml 写 0.0 = 未知)时**明确报 FAIL 并说明判不了**,
而不是按 0.0 算出一个假的「已修正」结论。
测试:test_usb_health / test_v4l_health / test_real_geometry_check 共 33 例,
全部钉在「判据要能报错」上(故意弄坏的输入必须被抓到)。
顺带 .gitignore 补 log_real/:真机各终端日志是运行产物,与 log_sim/ 对称。
72 lines
2.2 KiB
Plaintext
72 lines
2.2 KiB
Plaintext
# 本机现场配置(含 IP / 序列号;从 site.example.yaml 复制)
|
||
config/site.yaml
|
||
|
||
# 模型权重二进制 —— 一律不进 git(体积大、每台机器重新转换即可)
|
||
# 用通配模式而不是逐个目录列举,否则新增一个分组就会有人误提交二进制。
|
||
# 注意:*.labels.yaml 是**文本标签配置**,不属于二进制,应该进 git。
|
||
models/**/*.pt
|
||
models/**/*.pth
|
||
models/**/*.onnx
|
||
models/**/*.engine
|
||
models/**/*.trt
|
||
models/**/*.plan
|
||
models/**/*.tflite
|
||
|
||
# staging = 待转换的临时区,内容不进 git(含转换后归档的 done/)
|
||
# 但 .gitkeep 和说明文档要留着,否则新克隆的仓库里这个目录不存在/看不懂。
|
||
models/staging/**
|
||
!models/staging/.gitkeep
|
||
!models/staging/README.md
|
||
|
||
# 编译产物
|
||
build/
|
||
install/
|
||
log/
|
||
# 仿真的构建产物 —— 与真机的 build/ install/ 隔离(见 scripts/build_sim.sh)
|
||
# 两套产物目录并存是刻意的:工作区只有一份源码,两个环境的依赖路径不同,
|
||
# 共用 install/ 会互相覆盖。
|
||
build_sim/
|
||
install_sim/
|
||
log_sim/
|
||
# 真机各终端(T1 栈 / T2 相机 / T3 触觉 / T4 夹爪)的日志与截图。
|
||
# 与 log_sim/ 对称:日志是运行产物,不进 git;跑完要留档的证据(如相机截图)
|
||
# 单独放到 docs/ 或 PR 里,不要指望从 log_real/ 里找历史。
|
||
log_real/
|
||
.colcon/
|
||
|
||
# Python
|
||
*.pyc
|
||
__pycache__/
|
||
*.egg-info/
|
||
.pytest_cache/
|
||
|
||
# Editor / OS
|
||
.vscode/
|
||
.idea/
|
||
.DS_Store
|
||
*.swp
|
||
|
||
# ROS bags
|
||
*.bag
|
||
*.db3
|
||
|
||
# Hand-eye backups
|
||
*.bak
|
||
*.bak.*
|
||
|
||
# 可选离线 RDK / Isaac(体积大)
|
||
thirdparty/
|
||
vendor/
|
||
|
||
|
||
# 手眼标定的临时产物(采点图、taught_poses.txt、captures.json)
|
||
handeye/tmp/*
|
||
!handeye/tmp/.gitkeep
|
||
|
||
# 仿真手眼真值:**生成物**,不是标定结果 —— 由 scripts/gen_sim_handeye.py 从
|
||
# URDF/TF 真值导出,run_gauge_assembly.sh --sim 每次自动重生成。
|
||
# 不跟踪的理由:内容里有一行生成时间,每跑一次就脏一次仓库,让人分不清
|
||
# "这次改动是代码改的还是只是跑了一遍"。真机标定结果(89_/91_*.yaml)**要跟踪**,
|
||
# 那是需要留档的实测数据,不是推导出来的。
|
||
handeye/results/sim_*.yaml
|