Building a juggling robot is hard. It isn’t clear what the threshold is here, but a good goal is to make a robot which can juggle five balls with two hands and relies on sensory input to correct for errors in throws instead of just hyper precision.
There’s an attempt to do this which involves some heroic engineering. This is great work and I hope it succeeds but isn’t the mechanical approach I would take, which I’ll now give. This is based off almost no actual experience with robotics on my part, and gives no guidance on how to detect ball position or the software stack used to control everything, so take it with an appropriate grain of salt.
First of all there’s the question of what to juggle. There are specially made juggling balls which have the properties that they’re nicely round and all the same size and weight and also are ‘dead’, meaning they don’t bounce much when they land. This alleviates the need to cradle the balls as they come down and allows them to simply plop into the hands. This is clearly within the ground rules and is the obvious place to start. Making a robot which can juggle apples without bruising them is much more difficult.
Next up is the mechanism for moving the hands around. This should be done with a CoreXY mechanism. This allows the hand to move within as large an area as efficiently as possible. Hand motion is mostly about being able to catch balls which come down as errantly as possible.
The hands themselves are responsible for catching the balls and flicking them upwards. The shape we’ll use for them is an inverted cone pointed directly upwards with the bottom part rounded out to a diameter a bit bigger than the balls. This maximizes how well it traps balls and makes it so when balls are flicked upwards it’s pushing directly off the frame.
For flicking the balls upwards we’ll use pneumatics. Specifically we’ll have a motor controlling pressure and a valve which can close off that pressure to the hand. The usual motion is the motor pulls the hand down then the valve closes holding the hand in place, after which the motor pressurizes the area under it. Finally the valve opens for the ‘wrist flick’ to throw the ball and the cycle starts over. This allows for a relatively weak motor and gives a lot of control over the strength of the throw with very little weight on the part which is being moved around.
(Unrelated to this, I think pneumatics should be used in interactive robotics a lot more. Using motors directly results in needing to adjust pressure by responding instantaneously to sensor input resulting in infinitesmal changes to position. While amazingly this has been gotten to work it’s much simpler to have motors controlling the pressure in pneumatic springs which is then conveyed via tubes to the actual thing which is moving. This has much less weight on the thing being moved, puts much less demand on the motors, and is much easier to make safe. Then again my experience with pneumatics is limited to researching their use in combat robots and pogo sticks, so maybe take my opinion with a grain of salt.)
To catch the balls the hand should be made to move so its center is exactly under the ball’s center from the time the bottom of the ball is at the same level as the top of the hand until the bottom of the ball hits the palm of the hand. There’s no explicit cradling of the ball after that, but the chances of the ball staying put are increased by maximizing how long the ball stays in the hand and doing a minimum of acceleration of the hand while it’s holding the ball, both of which are optimized by holding on to the ball as long as possible before throwing. The limiting factor on how late the ball can be thrown is when the hand needs to be in place to catch the next ball.
To throw the ball the hand should be made to move with the correct position, direction, and speed before the throw starts and the pressure should be set to the correct amount so when the valve opens completely the ball gets thrown to the correct height. Motion being relative allows the horizontal directly and speed to be set correctly even with the flick always being straight vertical. Juggling five balls is all about following a metronome so the height of the next throw should be set so it lands at the correct preset time regardless of what else is going on.
For the "hands" do you mean an upside-down conical frustum shape, basically a cup where the bottom diameter is a bit smaller than the ball and open so it kind of wedges itself into the bottom and seals itself for the pneumatic burst?