pose6d-lab
6D object pose estimation on real RGB-D images (YCB-Video, BOP format), a classical baseline against FoundationPose, and the estimated pose driving a simulated Franka Panda grasp in MuJoCo. Code, scripts and raw JSON: https://github.com/pavanyadava007/pose6d-lab
Pose overlays on real test images (green = ground truth, orange = estimate)


Pose to grasp in simulation

Data: YCB-Video, BOP'19 test targets, 300 real RGB-D images / 1374 object instances (25 images per scene from all 12 test scenes, seed 0). 2D input for both methods: BOP ground-truth mask_visib.
1. Pose accuracy on real images (same images, same masks)
| Method | BOP AR | AR_VSD | AR_MSSD | AR_MSPD | ADD(-S) < 0.1 d | ADD(-S) AUC | ADD-S AUC | ADD-S < 0.1 d (all objects) | median rot. err (sym.-aware) | median trans. err |
|---|---|---|---|---|---|---|---|---|---|---|
| FPFH + RANSAC + ICP (Open3D) | 42.7 | 66.0 | 33.4 | 28.7 | 31.9 | 49.9 | 91.6 | 88.1 | 113.8 deg | 4.4 mm |
| FoundationPose (public weights) | 91.1 | 88.1 | 95.3 | 89.8 | 94.0 | 92.9 | 97.4 | 99.0 | 2.7 deg | 2.4 mm |
All values in percent unless a unit is given. BOP AR from the official bop_toolkit (results/bop_<method>.json); ADD(-S), AUC and errors from scripts/eval_metrics.py (results/metrics_<method>.json). ADD-S is used for the five objects treated as symmetric in the PoseCNN convention; AUC uses the YCB-Video convention (0 to 10 cm).
2. Runtime per object instance (mask given, measured on one NVIDIA L4)
| Method | median | mean | p90 | max |
|---|---|---|---|---|
| FPFH + RANSAC + ICP (Open3D) | 0.04 s | 0.04 s | 0.07 s | 0.09 s |
| FoundationPose (public weights) | 2.46 s | 1.95 s | 2.49 s | 2.53 s |
60 seeded instances after 5 warm-up runs, no other job of this project running (the host is shared); GPU NVIDIA L4, CPU AMD EPYC 7R13 Processor (the classical method runs on the CPU). Source: results/runtime.json.
3. ADD(-S) < 0.1 d recall by visible fraction of the object
| visible fraction | n | FPFH + RANSAC + ICP (Open3D) | FoundationPose (public weights) |
|---|---|---|---|
| 0.0-0.3 | 8 | 0.0 | 0.0 |
| 0.3-0.6 | 71 | 7.0 | 71.8 |
| 0.6-0.9 | 344 | 32.0 | 91.9 |
| 0.9-1.0 | 951 | 34.0 | 97.3 |
4. ADD(-S) < 0.1 d recall per object
| object | n | FPFH + RANSAC + ICP (Open3D) | FoundationPose (public weights) |
|---|---|---|---|
| 01_002_master_chef_can | 100 | 15.0 | 71.0 |
| 02_003_cracker_box | 75 | 4.0 | 100.0 |
| 03_004_sugar_box | 125 | 30.4 | 100.0 |
| 04_005_tomato_soup_can | 149 | 6.7 | 94.6 |
| 05_006_mustard_bottle | 50 | 28.0 | 96.0 |
| 06_007_tuna_fish_can | 100 | 9.0 | 100.0 |
| 07_008_pudding_box | 25 | 0.0 | 100.0 |
| 08_009_gelatin_box | 25 | 0.0 | 100.0 |
| 09_010_potted_meat_can | 75 | 13.3 | 73.3 |
| 10_011_banana | 50 | 28.0 | 100.0 |
| 11_019_pitcher_base | 75 | 74.7 | 100.0 |
| 12_021_bleach_cleanser | 100 | 34.0 | 100.0 |
| 13_024_bowl | 50 | 72.0 | 100.0 |
| 14_025_mug | 50 | 28.0 | 98.0 |
| 15_035_power_drill | 100 | 46.0 | 100.0 |
| 16_036_wood_block | 25 | 96.0 | 100.0 |
| 17_037_scissors | 25 | 32.0 | 100.0 |
| 18_040_large_marker | 50 | 14.0 | 56.0 |
| 19_051_large_clamp | 50 | 86.0 | 100.0 |
| 20_052_extra_large_clamp | 50 | 66.0 | 100.0 |
| 21_061_foam_brick | 25 | 96.0 | 100.0 |
5. From pose to grasp: Franka Panda in MuJoCo (simulation)
| pose source | grasp success | 03_004_sugar_box | 04_005_tomato_soup_can | 05_006_mustard_bottle | 09_010_potted_meat_can | median grasp position err | median grasp yaw err | median pose time |
|---|---|---|---|---|---|---|---|---|
| ground-truth pose (executor upper bound) | 99/100 (99.0 %) | 24/25 | 25/25 | 25/25 | 25/25 | 0.0 mm | 0.0 deg | 0.00 s |
| FoundationPose | 100/100 (100.0 %) | 25/25 | 25/25 | 25/25 | 25/25 | 1.1 mm | 0.3 deg | 2.46 s |
| FPFH + RANSAC + ICP | 91/100 (91.0 %) | 17/25 | 25/25 | 25/25 | 24/25 | 0.7 mm | 0.4 deg | 0.03 s |
| centroid only (position, fixed yaw) | 33/100 (33.0 %) | 7/25 | 3/25 | 13/25 | 10/25 | 15.2 mm | 40.1 deg | 0.00 s |
100 seeded layouts (seeds 0..99), each pose source sees the same layout and the same rendered RGB-D (640x480, fovy 45, Gaussian depth noise 1.5 mm, mask = simulator instance segmentation). Success = target lifted > 10 cm and still held after a 0.5 s hold. Grasp yaw error is meaningless for the round soup can. Source: results/grasp_sim.json.
Timings measured on one NVIDIA L4. The grasp numbers are simulation only.