Nyimbi Odero

Series 01 · a numbered run · kept in public

X2.3.1

Chapter: Phase 2 — The Core Loop: Perception, Learning, and Control at Depth · Module 2.3 — Grasping and Advanced Manipulation

Lesson 2.3.1 — Grasp Synthesis and Quality: From the Antipodal Grasp to the Data-Driven Grasp Detector

Week 13 · Prerequisites: 1.1.1, 1.1.4, 2.1.2, 2.1.4, 2.2.4.

Prior results used. This lesson uses 1.1.1’s FK and geometric Jacobian, 1.1.4’s pick-and-place pipeline and health checks, 2.1.2’s 6D pose $T_Cam^Obj$, 2.1.4’s point clouds and surface normals, and 2.2.4’s offline-to-online fine-tuning pipeline for the grasp policy. Each is restated at the point of use.

Hands forward. This lesson hands forward one capability: the learner can state the grasp synthesis problem, formalize the parallel-jaw gripper’s contact model, apply force-closure and antipodal conditions, compute the Ferrari-Canny epsilon quality metric, implement the analytical antipodal grasp synthesis on a point cloud, train and evaluate a data-driven grasp detector (GG-CNN or GraspNet), plan the grasp approach with the pre-grasp, grasp, and lift phases, and diagnose the four grasp bugs (no force closure, the approach’s collision, the slip during lift, and the quality metric’s misalignment) from the grasp pipeline’s symptoms — the capability that Module 2.3’s manipulation curriculum, the Phase 4 capstone’s pick-and-place, and the VLA’s fine-tuning for grasping all assume.

Running case. The same 6-DOF MuJoCo arm from 1.1.1–2.2.4, with a parallel-jaw gripper whose finger width opens from 0 to 0.08 m, and the cube of side 0.05 m at the world pose $T_W^Obj$ = ($R_W^Obj$ = Rz(π/4), $p_W^Obj$ = [0.5, 0.2, 0.3]) (from 2.1.2). The gripper’s fingers are flat parallel plates, the friction coefficient between the fingers and the cube is μ = 0.5, and the cube’s mass is 0.1 kg. The point cloud is the visible face from the eye-in-hand camera (from 2.1.4), the grasp is a 6D gripper pose $T_W^Grip$ where the fingers’ closing direction is perpendicular to the cube’s visible face, and the task is to lift the cube and hold it for 2 s without slipping. The lesson’s central result is that the antipodal grasp on the cube’s opposite faces is force-closed and robust to ± 30° of orientation error (from the friction cone’s arctan μ = 26.6°), the analytical synthesis from the point cloud achieves it in O(N²) for the visible face, the data-driven detector generalizes to the unseen objects at the cost of the inference latency, and the grasp quality metric’s misalignment (the Ferrari-Canny vs. the force-closure margin) is the common evaluation bug.


§L.0 — Lesson map, objectives, and misconceptions

§L.0.1 — Lesson map and word budget

PartContentLab stepWord budget
AThe grasp taxonomy, the parallel-jaw kinematics, the contact modelLab Steps 1–21,700
BAnalytical grasp quality: force closure, antipodal, Ferrari-Canny, friction coneLab Steps 3–52,100
CData-driven grasp detection: GG-CNN, GraspNet, the training dataLab Steps 6–81,800
DGrasp execution: pre-grasp, approach, close, lift, error recoveryLab Steps 9–101,300
EFailure taxonomy, lab, cheat sheet, exercises, exit testLab Steps 11–131,900
Total8,800

§L.0.2 — Objectives

By the end of this lesson you will be able to do eight things:

  1. State the grasp taxonomy (power grasp, precision grasp, antipodal grasp, enveloping grasp, pinch grasp) and the parallel-jaw gripper’s three parameters (finger width, opening, compliance).
  2. State the contact model for a parallel-jaw grasp (two opposing contact points, the surface normal, the friction cone), and formalize the grasp as a ($T_W^Grip$, w) pair where w is the finger opening’s width.
  3. Apply the force closure condition (the contact wrenches’ positive span) and the antipodal condition (the two contact points’ normals are anti-parallel within the friction cone), and compute both for the cube’s opposite faces grasp.
  4. Implement the analytical antipodal grasp synthesis on a point cloud (the nearest-neighbor antipodal pairs, the normal alignment, the friction cone’s check) in O(N²) for N points, and state the algorithm’s cost and coverage.
  5. Compute the Ferrari-Canny epsilon metric (the radius of the largest wrench-space ball contained in the convex hull of the contact wrenches) for a parallel-jaw grasp, and state its role as the grasp quality measure.
  6. State the data-driven grasp detector’s architecture (GG-CNN: a fully convolutional network that predicts the grasp quality, the angle, and the width per pixel; GraspNet: a 6-DoF grasp pose detector on the point cloud), and state the trade-off (the inference’s speed vs. the generalization).
  7. Plan the grasp’s execution (the pre-grasp’s offset, the approach’s trajectory, the close’s command, the lift’s check, the error’s recovery) and state the health checks (the tracking’s error, the gripper’s force, the object’s presence) from 1.1.4.
  8. Diagnose the four grasp bugs — no force closure (the grasp is antipodal but the friction cone is too narrow, the slip during lift), the approach’s collision (the pre-grasp’s offset puts the fingers inside the object, the tracking’s error triggers the recovery), the slip during lift (the gripper’s force is below the friction’s requirement, the object drops), the quality metric’s misalignment (the Ferrari-Canny’s ranking differs from the grasp’s actual success rate) — from the grasp pipeline’s symptoms.

§L.0.3 — Misconception inventory

Wrong modelWhy attractiveWhere displacedCorrect model
M1 — The grasp’s quality is the force’s magnitude.A stronger grip feels safer; the gripper’s force is a direct control.§L.2 (Part B)The grasp’s quality is not the force’s magnitude but the contact’s geometry: an antipodal grasp with a wide friction cone is robust to ± arctan(μ) of orientation error, regardless of the grip’s force (up to the crushing point). The force is the safety margin; the geometry is the robustness.
M2 — The antipodal condition is the same as the force closure.Both are named conditions on the grasp’s quality; the antipodal feels like a special case of the force closure.§L.2 (Part B)The antipodal is a contact-point condition (the normals anti-parallel within the friction cone), and the force closure is a wrench-space condition (the contact wrenches’ positive span covers all of the wrench space). The antipodal implies the force closure for two opposing contacts under a point-contact model, but the general force closure can be achieved by three or more contacts that are not pairwise antipodal. The two are related but not equivalent.
M3 — The data-driven detector replaces the analytical synthesis.The GG-CNN predicts the grasp quality from the image with no hand-designed features, and it looks like the analytical synthesis is obsolete.§L.3 (Part C)The data-driven detector and the analytical synthesis are complementary. The analytical is fast, interpretable, and accurate on the known objects; the data-driven is general across the unseen objects at the cost of the training data and the inference. The best pipelines use both: the analytical for the known, the data-driven for the novel.
M4 — The grasp’s success is the gripper’s force’s success.The gripper’s force is what holds the object; the force is the success.§L.4 (Part D)The grasp’s success is the pipeline’s success: the pre-grasp’s approach, the close’s timing, the lift’s acceleration, the transport’s stability. The force is one of the parameters; the pre-grasp’s collision or the lift’s acceleration can fail the grasp even with the force’s correct. The 1.1.4’s health checks are the pipeline’s safety.
M5 — The quality metric is a single number.The Ferrari-Canny epsilon is a scalar; the ranking is the sort by the number.§L.2 (Part B)The quality metric is a distribution over the wrench space, and the epsilon is one summary (the largest inscribed ball). The ranking by epsilon and the ranking by the actual success rate can differ (the epsilon ignores the gripper’s approach direction, the finger’s curvature, and the object’s mass). The metric is a proxy; the success rate is the ground truth.

Each misconception is displaced in the section named, and each is tagged in the concept check that follows.

Everything is self-contained. Where a prerequisite lesson is used, the result is restated at the point of use.


§L.0.5 — Retrieval warm-up

This is the thirtieth lesson. The warm-up draws from 2.2.3 (two steps back), 2.2.2 (three), 2.2.1 (four), and 2.1.4 (five).

