# Differential drive trajectory following control

I have a robot platform with differential drive which knows it's position and orientation. Lets say that the space through which the robot moves is known and it has only static obstacles. The task is to move the robot from point A and heading alpha (on which it currently stands) to point B and heading beta on the map.

Lets also say that I can obtain a reasonable trajectory (in relation to the turning abilities of the robot). As both the robot and the sensors are inert, what are some general approaches for controlling such a robot to follow the path? It should of course be kept in mind that the final task is to reach the point B without colliding with the obstacles and not the perfect trajectory following.

I hope the question is not too general.

• What do you mean by saying that "the robot and the sensors are inert"?
– Ian
Mar 12 '14 at 1:50
• They do not have instant response, robot is physically inert while the sensor data come from the fusion of low-frequency component of one sensor and high-frequency component of another sensor which introduces a certain delay and oscillations. Mar 12 '14 at 16:06
• Can you rephrase the question? Do you know the path you want to take and just want to drive the robot on that path or are you looking for a planning algorithm of some sorts? If this is just driving a path then you're looking at some sort of a closed loop controller, what feedback do you have? (sensors etc?) Mar 13 '14 at 6:26
• Yes, I only wish to follow the path. I know I need a closed loop controller, I'm just having trouble figuring out which one. Lets say I have sensors that give me the position and orientation of the robot (with some possible delay and noise of course). I'm having trouble designing the control law because following the path is not the main objective, it is getting to the goal point. Mar 13 '14 at 9:37

Pure pursuit is the standard method for following a trajectory with a differential drive (or ackerman steering) robot. It is a very simple technique. You should be able to search for it and find some (very old) papers describing it.

• I will mark this as the answer, but please (both you and others), add some more approaches you might be familiar with. Thanks. Mar 12 '14 at 19:56
• Well, I think all approaches will use some sort of carrot following technique. i.e. find the point on the trajectory that is closest to the robot, then find some point on the trajectory ahead of that, then aim your robot there. You can do this with PID control if you'd like. Pure pursuit is an easy way to do all this.
– Ben
Mar 13 '14 at 20:42
• Also note that if you had a holonomic drive robot (with omni wheels for example), that can drive and orient itself separately, this problem is more difficult. Because you need to decide how much you want to translate onto the path, and how much you want to rotate the robot to face the direction of travel. Pure pursuit will not work in this instance and you need to set up some control laws...
– Ben
Mar 13 '14 at 20:45
• Does this method allow the user to generate a path between given start and end configuration $(x_1, y_1, \theta_1)$ and $(x_2, y_2, \theta_2)$? I saw the MATLAB documentation for robotics.PurePursuit and it seems to me that you specify the intial pose and final location (not the pose) whereas what the OP is asking for is the case when both poses (locations and heading directions) are given. May 27 '16 at 7:17
• No, pure pursuit only follows a given trajectory. It simply gives you the instantaneous steering angle you should use. If you have start and end configurations, you can simply create a cubic bezier curve between them, then follow that. Pure pursuit was formulated assuming ackerman steering, so that implies your heading is tangent to the path.
– Ben
May 27 '16 at 17:02