New robot arm 3D printed


#1

Here is a link to a short video of my new robot arm.
It is moving moving with a reverse kinematic script I made in python. I can make it move to any coordinate x,y,z and I can change the tool orientation with a orientation matrix.

I wanted to make one myself instead of using the RBX1 model. All motors use 10:1 planetary gearbox. Planetary gearboxes are great to upgrade the weight to torque ratio but they do have alot of backlash and play, witch is very bad for a robot arm.

I am still trying to figure out how to control the speed and position at the same time so I can make lineare move with the tool reference.


#2

I like the way the arms move together, looks pretty cool. Much quicker than the previous one!

You should try and use acceleration and deceleration, as it will be a lot smoother and won’t cause judder.


#3

Working on it ! Speed control isnt implemented yet, only the reverse kinematics


#4

Here, i changed the accel/deccel value to make it move smoother, look much better ! Thx for the tip. There is still no jacobian matrix for the speed control but some trajectory almost look lineare. Im happy with my IK matrix too. My final goal would be to make it move like a industrial robot.


#5

That’s moving so much better now. Good work!

In your program, do you use the commands Move(), GoTo(), GoHome(), GoMark() and ResetPos()?

Also, try to use SoftStop() and SoftHiZ() which causes the motor to decelerate and then stop.

If you find the acceleration and deceleration not performing well, then you may need to adjust the current for ACC and DEC, keep HOLD parameter to a minimum to avoid overheating.

If you want your stepper motors to run at their optimal settings, you need to figure out their BEMF - I don’t have an oscillator, so I’m unable to optimise my stepper motors.


#6

Is use goto() and softstop(). To control speed i use setmaxspeed and set setaccel/decel. I dont know what softhiz do? Also i try to keep the hold value as low as possible but at the moment the shoulder and elbow need high value to stay in position. I need to upgrade my ratio. I will go from 5:1 to 30:1 with precision planetary, this should help alot.

I made a moving function that use goto() and softstop. My problem is that I dont know how i can tell the robot to go from a to b but with variable speed and direction depending on the position.

In other words, beetwen position a and b, i need to be able to control the acceleration in a no lineare way, so when i tell the motor to move a number of step, each step must move with its own variable speed depending on the position relative to destination.


#7

SoftStop() will decelerate and then stop. Whereas, SoftHiZ() will decelerate, stop and then hold.

Changing to higher ratio, will reduce speed but will increase torque.

I guess to move from A to B, you need to define your workspace of the robot arm (some good guides Robot Dynamics and Control and Kinematic Control)

Is it not possible to define individual speed profiles for each sections of the arm?


#8

Actually, I already have all the kinematic formula done for my robot, even the jacobian for speed control.

I know gear ratio will lower the speed, but some joint like shoulder and elbow doesnt need to move very fast. However, they do need alot of torque to lift all the weight of the steppers. Industrial robot usually have gear ratio beetwen 100:1 and 200:1 but they use dc motors with encoders.

To move the robot, I send it coordinate in x y z and tool orientation vectors relative to base referential. I made the Inverse kinematics script in python.

So the only problem i have now is the control of the motors with variable speed relative to position. I can send a number of step and a speed value to the motor but im not sure how to make it check the position and recalculate the speed needed after every step.

I tryed this : the motor move 1 step at time with a certain speed, than check the direct and inverse kinematic, recalculate speed with jacobian, and move 1 step again with a new calculated speed and so on… the problem is that if i dont use waitforrobot() after each step, the robot doesnt wait for the step to be moved to recalculate speed and it do all at once, resulting in the robot motors moving only 1 step in total. With waitforrobot() however, the robot stop at every step, making it shake like crazy.

I need to find a way to change the speed on every step done by the motors, and make it move smoothly.

Its the control of the stepper motor that is giving me trouble, not the kinematics. Some motors need to change speed and even change direction while the tool is going from a to b in a lineare or rotary trajectory, thats what we want. im sure there is a way to do that.


#9

The last statement is similar to what I was facing when I was building my T-Bot. Using the L6470 functions works fine when doing linear interpolation. However doing circular interpolation became difficult. This is the reason why I decided to use Step Clock Mode instead.

The program that I have written, controls the speed and direction of the stepper motors - I don’t use any of the L6470 functions e.g. Move(), GoTo(), GoHome(), GoMark() etc.


#10

I have decided to take the MOVEO robot arm and modifiy it to give it a high lifting capacity.
The shoulder join with dual nema 23 seems strong enough so Im starting with the same base, however all other joints are too weak for my liking.

The project is still in progress but I have remade the lower arm section to change the nema17 with a nema 23 using bigger gear ration. The result is promising so far, its soo strong that I cant make it skip a step by hands.