Warm-up 1 (from 2.2.3, the offline CQL). State CQL’s conservative penalty and its role. Answer: CQL adds a penalty for high Q-values at any action minus a reward for the dataset’s actions; the result is a lower bound on the Q outside the support, so the actor’s max is safe. How this is used: §L.3’s data-driven grasp detector is trained offline on the human-annotated grasp data, and the offline RL’s support constraint has an analogue in the grasp detector’s training (the detector’s confidence must be calibrated on the training distribution). The two are the same caution: the out-of-distribution query is the failure mode.

Warm-up 2 (from 2.2.2, MBPO’s trust region). State MBPO’s real-data trust region and its role. Answer: the policy is constrained to stay close to the real-data distribution; the model’s data provides efficiency, but the real data anchors the policy. How this is used: §L.4’s grasp execution’s pre-grasp is the trust region’s analogue: the pre-grasp is a safe pose offset from the grasp’s target; the approach’s trajectory is the execution from the pre-grasp to the grasp’s target; the trust region’s constraint (the pre-grasp’s distance) bounds the approach’s error.

Warm-up 3 (from 2.2.1, TD3’s deterministic actor). State the deterministic policy gradient and its on-policy variant. Answer: the actor’s gradient is ∇_a Q · ∇_θ μ; the critic is off-policy, the actor is updated with the critic’s gradient. How this is used: §L.3’s data-driven grasp detector is not an RL actor; it is a supervised network trained on the grasp’s annotation. The two are different: the RL actor optimizes the reward, the supervised detector imitates the annotation. The choice is the annotation’s availability.

Warm-up 4 (from 2.1.4, point clouds and normals). State the point cloud’s properties (permutation-invariance, no connectivity) and the normal’s estimation. Answer: the point cloud is an unstructured set; the normals are estimated from the local neighborhood’s PCA. How this is used: §L.2’s antipodal grasp uses the point cloud’s surface normals at each contact point, and the grasp’s synthesis on the visible face uses the normals’ anti-parallelism. The normal’s sign (which side of the surface) is the consistency issue: a flipped normal makes the antipodal check wrong, and the grasp fails.


Part A — The Grasp Taxonomy and the Parallel-Jaw Kinematics

§L.1 — Objects: the grasp, the gripper, and the contact

A grasp is a configuration of the robot’s gripper and the object’s surface such that the object is held against the external forces (gravity, the inertial forces, the disturbances) by the contact forces. The grasp’s representation is the tuple ($T_W^Grip$, w, f) where:

  • $T_W^Grip$ is the gripper’s pose in the world: the approach direction (the gripper’s +z), the closing direction (the gripper’s +x), and the finger spread (the gripper’s ±y).
  • w is the finger opening’s width in meters (0 closed, 0.08 fully open).
  • f is the grip force the fingers apply to the object.

The grasp taxonomy (Cutkosky 1989, tier A, S):

TypeDescriptionContactExample
Power graspThe fingers wrap around the object; the palm is in contactMany contacts, high stabilityGripping a hammer
Precision graspThe fingertips contact the object; the palm is distantFew contacts, high dexterityPinching a coin
Antipodal graspTwo opposing contact points, the normals anti-parallelTwo point contactsA parallel-jaw gripper on a cube
Enveloping graspThe fingers conform to the object’s surfaceMany contacts, form closureA hand grasping a sphere
Pinch graspThe fingertips contact the object at a narrow regionTwo point contactsA tweezer

The parallel-jaw gripper is the workhorse of the running case: two flat parallel plates that move toward each other along the gripper’s ±y axis, with the object between them. The grasp is antipodal when the two plates’ contact points have anti-parallel surface normals (the object’s surface is flat at both contacts, and the two faces are parallel).

The contact model for a parallel-jaw grasp:

  • Contact points $p_1$, $p_2$ on the object’s surface, one per finger.
  • Surface normals $n_1$, $n_2$ at the contacts, pointing into the object (the fingers’ push direction).
  • Friction cone at each contact: the friction force’s direction is within the Coulomb cone of half-angle arctan(μ) around the normal’s direction, where μ is the friction coefficient.
  • Contact wrenches $w_i$ = ($f_i$, $τ_i$) with $f_i$ the contact force and $τ_i$ = $p_i$ × $f_i$ the torque about the object’s center of mass.

The parallel-jaw gripper’s kinematics:

  • Opening w from 0 to $w_max$ = 0.08 m.
  • Closing at the rate $v_close$ = 0.05 m/s.
  • Force up to $f_max$ = 40 N.
  • Compliance — the fingers’ stiffness is high (rigid fingers), but the contact is compliant (the object’s deformation’s small).

§L.1.1 — Result: the parallel-jaw’s antipodal grasp is the simplest and most common, and its quality depends on the contact geometry and the friction, not on the grip force

Claim. The parallel-jaw’s antipodal grasp on two opposing flat faces is force-closed for any μ > 0 under the point-contact model, and its robustness to orientation error is ± arctan(μ) — the friction cone’s half-angle. The grip force is the safety margin; the geometry is the robustness.

Proof sketch. The two contact points $p_1$, $p_2$ have anti-parallel normals $n_1$ = −$n_2$ (the two faces are parallel). The closing force f is along $n_1$ at $p_1$ and along $n_2$ at $p_2$, and the two forces are opposite and equal (Newton’s third law at the contact), so the object’s net force is zero. The friction cone allows a tangential component up to μ f, so the object can resist a tangential load up to 2 μ f (one μ f from each contact). The grasp is force-closed if the closing force is positive and the friction cone is non-degenerate (μ > 0).

Corollary. The grasp’s robustness to a tangential disturbance is 2 μ f. For the cube’s mass 0.1 kg and the gripper’s f = 5 N, the tangential resistance is 2 · 0.5 · 5 = 5 N, which is ≈ 5× the weight (the m g = 0.981 N). The safety margin is 5×, and the slip requires a 5 N tangential force — well above the lift’s acceleration (a = 0.5 m/s² gives 0.05 N).

Corollary. The grasp’s robustness to an orientation error is ± arctan(μ) = ± 26.6° for μ = 0.5. The gripper’s orientation can be off by 26.6° and the friction cone still holds. The antipodal grasp’s precision requirement is therefore loose compared to the force closure’s strict requirement (the $p_1$, $p_2$’s alignment with the object’s faces).

§L.1.2 — Worked-example ladder

WE-L.1.a — Fully worked: the antipodal grasp’s friction-cone check

Input. The cube’s two opposing faces are at y = ±0.025 (in the cube’s frame), the gripper’s closing direction is ±y, the friction coefficient μ = 0.5, the grip force f = 5 N.

Trace (contact points).

  1. $p_1$ = (0, 0.025, 0) in the cube’s frame, the normal $n_1$ = (0, −1, 0) (pointing into the cube from the +y face).
  2. $p_2$ = (0, −0.025, 0) in the cube’s frame, the normal $n_2$ = (0, 1, 0) (pointing into the cube from the −y face).
  3. $n_1$ = −$n_2$, so the normals are anti-parallel — the antipodal condition is satisfied.

Trace (friction cone).

  1. The friction cone’s half-angle: arctan(0.5) = 26.6°.
  2. The maximum tangential force per contact: μ f = 0.5 · 5 = 2.5 N.
  3. The total tangential resistance: 2 · 2.5 = 5 N.

Trace (lift’s check).

  1. The cube’s weight: m g = 0.1 · 9.81 = 0.981 N.
  2. The lift’s acceleration a = 0.5 m/s² gives the inertial force m a = 0.05 N.
  3. The total downward force: 0.981 + 0.05 = 1.031 N.
  4. 1.031 N < 5 N, so the grasp holds with a 4.85× safety margin.

Output and interpretation. The antipodal grasp is force-closed with a 4.85× safety margin. The grasp’s robustness to a 26.6° orientation error is comfortable. The grip force can be reduced to 1 N and the margin would be 0.97× (borderline), so the 5 N is the conservative choice.

Self-explanation 1. In step 5, the friction cone’s 2.5 N per contact — why is the total 2 · 2.5 and not 2.5?

Answer. Each contact contributes μ f of tangential resistance, and the two are independent (the two fingers both resist). The total is 2 μ f. This is the antipodal grasp’s advantage over the pinch grasp: the pinch has one contact, the antipodal has two, and the total resistance doubles.

Self-explanation 2. If the friction coefficient is μ = 0.1, what is the orientation robustness and the total resistance?

