Robot arm stepper motor?

So I just graduated with an associates in electro-mechanical engineering, and have a fascination with robots. I also work around a lot of big robots in a major automobile factory. I got an arduino for Christmas, and after a few quick projects I've decided to take on the task of building a user programmable six joint robot arm, similar to the ones in my factory.

Here's my question:

Will a stepper motor be the actuator of choice for my joints? For the lower joints on the arm I want excellent precision and high torque. I started with basic hobby servos, but I don't like the low resolution of them or the jerky movement while moving slow. So I picked up some continuous rotation servos and some gears from a hobby shop to gear them down to a 1:4. This would give me 15 minute per degree precision, however I quickly learned that there is no stopping a continuous rotation servo precisely! Whoops! I began looking into pots to use as position sensors for the continuous rotation servos, but am pretty skeptical about the constant accuracy. I want my arm to move to exact points repeatedly, just as in a manufacturing environment.

So now I'm researching steppers, and with a 1.8 degree step, and using my 4:1 gear ratio, the accuracy is sufficient for my appetite for perfection haha! I understand steppers don't have the torque of servos, but I'm assuming the gears will more than make up for that.

Another question is how slow are these steppers going to be? The standard servos are way to quick to be using for the first few joints but again, when I slow them down they are jerky and I don't like that! (Just a quick note, precision is key on the first few joints. The arm will be a little over a foot long, so imagine being a degree off at a foot out!)

The very bottom joint (the S joint on motorman/yaskawa robots, or J1 on fanuc if you are familiar with them) will need to have at least 180 degrees of rotation, so in a 4:1 gear ratio the stepper motor must be capable of accurately spinning 720 degrees. I can't seem to find any info on how to do this! I'm assuming you just send a number of steps and direction for the motor and it will follow? Does this mean a stepper is capable of infinite number of steps? If this is true I'm also assuming I use the programming logic to decide how many steps to send to reach a certain angle. This assumption is what prompted me to make sure I get an easy gear ratio to calculate, i.e. 4:1.

So that's all I have to share for now... I hope I've provided enough information. Before I chose my degree in electromechanical I went for software engineering. So having C programming experience from that, mechanical, electrical and robotic experience from my degree, this project is coming along pretty nicely with just a few hiccups here and there.

From your opening paragraph I suspect you are better informed about this subject than most people here - including me.

You may get some value from Stepper Motor Basics

Stepper motors are heavy. I presume you envisage mounting them in the base and using push-rods or such to convey the movement to the limbs.

A stepper motor will move just as many steps as you tell it. That could be 1 or 7,000. And you can have as long an interval as you like between steps.

What you may want to consider is the fact that stepper motors are very inefficient and not suited to battery power unless you are happy with heavy batteries.

My suspicion is that suitably geared DC motors with rotary encoders might be more suitable for your project. But programming for encoders is more complex than programming for stepper motors or hobby servos.

I presume you have experimented with Servo.writeMicroseconds() in your quest for precision.

...R

Robin2:
From your opening paragraph I suspect you are better informed about this subject than most people here - including me.

You may get some value from Stepper Motor Basics

Stepper motors are heavy. I presume you envisage mounting them in the base and using push-rods or such to convey the movement to the limbs.

A stepper motor will move just as many steps as you tell it. That could be 1 or 7,000. And you can have as long an interval as you like between steps.

What you may want to consider is the fact that stepper motors are very inefficient and not suited to battery power unless you are happy with heavy batteries.

My suspicion is that suitably geared DC motors with rotary encoders might be more suitable for your project. But programming for encoders is more complex than programming for stepper motors or hobby servos.

I presume you have experimented with Servo.writeMicroseconds() in your quest for precision.

...R

Great info! Thanks!

As far as battery power, the arm will be stationary and the motors will draw their power from an external source, a 30v 5A variable power supply. I scanned over the writemicroseconds, but that was in regards to a continuous rotation servo. Never thought about applying that to a standard servo. Will the writemicroseconds increase the resolution of a standard servo? If so, problem solved. I'll have to test that in a little bit.

