Telescopic Prismatic, Not Just Revolute
Most arm tutorials assume a chain of revolute joints. Adding a long telescopic prismatic joint at the base changes two things: the Jacobian column for that joint is constant in direction but the moment arm to the end-effector grows with extension, and the inertia seen at the wrist depends on how far the prismatic is out.
Practically this means gravity compensation and impedance gains have to be parameterized by extension length. We compute them online from the URDF rather than hard-coding them for a single configuration.
Cartesian Impedance With ros2_control
We use a Cartesian impedance controller built on `ros2_control`. The controller maps a desired stiffness and damping in task space (translational and rotational) into joint torques via the Jacobian transpose. Translational stiffness is high along the surface tangent (so the wiper tracks a planned path) and low along the surface normal (so the wiper conforms to small irregularities).
For wiping motions specifically we add a small force regulation loop along the normal: a target contact force, a measured force from the wrist F/T sensor, and a slow integral term that keeps the wiper engaged without overshooting on liftoff.
Soft on Leather, Firm on Glass
The same wiper, the same arm, two very different materials. Leather wants low normal force and high tangential speed — too much force and you burnish the surface. Glass wants higher normal force and slower speed for a streak-free pass.
Gains come from the material lookup described in the segmentation post. The transition between gain sets is rate-limited so the arm doesn't spike force when the predicted class flickers at a material boundary like a leather-to-vinyl trim seam.
Vacuum to Wiper Mid-Cycle
Swapping tools changes the dynamic model: a vacuum head is heavy and offset; a microfiber wiper is light and compact. We re-publish the wrist payload to the controller after each tool change so impedance and gravity comp use the right model. Skipping that step shows up as a small but consistent gravity-driven drift after the first wipe — exactly the kind of bug that takes longer to diagnose than to fix.
URDF, SRDF, and MoveIt 2 Patterns
The URDF carries the prismatic-extension-aware inertias. The SRDF defines a small set of named configurations (stowed, transit, cabin-entry, A-pillar approach) that MoveIt 2 uses as planning targets. Most cleaning motions are not free-space MoveIt plans at all — they are short Cartesian paths under the impedance controller — but the named configurations are how the system gets in and out of the cabin safely.
See the controller config
Visit handybot.ai →Cereal on the floor mat, lipstick on the headliner, sand in the seat tracks. The recurring debris patterns from real cabins, and how we are building toward them.