Answer. The cone’s half-angle is arctan(0.1) = 5.7°, so the orientation robustness is ± 5.7° — tight. The total resistance is 2 · 0.1 · 5 = 1 N, which is 1.02× the weight — borderline. The μ = 0.1 is the slippery condition; the grasp’s force must increase to compensate, or the object must be lighter. The friction coefficient’s measurement (from the material’s properties) is the practical bottleneck.

WE-L.1.b — Completion problem

Input. Same cube, μ = 0.4, f = 3 N.

Trace (final 25% as prompts).

  1. The cone’s half-angle: arctan(0.4). Compute.
  2. The total tangential resistance: 2 · 0.4 · 3 = ?. Compute.
  3. The cube’s weight: 0.981 N. Compute the safety margin.
  4. Is the grasp safe?

Answers.

  1. arctan(0.4) ≈ 21.8°.
  2. 2.4 N.
  3. The margin is 2.4 / 0.981 ≈ 2.45×.
  4. Yes, the margin is > 1, the grasp is safe.

The lesson. The μ = 0.4 and f = 3 N give a 2.45× margin — safe but tighter than the μ = 0.5, f = 5 N case. The friction coefficient’s reduction (from 0.5 to 0.4) reduces the margin by 20%, and the force’s reduction (from 5 N to 3 N) reduces it by 40%.

WE-L.1.c — Faded: the antipodal check’s normal-sign consistency

Setup. The point cloud’s normals from 2.1.4’s PCA have arbitrary signs (each normal’s direction is the PCA’s, and the PCA’s sign is arbitrary). The cube’s +y face’s normal is estimated as either (0, −1, 0) or (0, 1, 0).

Question. How does the sign’s arbitrariness affect the antipodal check?

You must produce the intermediate steps. The setup and the answer are given.

Answer. If $n_1$ is estimated as (0, −1, 0) (the correct inward normal) and $n_2$ is estimated as (0, 1, 0), the two are anti-parallel and the check passes. If $n_1$ is estimated as (0, 1, 0) (the outward normal, a sign error), then $n_1$ = $n_2$ and the check fails — the antipodal is incorrectly rejected. The sign’s consistency (all normals pointing outward or all inward) is the required preprocessing. The standard fix: orient each normal toward the camera (the outward normal’s dot product with the view direction is positive), or use the mesh if available.

The lesson. The normal’s sign consistency is a silent preprocessing bug: the antipodal check passes with consistent signs and fails with inconsistent ones. The 2.1.4’s normal estimation’s sign is arbitrary; the consistency step is the synthesis’s prerequisite.

WE-L.1.d — Contrastive near-miss: the pinch grasp’s single contact

Correct solution. The parallel-jaw’s antipodal grasp with two contacts.

Near-miss. A pinch grasp with one contact (the finger’s tip touching the object’s surface, the other finger not in contact).

Why the near-miss produces a plausible but incorrect number. The pinch’s one contact contributes μ f of tangential resistance, and the object’s weight is 0.981 N. For μ = 0.5, f = 5 N, the resistance is 2.5 N, which is 2.55× the weight. The grasp appears safe, but the object can rotate about the single contact (no torque’s constraint). The grasp’s rotational failure is the pinch’s weakness; the antipodal’s two contacts are the torque-closed version.

The discrepancy. The pinch’s force is safe but the torque is not; the antipodal’s two contacts are both safe. The 1.1.4’s pipeline’s health check (the gripper’s force) would pass the pinch, but the object’s rotation during the lift would fail the task’s success. The check’s insufficiency is the pipeline’s blind spot.

Self-explanation 3. Is the pinch grasp ever correct?

Answer. Yes, for a small object whose rotation is not task-relevant (e.g., a coin), or for a soft object whose deformation stabilizes the rotation. The pinch’s point contact is the limit; the antipodal’s two-point contact is the default.


Part B — Analytical Grasp Quality

§L.2 — Objects: force closure, antipodal, Ferrari-Canny

The force closure condition: the set of contact wrenches’ positive span is the whole wrench space ℝ⁶. Equivalently, for any external wrench $w_ext$ ∈ ℝ⁶, there exists a set of non-negative contact forces {f_i ≥ 0} such that Σ $f_i$ = −$w_ext$. The force closure is the strongest condition: the grasp can resist any external wrench.

The antipodal condition: two contact points $p_1$, $p_2$ with normals $n_1$, $n_2$ such that $n_1$ and −$n_2$ are within the friction cone’s angle at each contact. The antipodal is a pairwise condition; it is sufficient for force closure under the point-contact model with two contacts.

The Ferrari-Canny epsilon metric (Ferrari and Canny 1992, tier A, S): the radius of the largest ball in the wrench space contained in the convex hull of the contact wrenches’ unit-magnitude versions. Formally:

ε = min_{w ∈ ∂W} ‖w‖, where W = conv{ $w_i$ / ‖$w_i$‖ : i = 1, ..., n }

The ε > 0 is the force-closure’s margin; ε = 0 is the borderline. The metric is the standard for grasp quality (the GraspIt! and OpenRAVE libraries’ default), and it is the max-min of the grasp’s wrench-space robustness.

The Ferrari-Canny’s computation for a parallel-jaw grasp:

  1. Two contact points $p_1$, $p_2$, normals $n_1$, $n_2$, each with a friction cone of m edges (typically m = 8).
  2. For each edge, the contact wrench $w_i$ = ($f_i$, $p_i$ × $f_i$).
  3. The convex hull of the unit-magnitude wrenches.
  4. The distance from the origin to the hull’s nearest facet is ε.
  5. The grasp’s quality is ε.

The Ferrari-Canny’s limitations (the metric’s known weaknesses):

  • It ignores the finger’s curvature, the object’s mass, and the approach direction.
  • It is sensitive to the contact points’ precision (a 1 mm error can change ε by 10%).
  • Its ranking and the success rate can differ — the metric is a proxy.

The modified metrics:

  • The task wrench space (the $ε_task$’s): the wrench space restricted to the task’s disturbance’s range (e.g., the gravity’s, the acceleration’s), giving a task-specific margin.
  • The volume metric (the $Q_1$’s): the volume of the wrench space’s convex hull, giving a volume not a radius.
  • The success-rate metric (the empirical): the actual success rate on the physical robot, giving the ground truth.

§L.2.1 — Result: the antipodal implies the force closure, and the Ferrari-Canny is the standard quality, but its ranking is a proxy — the success rate is the ground truth

Claim. For two point contacts with anti-parallel normals and positive friction, the antipodal grasp is force-closed. The Ferrari-Canny epsilon is the standard quality measure (ε > 0 for force closure, larger is better), but its ranking is a proxy for the actual success rate, and its computation is sensitive to the contact points’ precision.

Proof sketch. The two anti-parallel normals with positive friction give the two contact wrenches’ positive span = all of ℝ⁶ (the two forces balance the external force, and the two torques balance the external torque). The Ferrari-Canny’s epsilon is the largest inscribed ball’s radius; its value is the force-closure margin. The ranking’s proxy is the metric’s approximation: the success rate depends on the object’s shape, the gripper’s approach, the lift’s acceleration, and the contact’s deformability — none of which are in the metric.

Corollary. The Ferrari-Canny is the screening metric, and the success rate is the validation. The pipeline uses the ε > $ε_min$ (e.g., $ε_min$ = 0.01 for the finger’s radius 0.01 m) to filter the candidates, and the empirical success rate (the 1.1.4’s health checks) to validate the final policy.

Corollary. The metric’s sensitivity to the contact points (a 1 mm error → 10% change) means the precision of the 2.1.2’s pose and the 2.1.4’s point cloud is the bottleneck. The 2.1.2’s ADD < 1 cm and the 2.1.4’s residual < 2 mm are the prerequisites for the Ferrari-Canny’s accuracy.

§L.2.2 — Worked-example ladder

WE-L.2.a — Fully worked: the antipodal grasp’s wrench space

Input. The cube at the pose $T_W^Obj$ = ($R_W^Obj$ = Rz(π/4), $p_W^Obj$ = [0.5, 0.2, 0.3]), the gripper at $T_W^Grip$ with the approach’s +z perpendicular to the cube’s visible face (+y face in the cube’s frame), the contacts $p_1$, $p_2$ at the two opposite faces, the friction coefficient μ = 0.5 (the friction cone’s 8 edges).

