While going through the Sebastian Thrun‘s AI for Robotics class, I came across a programming assignment that required implementing basic kinematics of a simple robot in 2D space. The robot uses bicycle model. Here is the underlying geometry that give rise to the basic equations used in the class.
As shown in Fig. 1, the robot lies in a global cartesian coordinate space and is characterized by its position and heading, , where is the heading relative to -axis. The length of the robot is and its velocity along heading direction is .
Let’s assume the robot’s origin (center of rear axle in Fig. 1) moves a distance along the heading direction. We are interested in the turn angle that the robot incurred during the movement.
Fig. 2 shows the bicycle model of the robot in Fig. 1. From Fig. 2, the angular velocity of the robot can be expressed as
where is the radius of turn.
We can also write,
Using (1) and (2), the turn angle is given by
where integration is performed over the time during which the rear wheel moves distance .
Coordinates of center of turn can be easily computed using Fig. 2,
New heading of the robot after the turn can be obtained by adding from (3) and original heading . Updated robot position and heading are given by
From (3), when . We can approximate this as just a motion in straight line along heading direction. So,