Hanso

Building a 6-axis DOF robot arm for Lego World 2017, by Sioux.NET on Track

Recommended Posts

In case you have missed my earlier posts: the article below is part of the large, fully automated train layout called "Sioux.NET on Track". You can watch a video of our presentation of our layout at Lego World Utrecht 2016 at our Youtube channel: 

Replacement of a slow candy crane
As you can see in the video, the loading of the four wagons is done by the so-called candy crane. A nice and eye-catching structure, but is is slow. Really slow. When the visiting parents asked me at Lego World what the layout was about, my answer was usually “for children it is a candy delivery machine but for the parents it is a Zen machine” ;-). The delivery of four candies took in total about 13 minutes; most of the time the candy crane was fetching the containers with candies and loading them into the train.

When we walked around Lego World, we noticed the following robot arms at the Mindstorms stand.

30893262942_05bcd9c732_z.jpg


We all had the same idea: that robot arm would be our next building and the replacement of our crane. The robot arm would be responsible for moving the containers from the pickup position to the wagons.
The robot arm on the photo is originally designed by Mike Dobson and a LDD file is available. But I don’t find it a challenge to build these things from a building instruction (although, rebuilding these large objects from an LDD file is quite a challenge in itself ;-). So I started to build a robot arm from scratch. Of course, you will see some parts that look similar and yes: I have stolen these ideas from the master ;-)

 

Robot arm, six axis DOF (some background info)

The robot arm that we are designing, is a so called six-axis DOF robot (DOF is an abbreviation for Degrees of Freedom). The six axis that it can move are shown on the following picture:

31035670165_cc5c8dea45_o.png

  1. This axis, located at the robot base, allows the robot to rotate from left to right.
  2. This axis allows the lower arm of the robot to extend forward and backward.
  3. The axis extends the robot's vertical reach. It allows the upper arm to raise and lower.
  4. Working in conjunction with the axis 5, this axis aids in the positioning of the end effector and manipulation of the part. Known as the wrist roll, it rotates the upper arm in a circular motion moving parts between horizontal to vertical orientations.
  5. This axis allows the wrist of the robot arm to tilt up and down. This axis is responsible for the pitch and yaw motion. The pitch, or bend, motion is up and down, much like opening and closing a box lid. Yaw moves left and right, like a door on hinges.
  6. This is the wrist of the robot arm. It is responsible for a twisting motion, allowing it to rotate freely in a circular motion, both to position end effectors and to manipulate parts. It is usually capable of more than a 360 degree rotation in either a clockwise or counterclockwise direction.
  7. The gripper to pick-up the parts, candy containers in our case. Since this is not a movement, it is not seen as a separate axis.

So, let's start building!

 

Building of the robot arm, work in progress (first prototype)
We started with the upper arm of the robot arm. For the first prototype, we used a a copy of the crane grabber for the gripper part. Three motors were placed in the upper arm (for movement 5, 6 and 7). The result can be seen below:

30951168685_93a2eb722f_z.jpg22772344168_e8e17c235e_z.jpg


And all worked fine, apart from one major disadvantage: to make the movement "axis 4" possible, the upper arm needed to be connected using a turntable (art. 4624645). But the weight of the upper arm was too high for the turntable. It started to bent a bit, making the rotation (axis 4) almost impossible.

30951254035_e14cb99144_z.jpg

So, we needed a new upper arm but much more light-weight.

 

Building of the robot arm, work in progress (second prototype)

We discussed in the team what could be improved. And if the weight of the arm is too much, it needed to go on a diet. So, we looked for a way to put the motors in the upper part of the arm and to get three axles through the turntable. That would save lots of weight: 1) because three motors are not needed in this part of the arm, and 2) because the arm could be much shorter. But is it possible to get three axles through one turntable? Yes, you can. I found a video that does the trick, you can find it here:

 

Another solution uses non-Lego parts:

Quite a nice solution but we have a restriction that we don't use non-Lego elements.

 

If three axles is not really possible, let's step back to a two-axle solution. And so we did: we created an upper part of the robot arm with only one motor and a simple fix to get two axles through the turntable:

30275270483_e5e1990822_z.jpg

 

The result of the second prototype can be seen here. We said goodbye to the grabber and made a two-finger gripper.

30834530782_020865381e_z.jpg31000370766_656c342daf_z.jpg

 

And indeed, the second prototype was better than the first time. Take a look at a (kind of) complete upper arm:

 

But another major disadvantage: if the arm made a movement around axis 5 or axis 6, the gripper opens or closes as well. The reason is that the gears that control the movement of the opening/closing of the gripper, are also rotating when the gripper is rotated (axis 6) or when the wrist rotates (axis 5). You can power the motor that controls the gripper to compensate, but it is not accurate enough. So... goodbye to prototype 2.

 