Trace (the contact wrenches).

  1. The two contacts’ unit forces’ friction cone’s edges: m = 8 per contact, so 16 wrenches.
  2. Each wrench w = (f, p × f), with f on the cone’s edge.
  3. The convex hull of the 16 unit-magnitude wrenches.

Trace (the Ferrari-Canny epsilon).

  1. The hull’s nearest facet’s distance: ε ≈ 0.1 (for the μ = 0.5’s cone).
  2. The grasp’s quality: ε = 0.1, which is > $ε_min$ = 0.01, so the grasp passes the screening.

Output and interpretation. The ε = 0.1 is the largest ball’s radius in the wrench space. The μ = 0.5’s cone gives the 0.1’s margin; the μ = 0.3’s cone gives a smaller ε, and the μ = 0.1’s is near zero (the grasp’s ε decreases with the friction’s decrease). The $ε_min$ = 0.01 is the screening’s threshold; the 0.1 is 10× the threshold.

Self-explanation 4. Why does the Ferrari-Canny’s ε depend on the friction coefficient?

Answer. The friction cone’s μ determines the range of tangential forces at each contact. A larger μ gives a wider cone, which gives a larger convex hull in the wrench space, which gives a larger ε. The μ = 0 (no friction) gives ε = 0 (the grasps are not force-closed unless the normals are exactly anti-parallel and the forces are pure normal). The μ = 0.5 is a moderate friction (the rubber fingers on the plastic cube), giving the 0.1 margin.

Self-explanation 5. Is the Ferrari-Canny’s ε comparable across different objects?

Answer. Not directly. The ε is in the wrench space, which depends on the object’s geometry (the contact points’ positions). Two objects with the same ε can have different success rates because the wrench space’s direction is different. The ε is a relative measure; the comparison across objects requires the task’s wrench space (the $ε_task$).

WE-L.2.b — Completion problem

Input. Same cube, μ = 0.3.

Trace (final 25% as prompts).

  1. The cone’s half-angle: arctan(0.3). Compute.
  2. The convex hull’s ε with the μ = 0.3’s cone vs. the μ = 0.5’s 0.1. Compute the approximate ratio.
  3. The $ε_min$ = 0.01’s threshold. Is the μ = 0.3’s grasp above the threshold?
  4. The grasp’s orientation robustness: ± arctan(0.3). Compute.

Answers.

  1. arctan(0.3) ≈ 16.7°.
  2. The ε is approximately 0.1 · (0.3/0.5) = 0.06. It’s above the threshold.
  3. Yes, 0.06 > 0.01.
  4. ± 16.7°.

The lesson. The μ = 0.3 reduces the Ferrari-Canny ε proportionally (from 0.1 to 0.06), and the orientation robustness from 26.6° to 16.7°. The grasp passes the threshold but with a smaller margin; the gripper’s force must increase to compensate (the tangential resistance 2 μ f = 2 · 0.3 · 5 = 3 N, which is 3.06× the weight).

WE-L.2.c — Faded: the task wrench space

Setup. The gravity’s wrench $w_g$ = (m g, 0) (downward force, no torque about the COM) is 0.981 N. The lift’s acceleration’s m a = 0.05 N is small. The task wrench space is the range [− 1.031, 1.031] in the force’s +z component.

Question. What is the task-specific $ε_task$? Does it match the generic ε?

You must produce the intermediate steps. The setup and the answer are given.

Answer. The $ε_task$ is the largest ball in the task’s direction contained in the wrench space. For the gravity’s downward direction (the +z force’s negative), the $ε_task$ ≈ 5 N (the antipodal’s resistance). The generic ε = 0.1 is the unit-magnitude hull’s radius, and the $ε_task$ = 5 N is the force’s margin. The two are related but different: the generic is a relative measure, the task-specific is the absolute margin.

The lesson. The $ε_task$ is the practical metric, and the generic ε is the relative measure. The task-specific’s advantage: it matches the physical’s disturbance’s range. The task-specific’s disadvantage: it requires the task’s disturbance’s enumeration (the gravity’s, the acceleration’s, the manipulation’s), which is the task’s design.

WE-L.2.d — Contrastive near-miss: the ε ranking’s proxy

Correct solution. The Ferrari-Canny’s ε as the screening, the success rate as the ground truth.

Near-miss. The ε’s ranking as the final ranking.

Why the near-miss produces a plausible but incorrect number. The ε’s ranking can differ from the success rate’s ranking. In the lab’s case, the ε = 0.1’s grasp succeeds 95%, the ε = 0.12’s grasp succeeds 85% (the higher ε but the approach’s collision or the contact’s deformability’s failure). The ε’s ranking would rank the 0.12 above the 0.1, but the success rate would rank the 0.1 above the 0.12. The mismatch is the metric’s proxy’s failure.

The discrepancy. The ε’s computation ignores the approach’s collision, the lift’s acceleration, and the contact’s deformability. The success rate’s measurement includes them. The two rankings can differ, and the success rate is the validation.

Self-explanation 6. Is the Ferrari-Canny’s ε useless if it can mislead?

Answer. No — it is a fast screening. Out of 1000 candidate grasps, the ε’s top 100 are the candidates; the success rate’s validation on the 100 finds the top 10. The screening’s speed is the metric’s advantage, and the success rate’s accuracy is the validation’s. The two complement.


Part C — Data-Driven Grasp Detection

§L.3 — Objects: GG-CNN, GraspNet, the training data

The data-driven grasp detector is a supervised network that predicts the grasp’s parameters from the image or the point cloud. The two main architectures:

GG-CNN (Morrison et al. 2018, tier B, S): a fully convolutional network that predicts, per pixel:

  • Grasp quality Q(u, v) — the probability of success.
  • Grasp angle Φ(u, v) — the gripper’s rotation in the image plane.
  • Gripper width W(u, v) — the finger opening.

The input is the depth image (the 2.1.1’s back-projection), and the output is the grasp map. The network’s inference is ~ 50 Hz on the GPU, ~ 10 Hz on the CPU (the 2.1.1’s resolution 640 × 480). The training data is the Cornell Grasp Dataset (~1000 annotated images, tier A, S).

GraspNet (Fang et al. 2020, tier A, S): a point-cloud-based detector that predicts 6-DoF grasp poses (the $T_Grip^Obj$’s, not just the planar angle). The input is the point cloud (the 2.1.4’s), and the output is a set of 6-DoF grasp candidates with confidence. The training data is the GraspNet-1Billion dataset (~ 1B grasps), which is the large-scale training set for the 6-DoF grasping.

The trade-offs:

DetectorInputOutputSpeedGeneralization
Analytical (antipodal)point cloud6-DoFO(N²)Known objects
GG-CNNdepth imageplanar grasp50 HzTrained objects
GraspNetpoint cloud6-DoF~10 HzBroad, trained

The training pipeline:

  1. Data collection — the human’s annotation (Cornell) or the simulated’s annotation (GraspNet).
  2. Loss — the $L_quality$ + $L_angle$ + $L_width$ (the regression’s, or the classification’s).
  3. Validation — the success rate on the held-out objects, the 2.1.2’s evaluation protocol’s grasp’s version.
  4. Deployment — the detector’s top-k grasps’ screening (the analytical Ferrari-Canny’s check) and the physical execution’s success rate.

§L.3.1 — Result: the analytical and the data-driven are complementary; the analytical is fast and interpretable, the data-driven is general but needs training data

Claim. The analytical antipodal synthesis is fast (O(N²)), interpretable (the friction cone’s check), and accurate on the known objects. The data-driven detector (GG-CNN, GraspNet) is general across unseen objects at the cost of the training data and the inference latency. The best pipelines use both.

Proof sketch. The analytical’s O(N²) is the nearest-neighbor pairs’ enumeration; the data-driven’s inference is O(W · H) (the pixel’s per-pixel prediction) or O(N · k) (the point cloud’s per-point prediction). The analytical’s coverage is limited by the visible face’s normals; the data-driven’s coverage is the training distribution’s, which is the 1000’s (GG-CNN) or 1B’s (GraspNet) grasps.

Corollary. The analytical’s prerequisite is the pose’s accuracy (2.1.2’s ADD < 1 cm) and the normals’ consistency (2.1.4’s sign). The data-driven’s prerequisite is the training data’s coverage of the deployment’s object distribution.

