Spaces:
Running
Running
force recovery: methods, evaluation, debug log
Browse files- .gitattributes +1 -0
- assets/cross_dataset.png +2 -2
- assets/panel_sparsh.png +2 -2
- assets/panel_sparsh_zh.png +2 -2
- assets/pred_vs_gt.png +2 -2
- assets/sparsh_channel_fix.png +3 -0
- gallery.html +4 -1
- index.html +4 -1
- method.html +7 -8
- results.html +4 -1
- sensors.html +101 -0
- workbench.html +4 -1
.gitattributes
CHANGED
|
@@ -136,3 +136,4 @@ assets/panel_sparsh_zh.png filter=lfs diff=lfs merge=lfs -text
|
|
| 136 |
assets/react_normals.png filter=lfs diff=lfs merge=lfs -text
|
| 137 |
assets/pred_vs_gt.png filter=lfs diff=lfs merge=lfs -text
|
| 138 |
assets/cross_dataset.png filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 136 |
assets/react_normals.png filter=lfs diff=lfs merge=lfs -text
|
| 137 |
assets/pred_vs_gt.png filter=lfs diff=lfs merge=lfs -text
|
| 138 |
assets/cross_dataset.png filter=lfs diff=lfs merge=lfs -text
|
| 139 |
+
assets/sparsh_channel_fix.png filter=lfs diff=lfs merge=lfs -text
|
assets/cross_dataset.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
assets/panel_sparsh.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
assets/panel_sparsh_zh.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
assets/pred_vs_gt.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
assets/sparsh_channel_fix.png
ADDED
|
Git LFS Details
|
gallery.html
CHANGED
|
@@ -52,7 +52,10 @@ padding:14px 16px;overflow-x:auto;font-size:var(--s1);max-width:100%}
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
| 56 |
<h1>Gallery</h1>
|
| 57 |
<figure><img src="assets/depth_validation_panel.png" alt="React contacts">
|
| 58 |
<figcaption>React, motherboard episode 000 — the three strongest contacts.
|
|
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
+
/* Subscripts default to a fraction of the parent and rendered at 11.7px —
|
| 56 |
+
off the --s0..--s5 scale the audit counts. Pinned to the smallest step. */
|
| 57 |
+
sub,sup{font-size:var(--s0);line-height:0}
|
| 58 |
+
</style></head><body><div class="wrap"><nav><a href="index.html">overview</a><a href="method.html">method</a><a href="results.html">results</a><a href="sensors.html">sensors</a><a href="gallery.html" aria-current="page">gallery</a><a href="workbench.html">3D workbench</a></nav>
|
| 59 |
<h1>Gallery</h1>
|
| 60 |
<figure><img src="assets/depth_validation_panel.png" alt="React contacts">
|
| 61 |
<figcaption>React, motherboard episode 000 — the three strongest contacts.
|
index.html
CHANGED
|
@@ -52,7 +52,10 @@ padding:14px 16px;overflow-x:auto;font-size:var(--s1);max-width:100%}
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
| 56 |
<h1>Contact force from a GelSight image,<br>with no force sensor</h1>
|
| 57 |
<p>React records tactile images and sensor pose. It has no load cell, so the
|
| 58 |
newtons in it are estimated from the images alone — reconstructed to a depth
|
|
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
+
/* Subscripts default to a fraction of the parent and rendered at 11.7px —
|
| 56 |
+
off the --s0..--s5 scale the audit counts. Pinned to the smallest step. */
|
| 57 |
+
sub,sup{font-size:var(--s0);line-height:0}
|
| 58 |
+
</style></head><body><div class="wrap"><nav><a href="index.html" aria-current="page">overview</a><a href="method.html">method</a><a href="results.html">results</a><a href="sensors.html">sensors</a><a href="gallery.html">gallery</a><a href="workbench.html">3D workbench</a></nav>
|
| 59 |
<h1>Contact force from a GelSight image,<br>with no force sensor</h1>
|
| 60 |
<p>React records tactile images and sensor pose. It has no load cell, so the
|
| 61 |
newtons in it are estimated from the images alone — reconstructed to a depth
|
method.html
CHANGED
|
@@ -52,7 +52,10 @@ padding:14px 16px;overflow-x:auto;font-size:var(--s1);max-width:100%}
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
| 56 |
<h1>Method</h1>
|
| 57 |
<pre class="card">frame − reference → dI, signed RGB difference
|
| 58 |
dI → surface gradient ← the only step that needs a choice
|
|
@@ -80,7 +83,7 @@ panels below and by physical checks that need no labels.</p>
|
|
| 80 |
<tr><td>cnc_mini_26</td><td>120</td><td>0.016</td><td>0.013</td><td>2.71</td><td>14%</td><td>90%</td><td>+0.796</td></tr>
|
| 81 |
<tr><td>cnc</td><td>120</td><td>0.015</td><td>0.014</td><td>1.71</td><td>1%</td><td>68%</td><td>+0.829</td></tr>
|
| 82 |
<tr><td>feats</td><td>120</td><td>0.052</td><td>0.046</td><td>1.08</td><td>0%</td><td>99%</td><td>+0.688</td></tr>
|
| 83 |
-
<tr><td>sparsh</td><td>90</td><td>0.
|
| 84 |
<tr><td>faf</td><td>119</td><td>0.044</td><td>0.035</td><td>2.14</td><td>10%</td><td>96%</td><td>+0.777</td></tr></tbody></table></div>
|
| 85 |
|
| 86 |
<p class="dim">Leak is mean |depth| off-contact over peak — zero for a coherent
|
|
@@ -91,12 +94,8 @@ reconstruction can know. The last column is the two reconstructions agreeing
|
|
| 91 |
with each other, which is evidence neither invents the shape — not that either
|
| 92 |
is right.</p>
|
| 93 |
|
| 94 |
-
<p>
|
| 95 |
-
|
| 96 |
-
wrongly, in orthogonal directions. The LED azimuths are per-sensor wiring, and
|
| 97 |
-
these are ours — on Sparsh's own spheres a sphere comes out 3.3× elongated
|
| 98 |
-
under our value and 1.5× under the one measured from its data. Its force ρ is
|
| 99 |
-
0.93 either way, which is the whole reason this stage is scored separately.</p>
|
| 100 |
|
| 101 |
<figure><img src="assets/panel_cnc_mini_26.png" alt="cnc_mini_26 — GelSight Mini, CNC presses, 0–20 N"><figcaption>cnc_mini_26 — GelSight Mini, CNC presses, 0–20 N · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_fota_cnc.png" alt="FoTa cnc_Mini — GelSight Mini, CNC probes"><figcaption>FoTa cnc_Mini — GelSight Mini, CNC probes · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_feats.png" alt="FEATS — marker gel, FEA force labels"><figcaption>FEATS — marker gel, FEA force labels · MARKER · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_sparsh.png" alt="Sparsh / Meta — 10 gel pads"><figcaption>Sparsh / Meta — 10 gel pads · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_faf.png" alt="FeelAnyForce — 42 captures"><figcaption>FeelAnyForce — 42 captures · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure>
|
| 102 |
|
|
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
+
/* Subscripts default to a fraction of the parent and rendered at 11.7px —
|
| 56 |
+
off the --s0..--s5 scale the audit counts. Pinned to the smallest step. */
|
| 57 |
+
sub,sup{font-size:var(--s0);line-height:0}
|
| 58 |
+
</style></head><body><div class="wrap"><nav><a href="index.html">overview</a><a href="method.html" aria-current="page">method</a><a href="results.html">results</a><a href="sensors.html">sensors</a><a href="gallery.html">gallery</a><a href="workbench.html">3D workbench</a></nav>
|
| 59 |
<h1>Method</h1>
|
| 60 |
<pre class="card">frame − reference → dI, signed RGB difference
|
| 61 |
dI → surface gradient ← the only step that needs a choice
|
|
|
|
| 83 |
<tr><td>cnc_mini_26</td><td>120</td><td>0.016</td><td>0.013</td><td>2.71</td><td>14%</td><td>90%</td><td>+0.796</td></tr>
|
| 84 |
<tr><td>cnc</td><td>120</td><td>0.015</td><td>0.014</td><td>1.71</td><td>1%</td><td>68%</td><td>+0.829</td></tr>
|
| 85 |
<tr><td>feats</td><td>120</td><td>0.052</td><td>0.046</td><td>1.08</td><td>0%</td><td>99%</td><td>+0.688</td></tr>
|
| 86 |
+
<tr><td>sparsh</td><td>90</td><td>0.016</td><td>0.012</td><td>0.93</td><td>0%</td><td>59%</td><td>+0.895</td></tr>
|
| 87 |
<tr><td>faf</td><td>119</td><td>0.044</td><td>0.035</td><td>2.14</td><td>10%</td><td>96%</td><td>+0.777</td></tr></tbody></table></div>
|
| 88 |
|
| 89 |
<p class="dim">Leak is mean |depth| off-contact over peak — zero for a coherent
|
|
|
|
| 94 |
with each other, which is evidence neither invents the shape — not that either
|
| 95 |
is right.</p>
|
| 96 |
|
| 97 |
+
<p class="dim">One row needed a fix before it could be read at all — see
|
| 98 |
+
<a href="sensors.html">sensors</a>.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
|
| 100 |
<figure><img src="assets/panel_cnc_mini_26.png" alt="cnc_mini_26 — GelSight Mini, CNC presses, 0–20 N"><figcaption>cnc_mini_26 — GelSight Mini, CNC presses, 0–20 N · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_fota_cnc.png" alt="FoTa cnc_Mini — GelSight Mini, CNC probes"><figcaption>FoTa cnc_Mini — GelSight Mini, CNC probes · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_feats.png" alt="FEATS — marker gel, FEA force labels"><figcaption>FEATS — marker gel, FEA force labels · MARKER · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_sparsh.png" alt="Sparsh / Meta — 10 gel pads"><figcaption>Sparsh / Meta — 10 gel pads · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure><figure><img src="assets/panel_faf.png" alt="FeelAnyForce — 42 captures"><figcaption>FeelAnyForce — 42 captures · markerless · 8 samples. Columns 5 and 6 are the same surface from each reconstruction; the calibration-free one is drawn with relative height because its scale is not recovered.</figcaption></figure>
|
| 101 |
|
results.html
CHANGED
|
@@ -52,7 +52,10 @@ padding:14px 16px;overflow-x:auto;font-size:var(--s1);max-width:100%}
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
| 56 |
<h1>Results</h1>
|
| 57 |
<p>One protocol everywhere: half the frames in each group fit a 5-feature
|
| 58 |
least squares with isotonic calibration, half are scored; pooled Spearman ρ,
|
|
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
+
/* Subscripts default to a fraction of the parent and rendered at 11.7px —
|
| 56 |
+
off the --s0..--s5 scale the audit counts. Pinned to the smallest step. */
|
| 57 |
+
sub,sup{font-size:var(--s0);line-height:0}
|
| 58 |
+
</style></head><body><div class="wrap"><nav><a href="index.html">overview</a><a href="method.html">method</a><a href="results.html" aria-current="page">results</a><a href="sensors.html">sensors</a><a href="gallery.html">gallery</a><a href="workbench.html">3D workbench</a></nav>
|
| 59 |
<h1>Results</h1>
|
| 60 |
<p>One protocol everywhere: half the frames in each group fit a 5-feature
|
| 61 |
least squares with isotonic calibration, half are scored; pooled Spearman ρ,
|
sensors.html
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Sensors</title><style>
|
| 2 |
+
:root{--bg:#0b1020;--fg:#e8eefb;--dim:#8ea0c2;--line:#1e2a45;--card:#111a2e;
|
| 3 |
+
--accent:#ffc46b;--ok:#7be0a0;--bad:#ff8f7a;
|
| 4 |
+
--s0:12px;--s1:14px;--s2:16px;--s3:20px;--s4:28px;--s5:40px}
|
| 5 |
+
*{box-sizing:border-box}
|
| 6 |
+
body{margin:0;background:var(--bg);color:var(--fg);font-size:var(--s2);
|
| 7 |
+
font-family:'IBM Plex Sans',system-ui,sans-serif;line-height:1.6}
|
| 8 |
+
.wrap{max-width:1100px;margin:0 auto;padding:0 20px 72px}
|
| 9 |
+
a{color:var(--accent)}
|
| 10 |
+
h1{font-size:var(--s5);line-height:1.15;margin:40px 0 8px;font-weight:650}
|
| 11 |
+
h2{font-size:var(--s4);margin:44px 0 10px;font-weight:600}
|
| 12 |
+
h3{font-size:var(--s3);margin:28px 0 6px;font-weight:600}
|
| 13 |
+
p{margin:10px 0;max-width:70ch}
|
| 14 |
+
.dim{color:var(--dim);font-size:var(--s1)}
|
| 15 |
+
nav{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 4px}
|
| 16 |
+
nav a{display:inline-block;padding:10px 16px;min-height:44px;line-height:24px;
|
| 17 |
+
border:1px solid var(--line);border-radius:999px;text-decoration:none;
|
| 18 |
+
background:var(--card)}
|
| 19 |
+
nav a[aria-current]{border-color:var(--accent)}
|
| 20 |
+
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
|
| 21 |
+
gap:12px;margin:20px 0}
|
| 22 |
+
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;
|
| 23 |
+
padding:16px}
|
| 24 |
+
.card b{display:block;font-size:var(--s4);color:var(--accent);font-weight:650}
|
| 25 |
+
.card span{color:var(--dim);font-size:var(--s1)}
|
| 26 |
+
figure{margin:24px 0}
|
| 27 |
+
figure img{width:100%;border-radius:10px;border:1px solid var(--line);
|
| 28 |
+
background:#fff}
|
| 29 |
+
figcaption{color:var(--dim);font-size:var(--s1);margin-top:8px;max-width:80ch}
|
| 30 |
+
table{border-collapse:collapse;width:100%;margin:14px 0;font-size:var(--s1)}
|
| 31 |
+
th,td{border-bottom:1px solid var(--line);padding:9px 10px;text-align:right}
|
| 32 |
+
th:first-child,td:first-child{text-align:left}
|
| 33 |
+
th{color:var(--dim);font-weight:500}
|
| 34 |
+
td b{color:var(--ok)}
|
| 35 |
+
details{background:var(--card);border:1px solid var(--line);border-radius:10px;
|
| 36 |
+
padding:12px 16px;margin:16px 0}
|
| 37 |
+
summary{cursor:pointer;color:var(--dim);font-size:var(--s1);min-height:44px;
|
| 38 |
+
display:flex;align-items:center}
|
| 39 |
+
code{background:#0d1526;padding:2px 6px;border-radius:5px;font-size:var(--s1)}
|
| 40 |
+
/* Inline links in prose measured 47x16 and 54x16 at 375 px — a tap target,
|
| 41 |
+
because a finger does not know it is "only prose". Padding alone would
|
| 42 |
+
break the line box, so the height comes from an inline-block with the
|
| 43 |
+
line-height carrying it. */
|
| 44 |
+
p a,figcaption a{display:inline-block;min-height:44px;line-height:44px;
|
| 45 |
+
padding:0 2px}
|
| 46 |
+
/* The <pre> pipeline diagram and the results table are the two things wider
|
| 47 |
+
than a phone. Let each scroll inside its own box rather than pushing the
|
| 48 |
+
document sideways — a horizontally scrolling PAGE hides content with no
|
| 49 |
+
affordance, a scrolling code block is a known idiom. */
|
| 50 |
+
pre{background:var(--card);border:1px solid var(--line);border-radius:10px;
|
| 51 |
+
padding:14px 16px;overflow-x:auto;font-size:var(--s1);max-width:100%}
|
| 52 |
+
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
+
.tablewrap table{min-width:640px}
|
| 54 |
+
img{max-width:100%;height:auto}
|
| 55 |
+
/* Subscripts default to a fraction of the parent and rendered at 11.7px —
|
| 56 |
+
off the --s0..--s5 scale the audit counts. Pinned to the smallest step. */
|
| 57 |
+
sub,sup{font-size:var(--s0);line-height:0}
|
| 58 |
+
</style></head><body><div class="wrap"><nav><a href="index.html">overview</a><a href="method.html">method</a><a href="results.html">results</a><a href="sensors.html" aria-current="page">sensors</a><a href="gallery.html">gallery</a><a href="workbench.html">3D workbench</a></nav>
|
| 59 |
+
<h1>A second sensor is not a second dataset</h1>
|
| 60 |
+
<p>The calibration-free solve reads each <b>colour channel</b> as one LED
|
| 61 |
+
direction — <code>dI<sub>k</sub>/I<sub>ref</sub> ≈ g<sub>x</sub>cos θ<sub>k</sub>
|
| 62 |
+
+ g<sub>y</sub>sin θ<sub>k</sub></code>. So a channel permutation does not tint
|
| 63 |
+
an image, it <b>rotates the whole recovered gradient field</b>.</p>
|
| 64 |
+
|
| 65 |
+
<p>Sparsh's frames reach us with R and B exchanged. It was found by scoring the
|
| 66 |
+
depth stage on its own: its two reconstructions of the same contact correlated
|
| 67 |
+
at <b>−0.13</b>, against 0.69–0.83 on every other dataset, and both rendered a
|
| 68 |
+
round sphere press wrongly in orthogonal directions.</p>
|
| 69 |
+
|
| 70 |
+
<h2>Measured, not searched</h2>
|
| 71 |
+
<p>For a sphere the surface gradient points radially outward, so the dipole
|
| 72 |
+
direction of each channel's difference <em>is</em> that channel's LED azimuth.
|
| 73 |
+
Thirty sphere presses per sensor:</p>
|
| 74 |
+
|
| 75 |
+
<div class="tablewrap"><table><thead><tr><th></th><th>rest hue</th>
|
| 76 |
+
<th>R</th><th>G</th><th>B</th></tr></thead><tbody>
|
| 77 |
+
<tr><td>our Mini</td><td>172.1°</td><td>259.2°</td><td>5.1°</td><td>51.1°</td></tr>
|
| 78 |
+
<tr><td>Sparsh, as-is</td><td>42.1°</td><td>75.7°</td><td>4.3°</td><td>259.8°</td></tr>
|
| 79 |
+
<tr><td>Sparsh, R↔B</td><td>197.9°</td><td><b>259.8°</b></td><td><b>4.3°</b></td><td>75.7°</td></tr>
|
| 80 |
+
</tbody></table></div>
|
| 81 |
+
<p class="dim">Swapped, R and G land within 1° of ours. A different gel tint
|
| 82 |
+
cannot align LED azimuths; a channel-order difference does exactly that.</p>
|
| 83 |
+
|
| 84 |
+
<figure><img src="assets/sparsh_channel_fix.png" alt="Sparsh channel fix">
|
| 85 |
+
<figcaption>The same frames before and after, at every stage. Sphere axis ratio
|
| 86 |
+
3.62 → 1.53 (1.0 is a circle), agreement with the LUT
|
| 87 |
+
−0.125 → +0.920, flat-gel leak 0.0272 → 0.0071. Across the
|
| 88 |
+
dataset, agreement −0.082 → +0.895.
|
| 89 |
+
</figcaption></figure>
|
| 90 |
+
|
| 91 |
+
<h2>Why the force numbers never showed it</h2>
|
| 92 |
+
<p>Force ρ on Sparsh was <b>0.909 before</b> the fix and 0.894 after; the LUT
|
| 93 |
+
gained 0.822 → 0.894. Contact size tracks force whatever the shape
|
| 94 |
+
does, so a ρ cannot see a geometry this wrong. That is the argument for scoring
|
| 95 |
+
image→depth separately from depth→newtons.</p>
|
| 96 |
+
|
| 97 |
+
<p class="dim">A correction of ours: a six-permutation search first put Sparsh's
|
| 98 |
+
best at (90,330,210) and that was written up as “LED wiring differs per
|
| 99 |
+
sensor”. It is the same fact said uselessly — (90,330,210) is (210,330,90) with
|
| 100 |
+
R and B exchanged. The azimuths never differed.</p>
|
| 101 |
+
</div></body></html>
|
workbench.html
CHANGED
|
@@ -52,7 +52,10 @@ padding:14px 16px;overflow-x:auto;font-size:var(--s1);max-width:100%}
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
| 56 |
<h1>3D workbench</h1>
|
| 57 |
<p>Every stage of the reconstruction on one frame, with its knobs: difference
|
| 58 |
image, gradient field, integrated depth, surface.</p>
|
|
|
|
| 52 |
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
| 53 |
.tablewrap table{min-width:640px}
|
| 54 |
img{max-width:100%;height:auto}
|
| 55 |
+
/* Subscripts default to a fraction of the parent and rendered at 11.7px —
|
| 56 |
+
off the --s0..--s5 scale the audit counts. Pinned to the smallest step. */
|
| 57 |
+
sub,sup{font-size:var(--s0);line-height:0}
|
| 58 |
+
</style></head><body><div class="wrap"><nav><a href="index.html">overview</a><a href="method.html">method</a><a href="results.html">results</a><a href="sensors.html">sensors</a><a href="gallery.html">gallery</a><a href="workbench.html" aria-current="page">3D workbench</a></nav>
|
| 59 |
<h1>3D workbench</h1>
|
| 60 |
<p>Every stage of the reconstruction on one frame, with its knobs: difference
|
| 61 |
image, gradient field, integrated depth, surface.</p>
|