I won't be using push rods, everything will be direct connect. I know that's going to require a lot of torque, which is why I'm making the arm so small. Also, smaller usually means less cost, which is always a plus.

The complex programming and additional cost of a rotary encoder and mounting procedures were a turn off for me, but I didn't really invest a lot of time researching that option. Maybe I should.

I also saw stepper motors with the right driver can include a large degree of microstepping. This would definitely solve the resolution problem and eliminate the need for gearing down, but by not using the gears I would lose my torque conversion.

I'm going to continue my research on these options. Thanks for clearing some things up and giving me some new ideas.

Robin,

I read your guide on steppers. Lots of great info. Thanks!

Ckhallock:
. . . I started with basic hobby servos, but I don't like the low resolution of them or the jerky movement while moving slow.

. . . The standard servos are way to quick to be using for the first few joints but again, when I slow them down they are jerky and I don't like that!

You can have hobby servos move as slow as you want. They don't have to move fast.

I posted a couple links to videos I made of my joystick servo code here. The code ramps the speed up and ramps the speed down. No abrupt changes. I could easily have the servos move as slowly as I like.

Servos don't have to change position or speed abruptly.

I'm guess the code you used didn't allow the servos to move as slow as you'd like.

Duane,

That's exactly what I'm looking for. Great work on the videos. I can see the perfect slow steady movement I'm looking for.

I read through your code and saw that you use the writemicroseconds command to change the pulse width. I think this is what I'm looking for.

One of my previous "learning" projects was I used two servos to control "doors" I made out of cardboard flaps. I simulated a convenience store automatic door with two push buttons that would open the doors. The doors would stay open for a bit, and then begin to close unless the "mat" was stepped on again. (back in the day, automatic doors were controlled by pressure switches in a mat on the floor rather than the infrared detectors used today... what can I say, I'm not that young anymore haha!)

Anyway, as the doors reached their opening or closing endpoint, they would slow down. As they rotated slowly, they had a jerky motion to them. With the knowledge I now have, I'm assuming this is because I used the standard "servo.write" instead of write microseconds. Even though I tried setting the increments to .25 instead of a whole 1, i'm betting the programming automatically rounded it to 1, so the servo only had the option of moving to 180 definite points.

I'm going to try the writemicroseconds sometime by the end of the night and see how that fares out. I'm only wondering if the holding torque will very with position?

Few hobby servos have any precision parts, I would look for servos aimed specifically at
robotics, typically digital control and encoder based.

Most medium sized robot arms I've seen inside (admittedly not many) use metal wire or
tape or toothed belt under lots of tension as the drive mechanism - this means having substantial
ratings for all the motors for both torque and bearings. The tension reduces backlash significantly,
which is the major caused for slop in any arm I suspect.

this is what i'm going for. Now, granted, this is a $100,000 robot, I'm simply trying to build a six axis robot that is user programmable from a control pad.

this is what i'm going for. Now, granted, this is a $100,000 robot, I'm simply trying to build a six axis robot that is user programmable from a control pad.

If you have a $100k, you can just buy some awesome units! Robotic arms are pretty well developed, so you probably need to decide the size and function desired from the arm before any good suggestions can be made. Worm gear drive and linear actuators might help solve holding position if significant loads are involved. Using google and youtube searches maybe you can identify something that is close to what you want.

Pic from Reply #7

...R

Sorry for grave-digging but I believe I found what Ckhallock was looking for in my own searching.

Yes, a stepper motor driven arm is what you want for precision.

This is one of the best options I came across in my search.

Gen 1 was $499 early bird on Kickstarter and $599 after but they seem to have dramatically upped the price with newer revisions (Close to $1000)

This guy seems to be equally as promising with more DIY but a more robust looking arm.