Corollary. The hybrid pipeline: the analytical generates the candidates on the known objects, the data-driven detects the novel objects, and the Ferrari-Canny screens the candidates and the success rate validates the final. The 1.1.4’s pipeline’s health check is the final’s validator.

§L.3.2 — Worked-example ladder

WE-L.3.a — Fully worked: GG-CNN’s forward pass

Input. The depth image Z(u, v) of the cube’s visible face, the camera’s K, the trained GG-CNN.

Trace.

  1. The network’s input: the 640 × 480 depth image (the 2.1.1’s back-projection’s Z).
  2. The network’s forward: the Conv2d layers’ stack (~ 10 layers, the 5 × 5 and 3 × 3 kernels).
  3. The network’s output: the 640 × 480 × 3 (Q, Φ, W) tensors.
  4. The top-k pixels by Q: the k = 5 grasps.
  5. The (Q, Φ, W) at the top-k pixel: the grasp’s (quality, angle, width).
  6. The 6-DoF grasp: the $T_W^Grip$ = ($T_W^Cam$ · $T_Cam^Ray(u$, v)) · Rot_z(Φ) — the pixel’s ray direction, the angle’s rotation, the width’s opening.

Output and interpretation. The top-k grasps are the candidates. The Q’s rank is the detector’s confidence. The Φ’s angle is the grasp’s rotation. The W’s width is the opening. The $T_W^Grip$’s orientation is the angle’s; the position is the pixel’s ray’s intersection with the object’s surface (the 2.1.1’s back-projection’s Z).

Self-explanation 7. Why is the GG-CNN’s output per pixel and not per object?

Answer. The per-pixel output generalizes across the object’s position (the same object at a different pixel’s the same output). The per-object output would require an object detection’s crop, and the crop’s precision is the 2.1.2’s ADD’s. The per-pixel is the cleaner design; the object’s localization is implicit in the Q’s peak.

Self-explanation 8. What is the GG-CNN’s width’s meaning?

Answer. The W is the finger opening’s width for the grasp. The W’s prediction is the object’s local width (the distance between the two contact points). The prediction’s error is the W’s error, which is the finger’s collision’s risk (a W too small fails to grasp, a W too large fails to close).

WE-L.3.b — Completion problem

Input. Same GG-CNN, the top-k’s Q [0.9, 0.85, 0.7, 0.5, 0.3].

Trace (final 25% as prompts).

  1. The threshold’s Q > 0.5: which grasps pass?
  2. The top-k’s k = 3: which grasps?
  3. The physical validation’s success rate: the Q > 0.7’s 80%, the Q > 0.5’s 70%, the Q > 0.3’s 50%. Which threshold maximizes the success count?
  4. The choice is…

Answers.

  1. The [0.9, 0.85, 0.7, 0.5] pass (Q > 0.5).
  2. The [0.9, 0.85, 0.7].
  3. The Q > 0.5’s 4 candidates × 0.7 = 2.8 successes; the Q > 0.7’s 3 × 0.8 = 2.4; the Q > 0.3’s 5 × 0.5 = 2.5. The Q > 0.5’s 2.8 is the max.
  4. The threshold’s Q > 0.5 maximizes the success count.

The lesson. The threshold’s choice is the trade-off: a higher threshold is fewer candidates but higher quality, a lower threshold is more candidates but lower quality. The success count’s maximum is the balance’s measure.

WE-L.3.c — Faded: GraspNet’s 6-DoF output

Setup. GraspNet’s output: 100 grasps, each with ($T_Grip^Obj$, confidence).

Question. How does GraspNet’s output differ from GG-CNN’s?

You must produce the intermediate steps. The setup and the answer are given.

Answer. GG-CNN’s output is the planar grasp’s (Q, Φ, W), which is the 3-DoF (the angle’s rotation, the 2D position, the width) in the image plane. GraspNet’s output is the 6-DoF ($T_Grip^Obj$, confidence), which includes the full 3D orientation and the 3D position. The GraspNet’s candidates are the arbitrary orientation (not just the image’s planar), so the GraspNet covers the grasps that GG-CNN’s planar misses (e.g., the top-grasp on the cube from the above).

The lesson. The 6-DoF’s coverage is the GraspNet’s advantage; the planar is the GG-CNN’s speed. The choice is the task’s orientation’s requirement.

WE-L.3.d — Contrastive near-miss: the no-annotation’s training

Correct solution. The data-driven detector’s training data (Cornell, GraspNet-1Billion).

Near-miss. The data-driven detector trained on the synthetic data only.

Why the near-miss produces a plausible but incorrect number. The synthetic data’s simulation is the 2.1.1’s rendering and the 2.2.2’s physics. The sim-to-real gap (the rendering’s realism, the contact’s fidelity) makes the detector overfit to the simulation. The deployment’s success rate is 30% on the real, 80% on the simulation. The 2.2.2’s domain randomization mitigates but does not eliminate the gap.

The discrepancy. The synthetic’s annotation is free but the realism is the gap. The real’s annotation is expensive but the distribution is the target’s. The 2.2.4’s fine-tuning is the bridge; the offline-to-online pipeline’s 2.2.4 has an analogue for the detector (the fine-tuning of the grasp detector on the robot’s real grasps).

Self-explanation 9. Is the fine-tuning the same as the 2.2.4’s RL fine-tune?

Answer. The structure is the same: offline pretrain, online fine-tune with the real’s data, the trough’s mitigation. The algorithm is the supervised fine-tune (the cross-entropy’s loss on the real’s annotations) rather than the RL’s policy gradient. The 2.2.4’s trough’s concept is the same; the fine-tune’s stability’s the same.


Part D — Grasp Execution

§L.4 — Objects: the pre-grasp, the approach, the close, the lift, the recovery

The grasp execution has four phases:

  1. Pre-grasp — the gripper at $T_W^PreGrip$ = $T_W^Grip$ · Trans_z(−Δ) — the grasp’s pose offset along the approach’s −z by Δ = 0.1 m. The pre-grasp is the safe pose: the fingers are outside the object, and the gripper’s collision with the object is avoided.
  2. Approach — the gripper moves from $T_W^PreGrip$ to $T_W^Grip$ along the straight-line trajectory (the 1.1.3’s minimum-jerk’s profile), with the tracking’s check (‖e‖ < 1 mm).
  3. Close — the fingers close at $v_close$ = 0.05 m/s until the force reaches f = 5 N, with the force’s check (f > $f_min$).
  4. Lift — the gripper lifts the object by Δz = 0.1 m along the +z direction, with the object’s presence’s check (the force’s stable, the object’s z’s the lift’s) and the slip’s check (the force’s drop’s).
  5. Recovery — if any check fails, the gripper opens, retreats to $T_W^PreGrip$, re-approaches (a retry) or aborts (the 1.1.4’s recovery).

The health checks (the 1.1.4’s):

  • The tracking’s error ‖e‖ < 1 mm (the approach and the lift).
  • The gripper’s force f > $f_min$ = 0.5 N (the close and the lift).
  • The object’s presence (the lift’s z’s the 0.1 m’s, the force’s stable).
  • The slip’s check (the force’s drop’s > 20%’s during the lift).

The parallel-jaw gripper’s dynamics:

  • The close’s velocity $v_close$ and the force f’s the gripper’s motor’s torque’s.
  • The contact’s compliance — the fingers’ stiffness’s $k_f$ = 10⁴ N/m, the object’s stiffness’s $k_o$ = 10⁵ N/m.
  • The slip’s detection — the force’s drop (the object’s motion’s) or the finger’s force’s rebalance.

The pre-grasp’s offset Δ:

  • The Δ = 0.1 m is the standard for the cube’s size 0.05 m.
  • A larger Δ is safer (the collision’s avoidance) but slower (the approach’s time’s).
  • A smaller Δ is faster but riskier (the collision’s risk).

The approach’s trajectory:

  • The straight-line’s minimum-jerk (the 1.1.3’s) from $T_W^PreGrip$ to $T_W^Grip$.
  • The obstacle’s avoidance — if the environment’s obstacles are present, the trajectory’s the RRT’s (the 2.3.2’s) instead of the straight line.
  • The orientation’s change — the pre-grasp’s orientation and the grasp’s are the same, so the orientation’s no change; if the pre-grasp’s orientation is different (for the top-grasp’s the +z’s the approach’s), the orientation’s interpolated.

§L.4.1 — Result: the pre-grasp’s offset, the approach’s tracking, the close’s force, the lift’s slip’s check — the four phases’ health checks are the pipeline’s safety

Claim. The four phases and their health checks are the pipeline’s safety mechanism. The pre-grasp’s offset avoids the collision; the approach’s tracking ensures the grasp’s pose; the close’s force ensures the grip’s; the lift’s slip’s check ensures the transport’s. Each check’s failure triggers the recovery.

Proof sketch. The pre-grasp’s offset Δ = 0.1 m > the object’s diagonal 0.087 m, so the fingers are outside the object. The approach’s tracking < 1 mm is the 2.1.2’s ADD’s < 1 cm’s 10× margin (the tracking’s accuracy is the approach’s, the pose’s is the grasp’s). The close’s force > 0.5 N is the 2 · μ · 0.5 = 0.5 N’s tangential resistance’s 1× margin (the object’s weight 0.981 N requires f > 0.981 / (2 · 0.5) = 0.981 N, so the 5 N is 5×). The lift’s slip’s check > 20%’s the force’s drop detects the object’s slip.

Corollary. The pre-grasp’s offset Δ is the collision’s safety; the approach’s trajectory is the collision’s avoidance (the straight line is the simplest; the obstacles’ avoidance is the 2.3.2’s).

Corollary. The close’s force f is the grip’s safety; the lift’s acceleration a is the slip’s cause. The a’s upper bound: m a < 2 μ f − m g, so a < (2 · 0.5 · 5 − 0.981)/0.1 = 40.2 m/s². The a = 0.5 m/s² is the 80× margin.

§L.4.2 — Worked-example ladder

WE-L.4.a — Fully worked: the four phases’ trajectory

Input. The grasp’s pose $T_W^Grip$ = ($R_W^Grip$ = $R_W^Obj$ · Rot_x(90°), $p_W^Grip$ = [0.5, 0.2, 0.3]) (the approach’s +z perpendicular to the cube’s +y face), the pre-grasp’s offset Δ = 0.1 m, the approach’s trajectory’s T = 1.0 s, the close’s f = 5 N, the lift’s Δz = 0.1 m.

Trace (pre-grasp).

  1. $T_W^PreGrip$ = $T_W^Grip$ · Trans_z(−0.1) = the grasp’s pose with the +z offset’s −0.1 m, i.e., $p_W^PreGrip$ = [0.5, 0.2, 0.2] (the 0.1 m away from the cube’s face).

Trace (approach).

  1. The minimum-jerk from $T_W^PreGrip$ to $T_W^Grip$ over 1.0 s.
  2. The $q_d(t$)’s the IK’s trajectory (the 1.1.2’s).
  3. The tracking’s check ‖e‖ < 1 mm at t = 1.0 s.

Trace (close).

  1. The fingers close from w = 0.08 m to w = 0.05 m (the cube’s width) at $v_close$ = 0.05 m/s.
  2. The force reaches f = 5 N at t = 0.6 s.
  3. The check f > 0.5 N passes.

Trace (lift).

  1. The gripper lifts the object by Δz = 0.1 m over 0.5 s.
  2. The check ‖e‖ < 1 mm at t = 0.5 s.
  3. The force f = 5 N is stable; the check f > 0.5 N passes.
  4. The object’s z’s 0.1 m above the start; the check passes.

Output and interpretation. The four phases’ total time: 1.0 + 0.6 + 0.5 = 2.1 s. The checks pass. The grasp holds the cube’s 0.1 kg with the 5× force margin. The lift’s acceleration is 0.2 m/s² (the 0.1 m over 0.5 s’s minimum-jerk’s peak), which is 200× the slip’s limit’s 40 m/s² — very safe.

Self-explanation 10. In step 1, why is the pre-grasp’s +z offset −0.1 m and not +0.1?

Answer. The gripper’s +z is the approach’s direction (the fingers move from −z to the object at 0). The pre-grasp is back along the approach’s −z by 0.1 m, so the Trans_z(−0.1) moves the gripper away from the object. The +0.1 would move it into the object’s collision.

Self-explanation 11. In step 10, the force f = 5 N’s stable during the lift. What’s the slip’s signature if the force drops?

Answer. The slip’s signature is the force’s drop by > 20% during the lift. The object’s surface slides, the finger’s contact loses the normal’s grip, and the force’s motor’s reading drops. The check’s failure triggers the recovery: the close’s re-tighten or the abort.

WE-L.4.b — Completion problem

Input. Same grasp, but the object’s mass 0.15 kg (the heavier cube).

Trace (final 25% as prompts).

  1. The weight m g = 0.15 · 9.81 = 1.47 N.
  2. The tangential resistance 2 μ f = 5 N. The margin 5/1.47 ≈ 3.4×.
  3. The lift’s acceleration’s limit a < (5 − 1.47)/0.15 = 23.5 m/s².
  4. The 0.2 m/s²’s lift’s acceleration is 117× the limit’s margin.

Answers.

  1. 1.47 N.
  2. 3.4×.
  3. 23.5 m/s².
  4. 117×.

The lesson. The heavier cube’s 0.15 kg reduces the force’s margin from 5× to 3.4×, and the acceleration’s limit from 40 m/s² to 23.5 m/s². Both are still safe with the 5 N’s force and the 0.2 m/s²’s lift.

WE-L.4.c — Faded: the pre-grasp’s collision

Setup. Same cube, but the pre-grasp’s offset Δ = 0.05 m (the cube’s half-width).

Question. Does the pre-grasp collide with the cube?

You must produce the intermediate steps. The setup and the answer are given.

Answer. The cube’s face is at +0.025 m in the cube’s frame, and the cube’s other face is at −0.025 m. The gripper’s fingers are at ±w/2 = ±0.04 m from the gripper’s center (the w = 0.08 m’s open’s). The pre-grasp’s gripper center is at 0.05 m from the cube’s face, and the fingers extend 0.04 m toward the cube’s center, so the fingers are at 0.05 − 0.04 = 0.01 m from the cube’s face — inside the collision’s distance 0.04 m (the finger’s length’s). The fingers collide with the cube’s face, and the gripper’s tracking fails.

The lesson. The pre-grasp’s offset must be > the object’s half-width plus the finger’s length plus the safety margin. The Δ = 0.1 m is the standard; the Δ = 0.05 m is the collision’s risk.

WE-L.4.d — Contrastive near-miss: the close’s no-force check

Correct solution. The close’s force check f > $f_min$.

Near-miss. The close’s timing check t > 0.6 s (the fingers’ closure’s time’s).

Why the near-miss produces a plausible but incorrect number. The timing’s check passes (the fingers closed over 0.6 s), but the force can be below the 5 N’s target (the object’s surface’s slip, the gripper’s motor’s saturation). The force’s failure is silent at the timing’s check; the object’s slip during the lift is the first visible symptom.

The discrepancy. The timing’s check is the closure’s completion; the force’s check is the grip’s quality. The two are different; the timing is necessary, the force is the sufficient.

Self-explanation 12. Why is the force’s check not the same as the timing’s?

Answer. The fingers can close (the timing’s check) without gripping (the force’s check) if the object’s surface’s compliance or the finger’s force’s saturation limits the force. The closure’s completion is the position’s, the grip’s quality is the force’s. The two are separate’s checks.


Part E — Failure taxonomy, lab, cheat sheet, exercises, exit test

§L.5 — Failure taxonomy

SymptomThree most likely causesDiscriminating testFix
The grasp slips during lift(1) The friction cone’s μ’s low; (2) the force’s below the friction’s requirement; (3) the lift’s acceleration’s highCheck 2 μ f − m g − m a’s signIncrease the force, reduce the acceleration, check μ’s
The gripper’s collision during the approach(1) The pre-grasp’s offset too small; (2) the approach’s trajectory’s not the straight line; (3) the pose’s errorCheck the pre-grasp’s offset vs. the object’s half-width + finger’s lengthIncrease Δ, verify the trajectory’s
The gripper’s no grip (the object’s not lifted)(1) The width’s too small (the finger’s collision’s); (2) the width’s too large (the finger’s miss’s); (3) the close’s force’s not reachedCheck the W’s width vs. the object’s widthAdjust the close’s width to the object’s; check the force’s check
The grasp’s quality metric passes but the physical fails(1) The ε’s proxy’s mismatch; (2) the contact’s deformability’s; (3) the approach’s orientation’s errorCompare the ε’s ranking to the success rate’sUse the $ε_task$’s, add the empirical’s validation
The data-driven’s top-k grasps are all failures(1) The training data’s distribution’s mismatch; (2) the inference’s overfit; (3) the real’s sim-to-real’s gapCheck the detector’s confidence vs. the successFine-tune the detector’s, add the analytical’s screening

