7d22f777c8
现场 site.yaml、权重和编译产物仍不入库;模板只留占位符。 Co-authored-by: Cursor <cursoragent@cursor.com>
devices/cameras/ —— 相机
厂商物料放置要求
| 项 | 要求 |
|---|---|
| 格式 | 厂商 SDK / 驱动包原始格式。RealSense 用 pyrealsense2 或官方 ROS 2 包 |
| 命名 | 保持原样,不要改名 |
| 序列号 | 不要写在这里。序列号在 config/site.yaml 的 cameras.<名字>.serial |
| 生效 | 放好物料 → 改 registry.yaml 选型 → 改 site.yaml 的 serial / 分辨率 / 曝光 → 重启对应相机脚本 |
目录结构
cameras/
├── README.md
├── realsense/ # Intel RealSense(当前在用)
│ ├── manifest.yaml
│ └── driver/
└── <新品牌>/
相机角色与命名(重要)
框架里每台相机必须有一个角色,因为不同角色参与完全不同的流程:
| 角色 | 当前相机 | 参与流程 | 是否参与手眼标定 |
|---|---|---|---|
wrist_eye_in_hand |
D405(左腕 / 右腕各一台) | 视觉跟踪 k0、拍照推理 k1/k2 | 是(眼在手上) |
overhead_eye_to_hand |
D435(双臂中间) | 粗定位兜底(S03) | 是(眼在手外) |
注意:真机 D435 的眼在手外标定按 docs/HANDEYE.md 的「眼在手外」一节做;
产物是 handeye/results/<臂号>_d435_eye_to_hand.yaml。没有那份文件时 S03
会明确报缺文件并回 S04 跟踪,不做假装成功的反投影。这不影响 S04 跟踪链路。
已知的坑(迁移时必须保留的处理)
- USB 独占:RealSense 同时只能被一个进程打开。启动前必须
pkill掉旧进程, 现有脚本里那句sleep 2是必要的,不要删。 - USB2 vs USB3 会自动降分辨率:现有脚本检测到 USB2 会降到
640x480@15并告警, 这个降级逻辑要保留,否则会在弱链路上直接起不来。 run_camera_d435.sh曾把分辨率/曝光/emitter 硬编码,与site.yaml的cameras.d435字段脱节。迁移后必须全部从site.yaml读,不允许硬编码。
当前状态(迁移参考)
| 现有位置 | 内容 | 迁移去向 |
|---|---|---|
src/arm_application/arm_application/realsense_color_pub.py |
采集 + 发布彩图/对齐深度/红外 | driver/ |
src/arm_application/arm_application/realsense_view.py |
独立预览进程(与采集分离) | driver/ 或 tools/ |
src/arm_application/arm_application/realsense_sdk_view.py |
Qt 四宫格窗口(被上面两者共用) | 保留 |
src/arm_application/arm_application/handeye_realsense.py |
内参查询、话题解析、曝光设置 | 拆开:相机相关的进 driver/,标定相关的进 handeye/ |