• ### Siteswap

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!!

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

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

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

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

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

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

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.