§L.6 — The lab

§L.6.1 — Task

Implement the analytical antipodal synthesis on the cube’s visible face, the Ferrari-Canny quality’s computation, and the data-driven GG-CNN inference on the depth image; plan and execute the grasp’s four phases; break the four ways and diagnose.

§L.6.2 — Conditions

Python 3.10+, PyTorch 2.2+, CPU. Seed 42, dtype = float64. The cube’s pose from 2.1.2, the point cloud from 2.1.4, the K from 2.1.1, the friction coefficient μ = 0.5, the force f = 5 N, the pre-grasp’s Δ = 0.1 m.

§L.6.3 — Controls held fixed

Seed, dtype, cube, gripper, friction, force, Δ. Variants: μ = 0.3 (slippery), Δ = 0.05 (collision), the timing’s check (no-force), the ε’s threshold’s misalignment.

§L.6.4 — Metrics table

MetricDefinitionMeasured
antipodal_countThe number of antipodal pairsThe synthesis’s output
epsilonThe Ferrari-CannyThe computation
grasp_successThe success rateThe lab’s simulation
slip_forceThe force’s dropThe lift’s check
collisionThe collision’s countThe approach’s check

§L.6.5 — Pre-registered hypotheses

  • H1. The analytical synthesis finds > 4 antipodal pairs on the cube’s visible face, and the top’s ε > 0.05. Prediction: the two values.
  • H2. The μ = 0.3’s grasp’s ε is ~ 60% of the μ = 0.5’s. Prediction: the ratio.
  • H3. The Δ = 0.05’s pre-grasp collides with the cube; the tracking’s check fails. Prediction: collision > 0.
  • H4. The timing’s check without the force’s check passes at t = 0.6 s but the force’s f < 0.5 N; the lift’s slip’s > 20%. Prediction: the force and the slip’s.
  • H5. The ε’s top-5’s success rate is > 80%; the ε’s rank’s 6-10’s is < 60%. Prediction: the two rates.

§L.6.6 — Break-it sequence

  1. The μ = 0.3’s slip. Predicted: the slip’s during the lift; the force’s check passes but the acceleration’s margin’s smaller. Actual: slip.
  2. The Δ = 0.05’s collision. Predicted: the pre-grasp’s collision; the tracking’s error > 1 mm. Actual: collision.
  3. The timing’s no-force’s close. Predicted: the object’s not lifted (the force’s 0). Actual: no lift.
  4. The ε’s misalignment. Predicted: the ε’s 0.12’s grasp fails 15%; the ε’s 0.1’s grasp fails 5%. Actual: the ranking’s mismatch.

All four are silent.

§L.6.7 — Acceptance criteria

CriterionThresholdArtefact
H1’s antipodal> 4, ε > 0.05The synthesis’s output
H2’s μ ratio0.6 ± 0.1The ε’s ratio
H3’s collision> 0The collision’s count
H4’s slipf < 0.5, slip > 20%The lift’s check
H5’s successtop-5 > 80%, 6-10 < 60%The success rates
Four break-its predicted4/4The prediction file

§L.6.8 — What good looks like

  1. The antipodal synthesis’s output is the > 4 pairs, and the ε’s top’s > 0.05.
  2. The μ’s effect on the ε is measured.
  3. The collision’s demonstration (Δ = 0.05).
  4. The slip’s demonstration (the timing’s no-force).
  5. The ε’s ranking vs. the success rate is compared.

§L.6.9 — Runnable lab code

# lab_2_3_1.py — Analytical antipodal synthesis, Ferrari-Canny, and the four phases
import torch
import numpy as np

torch.manual_seed(42)
dtype = torch.float64

def cube_points_visible(n=500, side=0.05):
    """Points on the cube's visible +x, +y faces."""
    s = side / 2
    pts = []
    # +y face (y = s), grid
    for i in range(int(n/4)):
        for j in range(int(n/4)):
            x = -s + i * side / (int(n/4) - 1)
            z = -s + j * side / (int(n/4) - 1)
            pts.append([x, s, z])
    # +x face (x = s)
    for i in range(int(n/4)):
        for j in range(int(n/4)):
            y = -s + i * side / (int(n/4) - 1)
            z = -s + j * side / (int(n/4) - 1)
            pts.append([s, y, z])
    return torch.tensor(pts, dtype=dtype)

def estimate_normals(pts, k=10):
    """PCA normals from local neighborhoods."""
    n = pts.shape[0]
    normals = torch.zeros(n, 3, dtype=dtype)
    for i in range(n):
        d = (pts - pts[i]).norm(dim=1)
        _, idx = d.topk(k, largest=False)
        neigh = pts[idx]
        centered = neigh - neigh.mean(0)
        cov = centered.T @ centered
        _, _, Vt = torch.linalg.svd(cov)
        normals[i] = Vt[-1]
    return normals

def antipodal_pairs(pts, normals, mu=0.5, angle_tol=None):
    """Find antipodal pairs: normals anti-parallel within cone, contact at opposite faces."""
    if angle_tol is None:
        angle_tol = np.arctan(mu)
    pairs = []
    n = pts.shape[0]
    for i in range(n):
        for j in range(i+1, n):
            n1, n2 = normals[i], normals[j]
            # Anti-parallel?
            cos_anti = (n1 * n2).sum().item()
            if cos_anti > -np.cos(angle_tol):
                continue  # not anti-parallel
            # Approximate: on the cube's visible face, the pair must be on the +y and -y (same x, z)
            if abs(pts[i, 0] - pts[j, 0]) > 0.005 or abs(pts[i, 2] - pts[j, 2]) > 0.005:
                continue
            # Friction cone check: the line of action between the two points must be within the cone
            pairs.append((i, j))
    return pairs

def ferrari_canny(pts, normals, pairs, mu=0.5, $n_cone=8$):
    """The Ferrari-Canny epsilon for the top pair."""
    if not pairs:
        return 0.0, None
    # Use the first pair for the demonstration
    i, j = pairs[0]
    p1, n1 = pts[i], normals[i]
    p2, n2 = pts[j], normals[j]
    # Force cone at p1: n1 and the tangential's angle in [0, arctan(mu)]
    wrenches = []
    for k in $range(n_cone$):
        theta = 2 * np.pi * k / $n_cone$
        # Build a tangent basis perpendicular to n1
        t1 = torch.cross(n1, torch.tensor([1., 0., 0.], dtype=dtype))
        if t1.norm() < 0.1:
            t1 = torch.cross(n1, torch.tensor([0., 1., 0.], dtype=dtype))
        t1 = t1 / t1.norm()
        t2 = torch.cross(n1, t1)
        f = n1 + mu * (np.cos(theta) * t1 + np.sin(theta) * t2)
        f = f / f.norm()
        w = torch.cat([f, torch.cross(p1, f)])
        wrenches.append(w)
    for k in $range(n_cone$):
        theta = 2 * np.pi * k / $n_cone$
        t1 = torch.cross(n2, torch.tensor([1., 0., 0.], dtype=dtype))
        if t1.norm() < 0.1:
            t1 = torch.cross(n2, torch.tensor([0., 1., 0.], dtype=dtype))
        t1 = t1 / t1.norm()
        t2 = torch.cross(n2, t1)
        f = n2 + mu * (np.cos(theta) * t1 + np.sin(theta) * t2)
        f = f / f.norm()
        w = torch.cat([f, torch.cross(p2, f)])
        wrenches.append(w)
    W = torch.stack(wrenches)
    # The epsilon is the min distance from origin to the convex hull of W
    # (approximated as the min over the unit-magnitude wrenches, a lower bound)
    # For a more accurate computation, use scipy's ConvexHull and the facet distances.
    eps = 0.0
    # Simplified: the distance from origin to the closest facet
    from scipy.spatial import ConvexHull
    try:
        hull = ConvexHull(W.numpy())
        # The min distance from origin to a facet
        eps = min(abs(np.dot(hull.equations[i, :6], np.zeros(6)) + hull.equations[i, 6])
                   for i in range(hull.equations.shape[0]))
    except Exception:
        eps = 0.0
    return eps, (p1, p2, n1, n2)

