Mobile Robot Kinematics

Subscribe Send me a message home page tags


#robotics  #kinematics 

Introduction

In this post, we will present a quick overview of mobile robot kinematics. The content of this post is based on the book Introduction to Autonomous Mobile Robots .

At a high level, what we want to understand is how the commands that control the motors on the robot are translated into movements of the robot in the environment.

There are three "layers" to this problem:

At the motor level, there is not much we can do for simple motors. Generally, we can use commands to control the rotational speed of the motor or the motor position directly. Moving to the robot level, we have concepts of tasks or activities. For example, a mobile robot can move forward or backward and rotate at a certain speed. Finally, at the motion control level, we have high-level concepts such as path planning and trajectory following. For example, given the current state of the robot, how can we make it move from point A to point B. As we will see, each layer provides the capability for the upstream layer.

In this post, the discussion is based on differential wheeled robots as it's the one studied in the book. A differential wheeled robot is a robot that has two standard fixed wheels. The control of the robot is based on the relative rotational speed of the two motors. Here are some examples:

differential-wheeled-robot.jpg

First, we need to have a model for our robot. The radius of the wheel is \(r\), and the distance between the two wheels is \(2l\). The origin of the robot reference frame is \(P\). We need to define the forward direction too: the forward direction of the robot is the direction of the \(X_R\) axis in the robot reference. The figure below shows the model of the robot:

robot_parameters.jpg

We also need a global reference to locate the robot. The robot pose is represented by \((x, y, \theta)\).

global_reference.jpg

Coordinate Transformation

There are at least two references when controlling a robot:

The location transformation between these two references is straightforward. The coordinate of the "center" of the robot is the origin of the robot frame of reference.

To transform the velocity vector, we need to use the orthogonal rotation matrix:

$$ R(\theta) = \begin{bmatrix} \cos \theta & \sin \theta & 0 \\ -\sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{bmatrix} $$

And we have

$$ \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix}_R = R(\theta) \begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix}_I $$

From Motor State to Robot State

Most of the time, for a differential wheeled robot, we only have two control knobs: the rotational speed of the two wheels. Let \(\dot{\phi_1}\) and \(\dot{\phi_2}\) denote the rotational speed of the right wheel and left wheel respectively. The linear speed is then given by the formula

$$ v = r \cdot \dot{ \phi } $$

The linear speed of the contact point between the wheel and the floor contributes to the linear speed and the rotational speed of the robot.

linear_speed_and_rotation_speed.jpg

Note that because the wheels are fixed standard wheels, the robot can only move forward or backward in the robot reference. We can then transform from the robot reference to the global reference by mutiplying the inverse of the rotational matrix:

$$ S_I(\dot{x}, \dot{y}, \dot{\theta}) = R(\theta)^{-1} \begin{bmatrix} \frac{r\dot{\phi_1}}{2} & + & \frac{r\dot{\phi_2}}{2} \\ & 0 & \\ \frac{r\dot{\phi_1}}{2l} & - & \frac{r\dot{\phi_2}}{2l} \end{bmatrix} $$

Summary - This section describes how the controls on the rotational speed of the two wheels translate to the state of the robot in the global reference, which is characterized by the linear speed \(\dot{x}\), \(\dot{y}\), and rotational speed \(\dot{\theta}\) of the robot.

From Robot State to Motion Control

The problem we want to address is given the current pose of the robot, how to move it to a goal location?

motion_control.png

As we can see in the figure above, there may exist multiple paths. Which one should we choose? Paths that consist of straight segments are easier to follow. We set the appropriate value for the velocity and just let the robot move. When the robot arrives at the endpoint of the segment, it needs to rotate, which is also easy to do with differential wheeled robots. A curved path is harder to follow. We can imagine that we need to constantly adjust the linear velocity and rotational speed of the robots.

Selecting the path is also an optimization problem. For example, do we prefer a smooth path? short path? Do we care about continuity/discontinuitty in the execution? Is rotation with a large angle a concern?

Finally, there is one fundamental difference between the curved approach and the segment approach. There is an implicit planning component in the segment approach because we need to calculate the waypoints beforehand. This introduces another layer of complexity: in the real world, the execution is never perfect. If we have a pre-calculated plan, we need to correct the error along the way during the execution. The curved approach does not have this issue because the velocity adjustment is based on the current pose of the robot and the target location and it occurs constantly.

The curved path approach is a type of feedback motion control. The kinematic model is built in polar coordinates (see figure below). The control law is

$$ \begin{eqnarray} v & = & k_\rho \rho \\ \omega & = & k_\alpha \alpha + k_\beta \beta \end{eqnarray} $$

Intuitively, if the robot is close to the goal location (i.e. small \(\rho\)), it should move more slowly so that it does not overshoot. So setting the linear velocity proportional to the distance makes sense. A similar argument applies to the rotational speed.

kinematic_model.jpg

Summary - This section describes how to set the linear velocity and rotational speed of the robot so that it can follow a particular path from the current location to the target location.

----- END -----

Welcome to join reddit self-learning community.
Send me a message Subscribe to blog updates

Want some fun stuff?

/static/shopping_demo.png