After watching a short video from the 2020 Consumer Electronics Show (CES) showcasing Samsung's Ballie robot, Derek Lieber was inspired to create his own dual-hemispherical bot that could smoothly move around an area. His design utilizes two wheels, one on each side, that spin while having an internal pendulum maintain balance. After trying out several different kinds of motors, he eventually settled on gimbal motors rather than DC gearmotors or stepper motors due to their smooth motion and lack of a large deadzone.
The first thing Lieber created was the body for his robot, which he calls "Ballbot2". Its shell and most of its other components were fashioned from 3D-printed PLA plastic filament. Within the middle is a housing for weights at the bottom, while the top half contains the electronics. To each side of the central piece are two rings and hemispheres that spin to act as wheels and create motion.
Gimbal motors operate by sending a current through a stationary set of copper coils, called the stator, in order to cause the central shaft (the rotor) to begin spinning. Lieber used a pair of iPower GM5208-12 gimbal motors and drove them with several PWM signals that were first boosted from 5V to 12V with an LM6234 driver before being sent to the motors.
By placing an AS5048 magnetic rotation sensor just below the rotor's magnet, the orientation can be measured with four Hall effect sensors. Finally, this information is digitized and sent to the onboard controller over the I2C bus.
To determine when and where the robot should move, Lieber soldered together a simple shield containing the driver ICs, a 9DOF IMU from Pololu, and an XBee wireless transceiver, which was then placed on top of an Arduino Mega. The robot works by reading in commands from the XBee module and converting them into motor velocities. Next, the IMU is read and used to determine the current tilt so the robot can chase the desired angle, thus creating the desired motion. For more information on how the Mega uses the orientation of the magnetic field to control the motors, you can visit the SimpleFOCproject's page here.
He made a simple remote control from a joystick and an additional Xbee module, which is used to steer the robot.
In order to put the whole thing together, Lieber began by placing several lead weights in the lower compartment along with the battery pack. Next, the Arduino Mega and shield were stacked near the top on a mount while the two gimbal motors and their rotation sensor modules were screwed onto the two sides. Finally, an LED was added to the front so that users can see the current status, and the XBee transceiver was attached near the middle.
As seen in Lieber's demonstration video, his Ballbot2 runs quietly yet also smoothly while being able to traverse both carpeted and tiled surfaces. For more information and to download the design files/code, you can check out his blog post here.