Learning Robotics using Python
上QQ阅读APP看书,第一时间看更新

Inverse kinematics

The forward kinematics equation provides an updated pose at a given wheel speed. We can now think about the inverse problem.

Stand in pose (x, y, θ) at time t and determine the V-left and V-right control parameters so that the pose at time t + δt is (x', y', θ').

In differential drive systems, this problem may not always have a solution because this kind of robot can't be moved to any pose by simply setting the wheel velocity. It's because of the nonholonomic robots' constraints.

In nonholonomic robots, there are some ways to increase the constrained mobility if we allow a sequence of different (V-left, V-right) movements. If we insert the values from equations (12) and (15), we can identify some special movements that we can program:

  • If V-right = V-left => nr = nl => R = ∞, ωδT = 0 =>, this means that the robot moves in a straight line and θ remains the same
  • If V-right = -V-left => nr = -nl => R=0, ωδt = 2nl * step / l and => x' = x, y' = y, θ' = θ + ωδt =>, this means the robot rotates in position around ICC-that is, any θ is reachable, while (x, y) remains unchanged

Combining these operations, the following steps can be used to reach any target pose from the starting pose:

  1. Rotate until the robot's orientation coincides with the line leading from the starting position to the target position, V-right = -V-left = V-rot.
  2. Drive straight until the robot's position coincides with the target position, V-right = V-left = V-ahead.
  3. Rotate until the robot's orientation coincides with the target orientation, V-right = -V-left = V-rot. Here, V-rot and V-ahead can be chosen arbitrarily.

We will see how we can implement the kinematics equation of the robot using ROS in the upcoming chapters.