{"id":677,"date":"2025-08-24T18:07:46","date_gmt":"2025-08-24T22:07:46","guid":{"rendered":"https:\/\/tabeertariq.com\/?page_id=677"},"modified":"2025-08-25T22:12:06","modified_gmt":"2025-08-26T02:12:06","slug":"zengarden","status":"publish","type":"page","link":"https:\/\/tabeertariq.com\/?page_id=677","title":{"rendered":"ZenGarden"},"content":{"rendered":"\n<div style=\"height:39px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<blockquote class=\"wp-block-quote alignwide has-text-align-center is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Morphing topographies through robot paths<\/p>\n<\/blockquote>\n\n\n\n<div style=\"height:42px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Challenge<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote alignwide is-layout-flow wp-block-quote-is-layout-flow\">\n<p>I wanted a simple, convincing demo of code \u2192 motion \u2192 matter. The brief was to use an ABB robot to rake concentric patterns in sand, but not as a flat trace. The path should self-modulate: curve amplitude drives tool depth so ridges feel carved, not just skimmed. The work had to be fast to iterate, safe for the robot, and repeatable across different trays and patterns.<\/p>\n<\/blockquote>\n\n\n\n<div style=\"height:23px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image alignwide size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/DSC_0312-2-1024x683.jpg\" alt=\"\" class=\"wp-image-692\" srcset=\"https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/DSC_0312-2-1024x683.jpg 1024w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/DSC_0312-2-300x200.jpg 300w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/DSC_0312-2-768x512.jpg 768w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/DSC_0312-2-1536x1024.jpg 1536w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/DSC_0312-2-2048x1365.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div style=\"height:auto;width:414px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Process<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote alignwide is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>For the user<\/strong><br>Provide clean base curves inside the tray boundary. Keep them continuous, non-self-intersecting, and above a minimum radius. Choose an amplitude profile (uniform, gradient, or per-segment) and a maximum depth allowed for that sand setup.<\/p>\n\n\n\n<p><strong>For the creator<\/strong><br>Clamp z-step-downs to prevent plowing. Maintain a constant contact force proxy via speed and depth limits. Always include safe retracts between islands. Re-zero workobject and verify TCP before every new tray.<\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-style-default is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\"><em>Matrix<\/em><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Fixed tray footprint and boundary with consistent sand depth.<\/li>\n\n\n\n<li>End-effector tip radius chosen to avoid gouging.<\/li>\n\n\n\n<li>Safe z-range above the tray.<\/li>\n\n\n\n<li>Continuous toolpaths without self-intersections; minimum curve radius to prevent chatter; collision clearances to robot base and tray frame; feedrates capped to maintain surface quality; easy scaling to different pattern sizes; single setup with quick teach-points for workobject and TCP.<\/li>\n<\/ol>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\"><em>Features<\/em><\/h2>\n\n\n\n<p>Parametric pattern generator for concentric and composite curves; amplitude-to-depth mapping so high curvature or chosen \u201cloud\u201d segments cut deeper; lead-in\/lead-out moves to keep edges clean; multi-pass refinement where the final pass is shallow for finish; velocity and z-lift controls per segment; one-click regeneration for new seeds or tray sizes; dry-run simulation before sending code to the ABB controller.<\/p>\n<\/div>\n<\/div>\n\n\n\n<blockquote class=\"wp-block-quote alignwide is-layout-flow wp-block-quote-is-layout-flow\">\n<p>This stayed deliberately light. I prototyped in short loops: simulate \u2192 single pass on sand \u2192 adjust amplitude scaling, feed, and step-down \u2192 run again. The knobs that actually mattered (tip radius, max depth, finish pass speed) were promoted to the front of the graph as first-class controls.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><em>Design<\/em>:<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote alignwide is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Start with seed curves for the \u201cripples.\u201d Sample them at even arc length and build concentric offsets. Compute a scalar field along the path that represents amplitude; remap that scalar to z-depth with caps and smoothing. Insert lead-in\/out arcs and safe retracts, then split the toolpath into roughing and finishing passes. Simulate reach and singularities, preview normals and z-envelope, and export ABB-compatible code. Run a dry pass above the sand, then execute the program and tune depth\/velocity until the ridge fidelity reads well under raked light.<\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image alignright size-large is-resized\"><img decoding=\"async\" width=\"718\" height=\"718\" src=\"https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/ezgif.com-animated-gif-maker-7-1.gif\" alt=\"\" class=\"wp-image-684\" style=\"width:723px;height:auto\"\/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"864\" height=\"1024\" src=\"https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/IMG_9360-1-864x1024.jpg\" alt=\"\" class=\"wp-image-686\" style=\"width:613px;height:auto\" srcset=\"https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/IMG_9360-1-864x1024.jpg 864w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/IMG_9360-1-253x300.jpg 253w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/IMG_9360-1-768x910.jpg 768w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/IMG_9360-1-1296x1536.jpg 1296w, https:\/\/tabeertariq.com\/wp-content\/uploads\/2025\/08\/IMG_9360-1.jpg 1615w\" sizes=\"(max-width: 864px) 100vw, 864px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Solution<\/h2>\n\n\n\n<p>A meditative, variable-depth zen pattern carved by a 6-axis ABB arm with a simple cone tip. Depth thickens where the curve \u201cspeaks up,\u201d softens across transitions, and finishes with a slow, shallow polish pass. The result is crisp, layered topography that holds edge definition while keeping the tray edges clean.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Impact<\/h2>\n\n\n\n<p>This is a compact showcase of toolpath intelligence over a granular medium. The same framework generalizes to drawing, frosting, micro-raking for installations, or any process where path amplitude should modulate force or depth. It\u2019s also a classroom-friendly demo for kinematics, CAM logic, and material feedback with almost zero risk.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:47px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading alignwide has-text-align-center\">Key Tech Stack<\/h2>\n\n\n\n<div class=\"wp-block-buttons alignwide is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">Grasshopper for path generation and simulation<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">ABB industrial robot with calibrated TCP\/workobject<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">post-processed ABB-compatible code (RAPID)<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">geometric sampling<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">offsetting<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">curvature-aware remapping<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">safety<\/a><\/div>\n\n\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\">run-time tuning<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:48px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"height:34px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator alignwide has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Morphing topographies through robot paths Challenge I wanted a simple, convincing demo of code \u2192 motion \u2192 matter. The brief was to use an ABB robot to rake concentric patterns in sand, but not as a flat trace. The path should self-modulate: curve amplitude drives tool depth so ridges feel carved, not just skimmed. The [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":11,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-677","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/pages\/677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tabeertariq.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=677"}],"version-history":[{"count":16,"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/pages\/677\/revisions"}],"predecessor-version":[{"id":809,"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/pages\/677\/revisions\/809"}],"up":[{"embeddable":true,"href":"https:\/\/tabeertariq.com\/index.php?rest_route=\/wp\/v2\/pages\/11"}],"wp:attachment":[{"href":"https:\/\/tabeertariq.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}