Building of the robot arm, work in progress (third prototype)

How can you prevent gears to turn when you don't want them to....? Remove the gears! So the next (and hopefully final) prototype uses pneumatics to control the gripper.

22786531748_444cf5a5fa_z.jpg30894149672_0355c68415_z.jpg

We added two touch sensors to the upper arm to detect the position of movement 5. In the photo above, the read L shaped peaces are pressed against the touch sensor when it reaches the end position. At the other side, the same principle is used to detect the other end position.

Next to build: a sensor to detect the rotation position of the gripper. And the motor(s) to control the movements 5 (wrist) and 6 (gripper rotation). If that is finished, the upper arm is ready and we can continue with the part that holds the upper arm.

 

That's all for now, I'll keep you posted.

Please let me know what you think of it.

 

Enjoy, Hans

 

Edited by Hanso

Share this post


Link to post
Share on other sites

Wow! Quite the project that you have started. You appear to be making good progress with the claw, but you will want to clean up the tubing, because the length of it will decrease the claw's strength and reactivity, as well as catching on stuff. Good luck, and happy building!

Share this post


Link to post
Share on other sites
4 hours ago, Leonardo da Bricki said:

Wow! Quite the project that you have started. You appear to be making good progress with the claw, but you will want to clean up the tubing, because the length of it will decrease the claw's strength and reactivity, as well as catching on stuff. Good luck, and happy building!

Hi Leonardo,

Thank you for your kind reply.

The claw's strength with respect to catching the candy containers seems to be fine, as you can see on the video:

 

The problem with the rubber elements is more, that (due to the flexibility), these elements are not quite fixed to the grey axles and after some time, the get loose and fall off. Will replace the grey elements with the new reddish brown axles with end stop (24316):

6135494.jpg

If you have suggestions for improvement, please let me know.

Warm regards,
Hans

 

Share this post


Link to post
Share on other sites
On 11/16/2016 at 4:41 PM, Hanso said:

How can you prevent gears to turn when you don't want them to....? Remove the gears! So the next (and hopefully final) prototype uses pneumatics to control the gripper.

We added two touch sensors to the upper arm to detect the position of movement 5. In the photo above, the read L shaped peaces are pressed against the touch sensor when it reaches the end position. At the other side, the same principle is used to detect the other end position.

Enjoy, Hans

Hello Hans, 

This is a pretty cool project. Is there a reason why you use touch sensors instead of motor positions to detect the end of travel?  Removing the sensors would simplify the build quite a bit.  It adds a bit more work to the programming, but it's fairly simple to implement. I have a writeup on how to do this here: http://www.busterhaus.com/2013/10/this-is-test-bed-for-program-that.html?view=flipcard&m=1

Share this post


Link to post
Share on other sites
On 20-11-2016 at 4:48 PM, BusterHaus said:

Hello Hans, 

This is a pretty cool project. Is there a reason why you use touch sensors instead of motor positions to detect the end of travel?  Removing the sensors would simplify the build quite a bit.  It adds a bit more work to the programming, but it's fairly simple to implement. I have a writeup on how to do this here: http://www.busterhaus.com/2013/10/this-is-test-bed-for-program-that.html?view=flipcard&m=1

Dear BusterHaus,

Thanks for your interesting tip. I never thought of this method to detect the end of travel. I knew that you could determine the rotation of the large motors, but was not aware of the fact that this was possible for the M motor as well.

Will think of using your method for detecting the end of travel for the wrist rotation and arm rotation (see the update I will write today).

Warm regards,
Hans

Share this post


Link to post
Share on other sites

The building continues...

At our Flickr page, you can watch the robot arm growing. Currently, largest part of the upper arm is finished. This is how it looks:

30989475152_c02e2faede_z.jpg

The finished part of the upper arm implements the movements 4 (upper arm rotation), 5 (wrist tilt), 6 (wrist roll) and 7 (grabber). I have already taken into account that we want to determine the position of the movements:

  • Movement 4, upper arm rotation
    By adding colored pieces at the bottom and at the sides plus the use of a color sensor, we can determine the position of the upper arm.

    31018576671_07e4f5e42c_z.jpg
     
  • Movement 5, wrist tilt. Two touch sensors are used to detect the end positions.
    31096428436_de27acbaba_z.jpg
     
  • Movement 6, wrist roll. Again, using colored pieces and a color sensor (not build yet, needs to be done) we can determine the position of the wrist.
    31132820405_72e69165a0_z.jpg

    Although these color indicators are at the other end of the wrist itself, it is connected directly to the wrist. So if the red element is at the bottom, the grabber is always in the horizontal position.

