Go Down

Topic: Robot differential steering: how to get from A to B to C? (Read 667 times) previous topic - next topic

farblich

I am building a robot that looks roughly like this:


(Image taken from this site and modified by myself.)

The two wheels are powered by stepper motors so that I have fine control over the turning angle and speed of the wheels. I want to use Differential Steering to control the robot. The robot has no sensors whatsoever. Instead it assumes that by giving the right commands to the two motors it will be get to the desired position. (The floor will be flat.)

I want the robot to be able to follow a pre-defined path. The path is not drawn on the floor but exists as an array of bezier points or coordinates. I want to program a controller that can follow this path not only by going from point to point in a straight line but also by following curves:



As mentioned before, going from point to point in straight lines would not be enough:



There are at least two problems I have to solve:

1. Do the math to know how fast to turn each wheel to get from A to B. This is a nice article on the subject: A Tutorial and Elementary Trajectory Model for the Differential Steering System of Robot Wheel Actuators. Equation [5] shows how to calculcate the robots position based on the velocities of the two wheels. But I need it the other way round: I know where I want to go and need to know the wheel velocities. Can you help?

2. Enable the robot to not only go from A to B but follow a pre-defined curve along the way. A first idea would be to split the curve into lots of little curves (i.e. add points along the path). Any thoughts on this approach?



Thanks in advance, I am looking forward to your thoughts.

farblich

Um, did I post this to the wrong board?
Also, let me know if I can clarify the problem in any way.

PeterH

You can travel a constant radius curve by maintaining a constant ratio between the two wheel speeds. If you can define your required course in terms of a sequence of constant radius curves and straight lines, that would be relatively straight forward to implement. You would need to have positional feedback from each wheel so that you knew the distance travelled and could calculate the speed, and a closed loop feedback controller to maintain the desired ratio between the speed of the two sides.
I only provide help via the forum - please do not contact me for private consultancy.

ArtificialUser

I am struggling with the same problem. It is impossible to do this accurately without some sort of sensor. As PeterH said, you need feedback.

I am not sure if this will work, but you could replace your caster by a trackball. Not sure whether this will work on each surface, but it will probably work on some. This seems easier and cheaper than adding feedback systems to each wheel separately. The wheels combine their independent movements into a single movement of the robot anyway. This is what I am going to try.

groundfungus

If you go the wheel encoder route, put the encoder on the motor if possible.  That is before the geartrain.  That will give much better resolution.

farblich

Wheel encoders give feedback on how much a wheel has turned. Still, they have no means to tell how far the vehicle has moved. The wheel could have slipped, for example.

Why is a DC motor with an encoder better than a stepper motor? With both I can tell by how much a wheel has turned very precisely.

luisilva

Very interesting project, and very, very hard too, I think. Is some kind of thesis or something. (I believe that this make a good Msc. Thesis, at least)

groundfungus

In my experience a DC gearmotor with encoder will, in this application,  perform better than  a steeper of the same size, weight and current consumption.  Also, tire slippage can occur with either method, but you will never know if the stepper skips steps unless it too has an encoder.

Go Up