Morphing topographies through robot paths
Challenge
I wanted a simple, convincing demo of code → motion → 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.

Process
For the user
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.For the creator
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.
Matrix
- Fixed tray footprint and boundary with consistent sand depth.
- End-effector tip radius chosen to avoid gouging.
- Safe z-range above the tray.
- 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.
Features
Parametric pattern generator for concentric and composite curves; amplitude-to-depth mapping so high curvature or chosen “loud” 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.
This stayed deliberately light. I prototyped in short loops: simulate → single pass on sand → adjust amplitude scaling, feed, and step-down → 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.
Design:
Start with seed curves for the “ripples.” 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.


Solution
A meditative, variable-depth zen pattern carved by a 6-axis ABB arm with a simple cone tip. Depth thickens where the curve “speaks up,” 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.
Impact
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’s also a classroom-friendly demo for kinematics, CAM logic, and material feedback with almost zero risk.