Balancing a ball on a plate with a Franka Panda
The task Our team from KAIRA was invited to the Europe Embodied hackathon, where we picked the robotic arm challenge. The goal was to build a vision-to-robot pipeline that can balance a ball on top of a plate. It’s a classic double integrator problem that doesn’t rely on AI. The pipeline Perception — RealSense D405 overhead → ArUco plate localization → HSV ball detection → homography to plate coords (u,v), rim normalized to 1.0. State estimation — constant-velocity Kalman filter; outlier gating + velocity for damping + latency lead (readout extrapolated forward along velocity to cancel camera delay). Calibration — Kabsch for camera→robot extrinsic; automatic axis-map (tilt→roll) so no manual sign tuning. (see Challenge 1) Control — PD/PID on the ball error → desired tilt (θx, θy) → absolute pose level_pose · R_tilt streamed to a Cartesian-impedance node. (see Challenge 2) Safety — tilt clamp, slew limit, lost-ball re-level, return-to-level on exit. Challenge 1 — aligning the coordinate systems The ball position is measured in the image frame (u,v)and the robot tilts about its end-effector x/y. These differ by an unknown rotation + sign that changes any time the camera moves. Calibrating this map wasn’t easy. We tried doing it manually in the beginning, but switched to measurements later on: ...