The suggestion of BusterHaus to use the motors itself to detect the end position, is a nice one. I'm thinking of using his method for determining the rotation stops. Or at least, use it as a watch dog. Will let you know the final choice.

More photo's and the LDD sketch can be found at our Flickr page: https://flic.kr/s/aHskoykQmL.

Regards,
Hans

Share this post


Link to post
Share on other sites

The build continues ...

Some more photos and a video of the (almost) finished upper arm of the robot can be found on Flickr and on Youtube.

As you can see on the video, the pneumatic grabber needs to be connected. And the arm roll is not working yet, the light sensor doesn't pick up the correct color values.

Enjoy,
Hans

Edited by Hanso

Share this post


Link to post
Share on other sites

I came here looking for ideas about building my own Mindstorm 6 axis robot arm.

I am more interested in the software side of controlling the robot arm and I think the Lego side might be too much of a challenge for my limited Technic skills.  So I'm very pleased to see your project and I hope you keep posting detailed updates like this so I can learn from your progress :classic:

Share this post


Link to post
Share on other sites

I couldn't get the arm rotation right. It turned out that the gears I used for this rotation (see left side of the picture below) resulted in the arm to be stopped too early because it got stuck in the notch of the gear. Therefore, I replaced the gears with the ones on the right.

31338538761_fb0372e073_n.jpg

Because the color sensors are too unreliable, I made the end stop 'physical'. The red pieces that jut out (hope that this is good English ;-) is used to find the middle position using a color sensor, and it is also used as the end stop when it hits the stop. And then I use the way as described by BusterHaus to stop the motor. In the LDD picture below, you can see the changes.

31453269045_513a8a9f43_c.jpg

A video of the finished upper arm can be found at Youtube:

 

Edited by Hanso

Share this post


Link to post
Share on other sites

Building of the upper arm is finished (although I can expect some rework when it will be connected to the lower part ;-).

A small but important change: the arm roll didn't run smoothly. We found out that it was due to the universal joints (art 61903), the angle between the motor and the gears was too high. Not that high that it didn't work, but it sometimes had a kind of hick-up. In principle, the hick-up wasn't a problem since it did work. But because I check the motor power to determine if the arm roll has reached the end stop, a hick-up caused the motor power to go to zero for a very short time. And that caused the program to think that the end stop was reached ...

By lowering the motor a bit, the angle of the universal joints is smaller and now everything works fine.

Next, I made in LDD a cover of orange elements and that how the end result could look (orange is the color of Sioux):

31488752462_3b295a36eb_c.jpg

Enjoy, Hans

Edited by Hanso

Share this post


Link to post
Share on other sites

Nice progress :)

I see you still have the touch and colour sensors in there, but I think you're not using them any more, is that correct?

And at the moment, the Mindstorm controller seems to be at a fixed angle to the "forearm", i.e no joint 3 from your list in the original post.  Will you change that for more articulation?

Share this post


Link to post
Share on other sites

Cool project, sorry if you already stated but what are you going to use to counter balance the arm?

Share this post


Link to post
Share on other sites
12 hours ago, omnium said:

Nice progress :)

I see you still have the touch and colour sensors in there, but I think you're not using them any more, is that correct?

And at the moment, the Mindstorm controller seems to be at a fixed angle to the "forearm", i.e no joint 3 from your list in the original post.  Will you change that for more articulation?

Thanks for the compliment.

I still make use of the touch sensors and the color sensors. I will try to explain what they do in the three working movements:

  • Wrist roll (movement 6): position of the wrist is determined by a color sensor that is in the back of the arm. Literally, the wrist is connected through a long axle going all the way through the arm to a 3-branch cross axle (57585). Giving me three positions: 1) middle position = the wrist is horizontal, 2) 120 degrees to the left = end stop and 3) 120 degrees to the right = other end stop.
  • Wrist up/down (movement 5): the two touch sensors at the sides make the end stop. So, I don't know the middle position. But from the end stop position, I can just make the motor turn a specific number of rotations.
  • Arm roll (movement 4): I use the physical end stops and the 'if power is zero' program block to determine the end stop. So, I still use a sensor but it is in fact the motor that is also used as input channel. To determine the middle position, I use a color sensor.

Next, you ask 'if there is not a joint 3'. Well, not yet. Indeed, the EV3 is fixed to the upper arm. The lower part needs to be designed and built. The lower part will have turntables at the top (you can already see them in the pictures, where the turntables are attached to a temporary construction to keep the arm in the air). This will be the 'movement 3' for the final version. The lower part will also have movement 2 (body back/forth) and movement 1 (body turn). And the lower part will have its own EV3 (daisy chain), so the robot arm needs two EV3's in total.

Hope that this is making it more clear. It is difficult to explain if you cannot point to the device while talking ;-)

