<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Motion Planning | Portfolio</title><link>https://lshivarudra.github.io/tag/motion-planning/</link><atom:link href="https://lshivarudra.github.io/tag/motion-planning/index.xml" rel="self" type="application/rss+xml"/><description>Motion Planning</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 27 Sep 2026 01:00:00 +0000</lastBuildDate><image><url>https://lshivarudra.github.io/media/icon_hu0b7a4cb9992c9ac0e91bd28ffd38dd00_9727_512x512_fill_lanczos_center_3.png</url><title>Motion Planning</title><link>https://lshivarudra.github.io/tag/motion-planning/</link></image><item><title>Leaf-Clip Pose Planning for Robotic Plant Sensing</title><link>https://lshivarudra.github.io/project/leafclipplanning/</link><pubDate>Sun, 27 Sep 2026 01:00:00 +0000</pubDate><guid>https://lshivarudra.github.io/project/leafclipplanning/</guid><description>
&lt;figure class="building-figure building-video">
&lt;video controls autoplay loop muted playsinline preload="metadata" width="2485" height="1322"
style="aspect-ratio: 2485 / 1322;"
poster="/project/leafclipplanning/leaf-clip-poses-poster.jpg" aria-label="Candidate leaf-clip placements">
&lt;source src="https://lshivarudra.github.io/project/leafclipplanning/leaf-clip-poses.webm" type="video/webm">
&lt;a href="https://lshivarudra.github.io/project/leafclipplanning/leaf-clip-poses.webm">Download the video&lt;/a>.
&lt;/video>
&lt;figcaption>Candidate clip placements visualized on a leaf mesh. Multiple alternatives are displayed together to inspect contact locations and clip orientation.&lt;/figcaption>
&lt;/figure>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Placing a measuring clip on a leaf requires more than reaching a point in space. The measuring aperture needs to sit on the leaf blade, the contacts need support, and the clip needs a clear path through surrounding foliage.&lt;/p>
&lt;p>My work combines &lt;strong>geometry-based leaf-clip pose planning&lt;/strong> with &lt;strong>cuRobo motion-planning demonstrations&lt;/strong>. The planner searches a leaf mesh, rejects mechanically unsuitable placements, and ranks the survivors. Heatmaps make it possible to inspect where good placements occur and why other regions are rejected. Alongside this, I implemented end-effector tracking on a robot model with payload and cuRobo integration on B2 in Isaac Sim.&lt;/p>
&lt;p>This project is funded by &lt;a href="https://www.phenorob.de/" target="_blank" rel="noopener">PhenoRob&lt;/a>.&lt;/p>
&lt;div class="project-facts" aria-label="Planner configuration">
&lt;div>&lt;strong>38&lt;/strong>&lt;span>orientations per candidate spot&lt;/span>&lt;/div>
&lt;div>&lt;strong>6&lt;/strong>&lt;span>mandatory geometric checks&lt;/span>&lt;/div>
&lt;div>&lt;strong>24 mm&lt;/strong>&lt;span>minimum spacing between selected sites&lt;/span>&lt;/div>
&lt;/div>
&lt;p>These settings define the current search. Its outputs are ranked candidate poses and diagnostic heatmaps; the cuRobo recordings show the accompanying robot motion work.&lt;/p>
&lt;h2 id="finding-valid-clip-poses">Finding valid clip poses&lt;/h2>
&lt;h3 id="1-filter-candidate-sites">1. Filter candidate sites&lt;/h3>
&lt;p>I first screen every vertex on the leaf mesh, before generating any clip poses. A candidate must satisfy all four conditions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Filter&lt;/th>
&lt;th>Requirement&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Surface edge margin&lt;/td>
&lt;td>At least &lt;strong>7 mm&lt;/strong> from the rim, measured along the leaf surface&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Organ mask&lt;/td>
&lt;td>Petiole and shoot regions excluded&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Local flatness&lt;/td>
&lt;td>Plane-fit RMS deviation below &lt;strong>0.3 mm&lt;/strong> over a &lt;strong>10 mm&lt;/strong> window&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Neighbor clearance&lt;/td>
&lt;td>At least &lt;strong>5 mm&lt;/strong> from neighboring organs&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>This removes unsuitable regions early. The later contact-support check applies a stricter &lt;strong>12 mm&lt;/strong> rim clearance to account for the modeled upper contact ring.&lt;/p>
&lt;h3 id="2-sample-both-leaf-faces">2. Sample both leaf faces&lt;/h3>
&lt;p>At each surviving site, I align the jaw-closing axis with the local surface normal and place the approach direction in the tangent plane. Sweeping yaw from &lt;strong>−90° to +90° in 10° steps&lt;/strong> gives 19 orientations per face, or &lt;strong>38 poses across both faces&lt;/strong>.&lt;/p>
&lt;p>Each pose stores a contact configuration and a pre-insertion configuration &lt;strong>30 mm&lt;/strong> back along the approach direction.&lt;/p>
&lt;h3 id="3-enforce-mechanical-constraints">3. Enforce mechanical constraints&lt;/h3>
&lt;p>A pose survives only if it passes all six checks:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Check&lt;/th>
&lt;th>What the planner requires&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Measuring aperture&lt;/td>
&lt;td>The full &lt;strong>10 mm diameter&lt;/strong> measuring window lies on the lamina, avoiding background in the aperture.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Contact support&lt;/td>
&lt;td>At least &lt;strong>98%&lt;/strong> support beneath the modeled upper and lower contacts, with &lt;strong>12 mm and 9 mm radii&lt;/strong>. The center must be at least &lt;strong>12 mm&lt;/strong> from the rim.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Attachment exclusion&lt;/td>
&lt;td>No stem, petiole, or midrib inside the contact footprint.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Jaw alignment&lt;/td>
&lt;td>Closing axis within &lt;strong>15°&lt;/strong> of the local surface normal.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Insertion clearance&lt;/td>
&lt;td>Approach line remains at least &lt;strong>5 mm&lt;/strong> from other organs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Swept-body collision&lt;/td>
&lt;td>Three solid boxes approximate the clip body and extend &lt;strong>30 mm&lt;/strong> along the approach sweep. Collision checks use zero margin against the target leaf, preserving the jaw gap, and &lt;strong>5 mm&lt;/strong> against other organs.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="4-rank-and-spread-out-the-results">4. Rank and spread out the results&lt;/h3>
&lt;p>Surviving poses receive a score, with lower values preferred. &lt;strong>Crowding&lt;/strong> penalizes clearance near the 5 mm limit, while &lt;strong>uncertainty&lt;/strong> penalizes sites near the curvature and edge limits. The trajectory-length term is currently the same &lt;strong>30 mm standoff&lt;/strong> for every pose, so it does not affect their order.&lt;/p>
&lt;p>The batch driver selects the best few poses with at least &lt;strong>24 mm between sites&lt;/strong>, producing spatially distinct alternatives.&lt;/p>
&lt;p>Four additional score terms—deformation energy, patch rotation, patch translation, and petiole moment—are defined but currently return zero. They depend on a deformable-leaf physics rollout that is not connected yet. &lt;strong>Current ranking is geometry only.&lt;/strong>&lt;/p>
&lt;h2 id="results-and-visualizations">Results and visualizations&lt;/h2>
&lt;h3 id="pose-quality-heatmaps">Pose-quality heatmaps&lt;/h3>
&lt;p>Each mesh vertex accumulates information from the pose search. I can visualize rejection reasons, the best score at each site, clearance, curvature, edge margin, and vote density weighted toward better poses.&lt;/p>
&lt;figure class="building-figure building-video">
&lt;video controls muted playsinline preload="metadata" width="2486" height="1316"
style="aspect-ratio: 2486 / 1316;"
poster="/project/leafclipplanning/grasp-heatmaps-poster.jpg" aria-label="Leaf-clip grasp-pose heatmaps">
&lt;source src="https://lshivarudra.github.io/project/leafclipplanning/grasp-heatmaps.webm" type="video/webm">
&lt;a href="https://lshivarudra.github.io/project/leafclipplanning/grasp-heatmaps.webm">Download the video&lt;/a>.
&lt;/video>
&lt;figcaption>The recording shows score-weighted candidate regions and a diagnostic rejection map for a leaf with no feasible pose.&lt;/figcaption>
&lt;/figure>
&lt;p>Together with the clip-placement view at the top, these visualizations help inspect both the search results and the physical placement implied by a candidate pose.&lt;/p>
&lt;h3 id="curobo-end-effector-tracking-with-a-payload-model">cuRobo end-effector tracking with a payload model&lt;/h3>
&lt;p>I also implemented cuRobo end-effector tracking on the robot model with its payload represented. This recording shows the robot and target-pose visualization used to inspect the tracking behavior.&lt;/p>
&lt;figure class="building-figure building-video">
&lt;video controls muted playsinline preload="metadata" width="2493" height="1326"
style="aspect-ratio: 2493 / 1326;"
poster="/project/leafclipplanning/curobo-payload-tracking-poster.jpg" aria-label="cuRobo end-effector tracking on a robot model with payload">
&lt;source src="https://lshivarudra.github.io/project/leafclipplanning/curobo-payload-tracking.webm" type="video/webm">
&lt;a href="https://lshivarudra.github.io/project/leafclipplanning/curobo-payload-tracking.webm">Download the video&lt;/a>.
&lt;/video>
&lt;figcaption>Model-based end-effector tracking with the payload represented in the robot scene.&lt;/figcaption>
&lt;/figure>
&lt;h3 id="b2-integration-in-isaac-sim">B2 integration in Isaac Sim&lt;/h3>
&lt;p>The simulation recording below shows cuRobo running with the B2 robot model in Isaac Sim. It provides a supporting view of the robot integration; the leaf-level geometry is easier to inspect in the dedicated planner visualizations above.&lt;/p>
&lt;figure class="building-figure building-video">
&lt;video controls muted playsinline preload="metadata" width="1280" height="672"
style="aspect-ratio: 1280 / 672;"
poster="/project/leafclipplanning/b2-isaac-sim-poster.jpg" aria-label="cuRobo integration on B2 in Isaac Sim">
&lt;source src="https://lshivarudra.github.io/project/leafclipplanning/b2-isaac-sim.mp4" type="video/mp4">
&lt;a href="https://lshivarudra.github.io/project/leafclipplanning/b2-isaac-sim.mp4">Download the video&lt;/a>.
&lt;/video>
&lt;figcaption>B2 and manipulator simulation in Isaac Sim. The recording is cropped to the simulation viewport to keep the robot visible.&lt;/figcaption>
&lt;/figure>
&lt;h2 id="hardware-dimensions-and-modeling-assumptions">Hardware dimensions and modeling assumptions&lt;/h2>
&lt;p>The model uses the MINI-PAM-II&amp;rsquo;s documented &lt;strong>10 mm measuring aperture&lt;/strong> and &lt;strong>170 × 57 × 80 mm overall envelope&lt;/strong>. Several other dimensions are planner assumptions and need validation against the physical clip:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Assumption&lt;/th>
&lt;th>Effect on the planner&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Contact radii of 12 mm and 9 mm&lt;/td>
&lt;td>These are modeled values. The upper contact requires a leaf blade at least &lt;strong>24 mm wide&lt;/strong>, rejecting narrower leaves.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Fixed 20 mm jaw opening&lt;/td>
&lt;td>The real support adjusts vertically for different leaf thicknesses; the model uses a fixed gap.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>7 mm initial edge margin&lt;/td>
&lt;td>A chosen planner parameter. It overrides a component-based margin calculation that sums to &lt;strong>13 mm&lt;/strong>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Three solid collision boxes&lt;/td>
&lt;td>A hand-built approximation of the clip body, rather than manufacturer CAD.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="next-steps">Next steps&lt;/h2>
&lt;p>I’m extending the workflow toward automated leaf measurements in agricultural environments, with two areas of focus:&lt;/p>
&lt;div class="project-roadmap">
&lt;section aria-labelledby="leaf-segmentation-roadmap">
&lt;span class="roadmap-label">Perception&lt;/span>
&lt;h3 id="leaf-segmentation-roadmap">Leaf instance segmentation&lt;/h3>
&lt;p>I’m developing a segmentation pipeline to identify individual leaves and provide targets for automated measurement.&lt;/p>
&lt;/section>
&lt;section aria-labelledby="hardware-roadmap">
&lt;span class="roadmap-label">Hardware&lt;/span>
&lt;h3 id="hardware-roadmap">B2 with a Z1 arm&lt;/h3>
&lt;p>I plan to implement the workflow on a physical B2 robot with a Z1 arm in an agricultural setting, combining partial autonomy with a human in the loop.&lt;/p>
&lt;/section>
&lt;/div></description></item></channel></rss>