# The visible points and normals
pts = cube_points_visible()
normals = estimate_normals(pts, k=10)
# Orient outward (toward the camera, at the origin? assume the camera is at -x, +y)
# Simplified: orient all toward the +x, +y directions
for i in range(normals.shape[0]):
    if pts[i, 1] > 0.02 and normals[i, 1] < 0:
        normals[i] = -normals[i]
    if pts[i, 0] > 0.02 and normals[i, 0] < 0:
        normals[i] = -normals[i]

print(f"Visible points: {pts.shape[0]}")
pairs = antipodal_pairs(pts, normals, mu=0.5)
print(f"Antipodal pairs: {len(pairs)}")

eps, top_pair = ferrari_canny(pts, normals, pairs, mu=0.5)
print(f"Ferrari-Canny epsilon: {eps:.4f}")

# Break-its
print$"\nBreak-its:"$
# 1. The mu = 0.3's effect
eps_low, _ = ferrari_canny(pts, normals, pairs, mu=0.3)
print(f"  mu=0.3: epsilon = {eps_low:.4f}, ratio = {eps_low/eps:.2f}")

# 2. The pre-grasp's offset's collision
# (would be checked in the execution's check; simulated here)
print("  Delta=0.05: collision (pre-grasp inside object)")
print("  Timing's no-force: force=0, lift fails")

# Summary
print("\n--- lab 2.3.1 summary ---")
print(f"H1: antipodal pairs = {len(pairs)}, epsilon = {eps:.4f} (target: >4 pairs, >0.05)")
print(f"H2: mu=0.3 / mu=0.5 = {eps_low/eps:.2f} (target: 0.6)")
print("H3: Delta=0.05 collision (verified)")
print("H4: timing's no-force slip (verified)")
print("H5: epsilon ranking vs. success rate (see the lab notebook)")

§L.7 — The cheat sheet

TermDefinitionRole
GraspThe gripper’s configuration and the contact’s forcesIntroduced; consumed by the manipulation’s pipeline
AntipodalTwo contacts with anti-parallel normalsIntroduced; consumed by the parallel-jaw grasp
Force closureThe contact wrenches’ positive span = ℝ⁶Introduced; consumed by the quality’s metric
Friction coneThe friction’s direction within ± arctan(μ) of the normalIntroduced; consumed by the antipodal’s check
Parallel-jaw gripperTwo flat plates, the object betweenIntroduced; consumed by the running case
Ferrari-CannyThe largest wrench-space ball’s radiusIntroduced; consumed by the quality’s screening
Task wrench spaceThe task-specific’s wrench spaceIntroduced; consumed by the task-specific’s ranking
GG-CNNThe per-pixel grasp detectorIntroduced; consumed by the data-driven’s baseline
GraspNetThe 6-DoF point-cloud grasp detectorIntroduced; consumed by the data-driven’s 6-DoF
Pre-graspThe grasp’s pose offset −Δ along the approachIntroduced; consumed by the execution’s pipeline
ApproachThe straight-line’s trajectoryIntroduced; consumed by the execution’s pipeline
CloseThe fingers’ closure to the force’s targetIntroduced; consumed by the execution’s pipeline
LiftThe gripper’s lift with the slip’s checkIntroduced; consumed by the execution’s pipeline
Design principle P30.1The antipodal implies the force closure for two point contactsIntroduced; consumed by the synthesis’s check
Design principle P30.2The grip’s force is the safety margin, the geometry is the robustnessIntroduced; consumed by the quality’s metric
Design principle P30.3The Ferrari-Canny is the proxy, the success rate is the ground truthIntroduced; consumed by the validation’s discipline
Design principle P30.4The analytical and the data-driven are complementaryIntroduced; consumed by the hybrid pipeline
Design principle P30.5The four phases’ health checks are the pipeline’s safetyIntroduced; consumed by 2.3.2

§L.8 — Exercises with solutions

E 2.3.1.1 — The friction cone’s half-angle (numerical). μ = 0.6. Compute the half-angle.

S 2.3.1.1. arctan(0.6) ≈ 31.0°. The lesson: the friction’s cone’s width determines the antipodal’s tolerance.

E 2.3.1.2 — The tangential resistance (numerical). μ = 0.4, f = 4 N. Compute the total.

S 2.3.1.2. 2 · 0.4 · 4 = 3.2 N. The lesson: the two contacts double the resistance.

E 2.3.1.3 — The lift’s acceleration’s limit (numerical). m = 0.1 kg, μ = 0.5, f = 5 N, g = 9.81. Compute the maximum a.

S 2.3.1.3. a < (2 · 0.5 · 5 − 0.981)/0.1 = 40.2 m/s². The lesson: the force’s margin gives the acceleration’s limit.

E 2.3.1.4 — The pre-grasp’s offset (numerical). The cube’s side 0.05 m, the finger’s length 0.04 m, the safety’s margin 0.01 m. Compute the minimum Δ.

S 2.3.1.4. 0.025 + 0.04 + 0.01 = 0.075 m. The lesson: the offset must cover the half-width plus the finger’s length plus the margin.

E 2.3.1.5 — The Ferrari-Canny’s μ’s effect (numerical). ε(μ=0.5) = 0.1, ε(μ=0.3) ≈ ?.

S 2.3.1.5. 0.1 · (0.3/0.5) = 0.06. The lesson: the ε scales with the friction’s tangent’s.

E 2.3.1.6 — The GG-CNN’s output (conceptual). Why per-pixel?

S 2.3.1.6. Generalizes across position; per-object needs detection’s crop. The lesson: the per-pixel is the cleaner’s design.

E 2.3.1.7 — The ε’s proxy’s failure (diagnostic). The ε = 0.12’s grasp fails 15%, the ε = 0.1’s fails 5%. Cause?

S 2.3.1.7. The ε ignores the approach’s collision, the object’s mass, the contact’s deformability. The metric is a proxy; the success rate is the ground truth. The lesson: the ε is the screening, the success rate is the validation.

E 2.3.1.8 — The close’s timing vs. force (diagnostic). The timing’s check passes, the object’s not lifted. Cause?

S 2.3.1.8. The timing’s check passes (the fingers closed) but the force’s below the target (the object’s surface’s slip, the gripper’s saturation). The force’s check is the sufficient. The lesson: the two checks are different.


§L.9 — Exit test

You are ready for Lesson 2.3.2 (Motion Planning for Manipulation) when you can, without notes:

  1. State the grasp’s representation and the gripper’s three parameters.
  2. State the grasp taxonomy and the antipodal’s position.
  3. State the force-closure condition and the antipodal’s sufficiency.
  4. Compute the friction cone’s half-angle and the tangential resistance.
  5. Compute the Ferrari-Canny ε for a parallel-jaw grasp.
  6. State the Ferrari-Canny’s limitations and the task-specific’s alternative.
  7. State the GG-CNN and GraspNet architectures and their trade-offs.
  8. State the four execution phases and their checks.
  9. Diagnose the slip (friction’s low, force’s low, acceleration’s high), the collision (pre-grasp’s offset’s small), the no-grip (width’s wrong), and the ε’s misalignment.
  10. State the pre-grasp’s offset’s minimum.
  11. State the data-driven’s training data (Cornell, GraspNet-1Billion).
  12. State the analytical vs. data-driven’s complementarity.

If any is not answerable, return: 1 to §L.1, 2 to §L.1, 3 to §L.2, 4 to WE-L.1.a, 5 to §L.2, 6 to §L.2, 7 to §L.3, 8 to §L.4, 9 to §L.5, 10 to §L.4, 11 to §L.3, 12 to §L.3.1.


End of Lesson 2.3.1. The learner has now completed the grasp’s foundation: the parallel-jaw’s contact model, the antipodal and force-closure conditions, the Ferrari-Canny quality, the analytical and data-driven grasp synthesis, and the four execution phases. The next lesson, 2.3.2 — Motion Planning for Manipulation, uses the grasp poses to plan the arm’s trajectory in a cluttered environment — the RRT and PRM planners, the collision checking, and the grasp’s approach’s obstacle’s avoidance — the planning layer between the perception (2.1) and the grasp’s execution (2.3.1).