8 hours ago, JJ2 said:

Cool project, sorry if you already stated but what are you going to use to counter balance the arm?

Thank you as well. The EV3 is used as counter balance.

Share this post


Link to post
Share on other sites
5 hours ago, Hanso said:

 

  • Wrist roll (movement 6): position of the wrist is determined by a color sensor that is in the back of the arm. Literally, the wrist is connected through a long axle going all the way through the arm to a 3-branch cross axle (57585). Giving me three positions: 1) middle position = the wrist is horizontal, 2) 120 degrees to the left = end stop and 3) 120 degrees to the right = other end stop.
  • Wrist up/down (movement 5): the two touch sensors at the sides make the end stop. So, I don't know the middle position. But from the end stop position, I can just make the motor turn a specific number of rotations.
  • Arm roll (movement 4): I use the physical end stops and the 'if power is zero' program block to determine the end stop. So, I still use a sensor but it is in fact the motor that is also used as input channel. To determine the middle position, I use a color sensor.

 

I'm not sure if you are already doing this, but you can find the center position of each mechanism by including a homing routine at the start of your program. 

It looks for the end of travel in one direction (detected by motor stall or by the input from a sensor). You then zero the motor rotation counter and find the travel limit in the opposite direction. Divide the result (X) of the rotation counter by two and use that as your input to move the motor to the center of the available movement.  You can also use X/2 to set the travel limits in each direction. 

In practice you will need to adjust X/2 for both the center of the movement (due to backlash in the motor and mechanism) and for travel limits (will be slightly lower than X/2 to avoid stressing the mechanism).

You can check our a simple car I made that centers the steering mechanism: http://www.busterhaus.com/2013/11/turtl3-car.html?m=

A screenshot of the program is included. 

Share this post


Link to post
Share on other sites
1 hour ago, BusterHaus said:

I'm not sure if you are already doing this, but you can find the center position of each mechanism by including a homing routine at the start of your program. 

It looks for the end of travel in one direction (detected by motor stall or by the input from a sensor). You then zero the motor rotation counter and find the travel limit in the opposite direction. Divide the result (X) of the rotation counter by two and use that as your input to move the motor to the center of the available movement.  You can also use X/2 to set the travel limits in each direction. 

In practice you will need to adjust X/2 for both the center of the movement (due to backlash in the motor and mechanism) and for travel limits (will be slightly lower than X/2 to avoid stressing the mechanism).

You can check our a simple car I made that centers the steering mechanism: http://www.busterhaus.com/2013/11/turtl3-car.html?m=

A screenshot of the program is included. 

Dear Busterhaus,

Thank you for you advice. I will give it a try this weekend if it is accurate enough.

Best, Hans

Share this post


Link to post
Share on other sites

Starting building with the base of the robot arm. This is the first proto. Please note that it is only a proto of a non-functional base. I didn't design motorized movements yet. Just checking how strong the base needs to be and for an indication of the measurements.

31783903650_c445d77121_c.jpg

 

For the bottom turntable, I am using the new circle gear rack elements (6151167) from set 42055. You can read an article about this piece at Brickset by clicking the picture:

29173198742_ae0d443212_o.jpg

 

Enjoy, Hans

 

Share this post


Link to post
Share on other sites

Replaced the linear actuators by two gear racks 1x14 (18942):

32223071816_ce02914397.jpg31885370860_bd6b2e97ae.jpg32223072076_939d5e414e.jpg

And now I need to motorize this ...

Enjoy, Hans

Share this post


Link to post
Share on other sites

Added two movements to the lower part of the robot arm: rotation of the robot and (axis 1) and the forward/backward movement (axis 2):

31479076574_93e38a6c05_c.jpg

The only axis that needs to be implemented, is number 3 (raising and lowering the upper arm).

In the Youtube movie, you can watch a demo of the implemented two axis movements:

Please let me know what you think. If you like it, please like the video. If you have any suggestions for improvements, please drop me a note.

Enjoy (at least, I do ;-),
Hans

Edited by Hanso

Share this post


Link to post
Share on other sites

This looks awesome! It has some very good speed and seems quite solid. I am looking forward to the next update. 

Edited by BusterHaus

Share this post


Link to post
Share on other sites

Thanks Technic Jiim and BusterHaus. Your compliments make building even more fun :sweet:.

Uploaded some more photo's to Flickr.

31517719144_7c57d74d61_c.jpg

There is still some work to be done:

  • Implementation of movement 3 (raising and lowering the upper arm)
    • Including (a) sensor(s) to detect the position of the upper arm
  • Adding the pneumatic pump and switch to control the grabber
  • Adding sensor(s) to detect the rotating position (movement 1)

And then we can programming the arm!

So, almost finished ...

e_1154697.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.