Juggling Robot

This robot can juggle 7 balls and various juggling patterns by rolling balls on an inclined surface.

Similar projects worth following
Follow me on twitter:
Follow me on hackaday:

With the exception of one robot that (with some very expensive linear motors) can juggle 5 balls, juggling robots are mostly limited to juggling a basic 3 ball pattern. This project intends to change that. Juggling different patterns requires high throws, and as it turns out, the highly accurate velocity (note that this is different than positional accuracy) and high torque that are needed are not so easy with affordable motors. Originally when I did the physics calculations, I found linear motors that met those requirements, but they would have cost me $20k, which is outside of my project budget. I decided to hold off on toss juggling robot for now (toss juggling = in air), and work on rolling balls up a ramp instead.

Current status of this project is that the juggling robot is able to juggle 7 balls! I'm pretty sure that is a world record for juggling robots. It can also do some different juggling patterns (i.e. siteswaps), which is also something that has never been done. I plan to fix some issues and make the siteswap patterns more stable, but ultimately my next project will be to create a toss juggling version.

  • Siteswap

    Nathan Peterson10/19/2015 at 17:16 0 comments

    After getting the robot to juggle lots of balls, the next challenge was to program it to do siteswap patterns. Siteswap is a mathematical notation for representing juggling patterns. It's kind of analogous to how music notation is to music, except that siteswap is merely a sequence of numbers. See here for more info on siteswap. No juggling robot has ever juggled any interesting siteswaps, so this will be another first for juggling robots. The programing is a bit more difficult with siteswaps because the hands are no longer doing the same thing. I need to accurately calculate the velocity curve that ends with specific angular velocity, position, and time. Having all three of those constraints makes the velocity curve become non-linear and blows up into a funky mess. After thinking about it for a while, I decided to use a piecewise linear function instead, which makes the math a lot easier:

    After some work, I was able to get a couple of siteswaps working. I uploaded the source code here. Here is a video of siteswap 534:

    Next up, I need to fix a few of things in this design:

    1. I think I'm going to need to order some specialized bearings. The hand with the large bearing is sturdy, but too heavy, which forces me to lower the incline, which makes the balls take longer to settle. One the other hand, the small bearing is too wobbly. I need a large light weight bearing.
    2. I need to modify the hands somehow so that I can throw inside throws instead of outside throws without the balls hitting the inside walls of the hands. Even when doing outside throws, it is difficult to do low throws, because the hands are too deep. If I make the hands more shallow, then it will easier for the balls to bounce out when catching. Probably some compromise is needed.
    3. I noticed recently that the arm is not as rigidly attached to the motor shaft as I would like. Normally some sort of metal collar would be used, but my design is essentially using a plastic 3D printed collar. It works, but it has some give to it. I think I am losing some the motor's torque because of this. I'm hoping that fixing this issue will increase the amount of torque significantly, and I'll be able to raise the incline more.

  • Larger Hands + Electromagnets = 7 Ball Juggling!!

    Nathan Peterson10/06/2015 at 00:56 0 comments

    The previous hands were working great for 3 balls and sort of ok for 4 balls, but going beyond that required some upgrades. The main problem was still balls not settling properly even with butyl tape. I figured it was time to revive the electromagnets. One of my friends pointed out, that the last time I tried using electromagnets, I was manually disconnecting them from the power supply, which left them in an open circuit state. If drove them with an h-bridge instead, they may turn off more effectively. Also, I redesigned the hand again. This time to be much larger (deeper).

    Here is the result:

    Top view:

    The connector was printed inside of the bearing because there is not much room in the 8mm bearing. Especially when needing an addition hole for the electromagnet wire.

    I wasn't so sure about stuffing everything in that small 8mm bearing, so I additional ordered some larger bearings online (17mm). Here is the size comparison:

    Here is the printed arm with large bearing:

    As it turns out, this large bearing is very heavy. I weighs more than the combined parts of the previous arm:

    I decided to try both the small and large bearings at the same time. Here they are being setup:

    Neither of them are ideal. The small bearing was wobbling a bit and making a bunch of noise. The large bearing was much more stable, but forced me to lower the angle of the ramp because of the extra load on the motor prevented it from accelerating as much.

    The deep profile of the hands ended up causing me to have to do reverse throws because otherwise the ball would hit the inside edge of the hand as it was being thrown. I need to fix that problem at some point, but for now it is doing reverse throws (from outside to inside) just fine, and it worked so well that I easily blew throw 4 and 5 balls and skipped straight to 7!

  • Softening the catch

    Nathan Peterson10/06/2015 at 00:27 0 comments

    The main problem I was having was that the balls were bouncing around in the hands too much. Sometimes they would bounce out, but also sometimes they would not settle down in time for the next throw which would then be messed up. In order to get around this problem, I figured I should add some material to the hand to prevent bounce. I spent some time dropping metal balls all over everything in my house to see if they bounce. They mostly bounced off of everything including foam, so I decided to order some butyl rubber tape online, which is supposed to absorb kinetic energy.

    Here is the tape:

    Here I have applied it to one of the hands:

    And then placed a plastic layer over it because it is kind of like putty.

    Here is a closeup of the parts:

    The butyl tape worked decently. After I added that, I was able to keep the robot juggling 3 balls for over an hour, and I was also able to get a decent run of 4.

  • Slight design change

    Nathan Peterson10/06/2015 at 00:00 0 comments

    Made the hand a little bigger and redesigned the arm so that it hangs out the side instead of the bottom. This allows me to stand the robot upright if needed without having the arms bang into the floor.

    I was able to get the thing juggling finally!

  • Juggling Robot Design #5 - New Ramp & Gimbal Lock

    Nathan Peterson10/05/2015 at 23:52 0 comments

    The last design wasn't working so well, mainly due to the opening/closing servo part of the design effecting the precision of the throw, so I decided to change it up completely and create a design where the hand stays upright the entire time so that I don't have to open/close the hand, but first, I decided to change the surface of the ramp. The acrylic sheet broke anyway, so I decided to find some other material.

    The material used on my ultimaker2 3d printer frame was super smooth. I found out that it is called dibond. I love this material. It's basically plastic sandwiched between two sheets of painted aluminum. Here is the result:

    For the redesign of the hand, I figured that I would add a link to a passively rotating part (I'm not sure the correct terminology here) to help keep the hand upright. As it turns out, that is not sufficient because there are two angles where the system ends up in a gimbal lock situation and the passive rotation ends up switching direction. I ended up fixing that by adding a second link. Here is a video showing this problem:

    Here is the initial design:

    And the printed version (I used Bones Reds skateboard bearings from the nearest skate shop for the joints):

  • Juggling Robot Design #4

    Nathan Peterson09/23/2015 at 03:08 0 comments

    This 4th design is a bit more complicated. I decided I wanted to fix the catching problem by actually having the hand open and close. This means that in addition to the stepper motors, I have a servo mounted directly on the hand so that I can control the opening and closing. Also, since the hand is rotating, I needed to use a slip ring so that I could run wires to the rotating servo without the wires getting twisted as the hand rotates.

    Here is the result:

    Here is a later version that I made with a sparkfun servo trigger directly mounted on the hand:

    Also, I decided to update the ramp so that it is larger and I decided to use acrylic for the surface this time. Here is the CnC machine creating the motor mounts:

    Motor mount up close:

    Here's the video:

    It looks like it is working well in the video, but in reality it does not have consistent throws. At least not good enough to juggle more than one ball. Even with one ball it will mess up after a few throws. After analyzing it for a while, it looks like the issue is that it is relying too much on the hobby servo to open the hand at the right time and speed. The servo is not accurate enough for that, and even when I bought more expensive servos, it didn't solve the problem. I don't see a way around this problem without doing some other design that does not involve the ball being thrown while resting against a moving part that is controlled by a servo.

  • Juggling Robot Design #3

    Nathan Peterson09/23/2015 at 02:34 0 comments

    For my third design, I decided that the best way to eliminate the ball taking a long time to settle would be to use steel balls and electromagnets :)

    Here is the 3d printed hand:

    Here is a video of me testing it out:

    The throws were kind of erratic. I was having some issues where it seemed that the electromagnet was holding some of it's charge after removing power and messing up the throw. I eventually scrapped this idea, although I think it may be worth re-investigating again at some point.

  • Juggling Robot Design #2

    Nathan Peterson09/23/2015 at 02:23 0 comments

    I was having some inconsistent throw issues with the first design. I'm not sure exactly what the problem was, and I don't have it setup anymore to test out, but in any case, I decided to go with a scooping method instead where I don't have to worry about catching bad throw. I just throw them in the general direction of the sidewall where they fall down into a pit and get scooped out and then thrown again.

    Here is the finished design. I laser cut the border, and once again 3d printed the hands.

    Here's what it looks like in the back:

    Here is the video of it attempting to juggle 3 balls:

    As you can see, that did not work so well. I couldn't figure out how to scoop them without knocking them around at the same time. I couldn't get them to settle fast enough to be able to juggle.

  • Juggling Robot Design #1

    Nathan Peterson09/23/2015 at 01:47 0 comments

    Here is my first arm design created on tinkercad. The slot is for a square nut to hold a screw that held the arm onto the stepper motor shaft.

    I built a wooden frame to use a a ramp to roll the balls on, and mounted the motor, motor driver, and arduino on the back. Notice that the stepper motor has a white disc on the back shaft. This is a makeshift encoder to sense the initial position of the motor on boot up. It has a slotted optical interrupter to sense a notch in the disc.

    I printed this arm at techshop on a makerbot:

    I was able to get it to juggle one ball a little bit. Here is the video:

    I was able to get it to do some minimal juggling with one ball. The main problem with this design is that it doesn't allow for any way to catch a ball in a different spot that you are throwing it from. That will be important later when I want to add more balls without causing collisions. Another problem (other than that the hand is very small for catching) is that there is not much room to maneuver. If I rotate the arm too much, the ball will fall out of the hand. Stepper motors don't have a lot of torque, so it is better if it can accelerate some, which means that it needs to be able to rotate more. Also, lowering the incline of the ramp helps, but also causes problems. Having too low of an incline makes it take a long time for the ball to settle before you can throw it. Obviously for one ball that is not a big concern, but whenever you have more balls than hands, there is a time constraint as well if you want to aviod collisions.

View all 9 project logs

Enjoy this project?



jimrd wrote 12/20/2018 at 04:24 point

Nice, mesmerizing. I built a Claude Shannon juggling machine. I know what you mean, took a year and I gave up several times but just had to stick it out - was so gratifying when it worked. Mine is a real hatchet job and can only currently run 40 seconds until dropping a ball. But my motor surges and the whole machine rocks a bit - so can be fixed.

Have you done any work on toss juggling machine?

  Are you sure? yes | no

haasebert wrote 10/06/2015 at 14:14 point

Very cool!  I love that you documented the evolution of the thrower/catcher designs.  It really helps people understand that even if your first prototype doesn't work, you can keep plugging away at a good idea and eventually get it to work beautifully.

  Are you sure? yes | no

Nathan Peterson wrote 10/06/2015 at 16:01 point

Thanks. Yeah there was a while where I wasn't sure if I was ever going to get it working, but now it is :) I'm sure I'll run into 10x more problems when I start working on a toss juggling version.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates