AN-002 · Embedded & Robotics · In progress
Started Jul 2026
Shmoobot: a ballbot driven by feel
1.0Abstract
The Shmoobot is the Microdynamic Systems Laboratory’s ballbot: a robot that balances on a single ball and, until this summer, could only be driven with a physical controller. I built a PyQt GUI wired into the ROS 1 nodes it runs on, adding keyboard and mouse control, and then a teleoperation mode that drives it from the lab’s maglev haptic device with force feedback, so the operator’s hand gets information back from the robot instead of only sending commands to it.
At a glance
| Parameter | Value |
|---|---|
| Status | In progress |
| When and where | Summer 2026, Microdynamic Systems Laboratory, Carnegie Mellon |
| My part | Undergraduate researcher: the GUI and the teleoperation mode |
| Built with | ROS 1, PyQt; the lab’s 6-DOF maglev haptic device as the controller |
| Before | Driven only with a physical controller |
| After | Keyboard and mouse from a PyQt GUI, or the haptic device with force feedback |
| On show | Robotics & AI Discovery Day, Carnegie Mellon, Sep 16 2026 |
The robot
A ballbot balances on a single ball, so the loop that keeps it upright is also the loop that moves it. The Shmoobot is the lab’s, and until this summer it took commands only from a physical controller. As with the haptics write-up, the robot belongs to the lab: the pictures show it in the room and in the demo, not its internals.
A GUI over ROS 1
I built a PyQt GUI wired into the ROS 1 nodes the Shmoobot runs on, adding keyboard and mouse control where the robot previously accepted only a physical controller.
Driving it by feel
Then the fun part: a teleoperation mode that drives the ballbot from the lab’s maglev haptic device, with force feedback, so the operator’s hand gets information back from the robot instead of only sending commands to it. The device, and the controller I built for it, have their own page: maglev haptic controller.
What’s next
Demoing and presenting the Shmoobot at CMU’s Robotics & AI Discovery Day on September 16.