d93dab31c9
P3 把 handeye 相关文件从 src/arm_application/config/ 迁到了仓库根的 handeye/, 但文档还写着老路径。这类"代码改了、文档没跟"的偏差最麻烦:新人照着文档敲 命令会直接报文件不存在,然后开始怀疑人生。 同步内容 - docs/HANDEYE.md / WORKSPACE.md / SITE_CONFIG.md / ARCHITECTURE.md: 手眼结果与示教点位改指 handeye/results|poses/<臂号>_<模式>.yaml, 临时目录改指 handeye/tmp/<臂号>/,并补上 --mode / --points / --auto-solve。 - docs/INTERFACES.md / TRACKING.md / docs/HOLE_DETECT.md / README.md: 权重那一行从 export_yolo_trt.sh 改为 weights.sh,并注明前者已是兼容转发壳。 - docs/HOLE_DETECT.md:hole_weights / workpiece_weights 的实际取值改为 models/hole_insert/detect_best_1.onnx(原文档写的是不存在的 best.pt)。 - scripts/merge_handeye_poses.py:只更新文件头注释里的示例路径。 多处改为指向 models/README.md 与 handeye/README.md,避免同一套规则在 七八个文件里各写一遍、然后各自漂移。 验证:rg 扫 docs/ README.md,已无 handeye_poses_/handeye_result_/ /tmp/handeye 之类过期路径残留。 Co-authored-by: Cursor <cursoragent@cursor.com>
51 lines
2.3 KiB
Markdown
51 lines
2.3 KiB
Markdown
# 手眼标定(眼在手上)
|
||
|
||
每台机械臂一份结果,**禁止混用**:
|
||
|
||
| 臂 | 结果 | 示教关节 | 工作目录 |
|
||
|----|------|----------|----------|
|
||
| 89 左 | `handeye/results/89_eye_in_hand.yaml` | `handeye/poses/89_eye_in_hand.yaml` | `handeye/tmp/89/` |
|
||
| 91 右 | `handeye/results/91_eye_in_hand.yaml` | `handeye/poses/91_eye_in_hand.yaml` | `handeye/tmp/91/` |
|
||
|
||
文件名统一为 `<臂号>_<模式>.yaml`(模式 = `eye_in_hand` | `eye_to_hand`),
|
||
全部集中在仓库根 `handeye/`(`poses/` 输入、`results/` 输出、`tmp/` 临时产物)。
|
||
目录结构、板尺寸三处一致性与全部选项见 `handeye/README.md`。
|
||
|
||
`T_4x4` = **相机 → 法兰**。跟踪和静态 TF 都读当前 `--arm` 对应的文件。
|
||
|
||
棋盘尺寸只改 `site.yaml` → `handeye.board_*` / `square_size_m`(内角点 = 方格数 − 1)。两臂可共用同一块板。
|
||
|
||
## 流程
|
||
|
||
`teach`(RDK 软拖拽)与 `run_real.sh` **互斥**。全程带同一 `--arm`。
|
||
`--mode eye_in_hand|eye_to_hand` 选模式(读写对应 `<臂号>_<模式>.yaml`,两种模式互不覆盖);
|
||
`teach --points N` 设定目标点数;`teach --ros --auto-solve` 采完自动 merge 并接着标定。
|
||
|
||
```bash
|
||
# 1) 停掉 run_real.sh 和视觉伺服
|
||
# 2) 示教 8–12 个姿态(棋盘清晰、占画面 30–70%,姿态拉开)
|
||
bash ~/ros2/scripts/run_handeye.sh --arm 89 teach
|
||
# 窗口:d=拖拽 Enter=拍照 q=结束
|
||
# 接着采、不清空旧点: teach --append
|
||
|
||
# 3) 写入该臂 handeye/poses/<臂号>_<模式>.yaml
|
||
bash ~/ros2/scripts/run_handeye.sh --arm 89 merge
|
||
|
||
# 4) 再开实机 + 相机,棋盘不要动
|
||
bash ~/ros2/scripts/run_real.sh --arm 89
|
||
bash ~/ros2/scripts/run_camera_d405.sh --arm 89 --preview
|
||
bash ~/ros2/scripts/run_handeye.sh --arm 89 calibrate
|
||
```
|
||
|
||
91 把 `--arm 89` 改成 `--arm 91`。91 的结果文件初始是 `uncalibrated: true`,标定成功后才会写出 `T_4x4`。
|
||
|
||
查看路径与板参数:`bash ~/ros2/scripts/run_handeye.sh --arm 89 show`
|
||
|
||
## 结果怎么用
|
||
|
||
`visual_servo.launch.py` 读当前臂 `T_4x4`,发布 `{ee_frame}` → `{camera_frame}` 的 static TF。
|
||
|
||
`servo_node` 用同一份 T 做 `hover` / `lookat`。换结果后**重启** `run_visual_servo_rt.sh --arm …`。
|
||
|
||
装配 HMI(`ros_flexiv`)选左/右臂后,读同一份 `handeye/results/89_eye_in_hand.yaml` / `91_eye_in_hand.yaml`。
|