Resolved Rate Motion Control in 2D


We're going to introduce an important concept called resolved rate motion control. It sounds complex but its really quite simple to understand. For a lot of real world problems, we might be interested in the robot end effector moving along a straight line in Cartesian space.

Now we know that if we move, for instance, joint angle 1, we move joint angle 2, then the end of the robot tends to move in arcs in space. We don't want it to move in arcs. We want it to move along a straight a line. So we began to specify the Cartesian velocity that we want the end effector to follow. We want to convert that then to the required joint velocity.

We already touched on this. We take the desired velocity nu, we multiply it by the inverse Jacobian and we get the joint velocity that we need. We compute that inverse Jacobian, we can write it out symbolically as I had done here. Now what I need to do is have the robot's hardware move the joints at this desired velocity. But after the robot's been moving for a short period, the joint angle vector Q will have changed so that that Jacobian that I've computed will no longer be appropriate. So what I need to do then is periodically update the Jacobian matrix. And use that when I'm computing the desired robot velocity vector Qdot. So it's a matter of moving the robot joints, updating the Jacobian, computing the robot joint velocity, moving the joints, updating the Jacobian and so on. Repeat this indefinitely. 

Most control algorithms that run on a digital computer a typically discrete time algorithms. That is they compute things at discrete time intervals. So here we have a time line and we indicated a number of time steps. Time 1, time 2, time 3 and so on . The duration of these time steps, I’m going to denote by the symbol delta T. It might be 1/10 of a second it might be a thousandth of a second. Something like that. At every time step what I'm going to do is to take the current value of the joint angles and call that QK. That stands for joint angles at the time K.

To compute the Jacobian, take the inverse, multiply it by the velocity that I want to achieve and compute the Qdot that I need to achieve at this particular time step. What I'm going to do is take that joint velocity Qdot I'm going to multiply it by delta T so that will give me a joint angle displacement; that is how much I would want the joints to move over the coming time interval.

I add that to the current value of the joint angles QK. And that gives me the robot’s target. That's where I want the robot joint angles to be at time K +1. Then I tell the robot hardware to move the joints to this new joint angle configuration over the time interval delta T. And then I'll repeat this steps for as long as necessary. 


There is no code in this lesson.

We will introduce resolved-rate motion control which is a classical Jacobian-based scheme for moving the end-effector at a specified velocity without having to compute inverse kinematics.

Professor Peter Corke

Professor of Robotic Vision at QUT and Director of the Australian Centre for Robotic Vision (ACRV). Peter is also a Fellow of the IEEE, a senior Fellow of the Higher Education Academy, and on the editorial board of several robotics research journals.

Skill level

This content assumes high school level mathematics and requires an understanding of undergraduate-level mathematics; for example, linear algebra - matrices, vectors, complex numbers, vector calculus and MATLAB programming.

More information...

Rate this lesson


Check your understanding


  1. shivaji says:

    Hello Prof,

    what are the limitations of resolved rate motion control ?

    Is it applicable for only straight line motion ?

    1. Peter Corke says:

      Great question. Resolved rate motion control lets you specify the end-effector velocity, so a constant value gives you a line. However if the velocity is a function of time you can create arbitrary shapes: xdot=r*cos(t), ydot=r*sin(t) would give you a circle. Over a long period of time with a periodic motion you might get some drift. An alternative is to make the velocity proportional to the error between a desired trajectory and the actual robot end-effector pose.

  2. sonasec says:

    Thank you very much about this topic,
    What is the velocity in which this method become inapplicable and must using the dynamic control?

    1. Peter Corke says:

      There is no hard and fast rule, sorry! I would look at the trajectories involved and estimate the dynamic torques due to inertia, gravity and Coriolis/centripetal effects. If they are significantly greater than say friction torques then maybe dynamic control would help. Remember too that dynamic control is a spectrum, from simple gravity compensation through to say full computed torque control.

  3. shivaji says:

    Hello Prof,

    I did Cartesian path planning straight line motion using resolved rate motion control of 6 axis industrial robot. I used Jacobian pseudo inverse for that. when I plotted the data, at singular values (in my case axis 4 and axis 6 are aligned) the time is not linear. I am getting something like stair case profile.

    When I send these robot joint angles to real robot, the motion is not same as in MATLAB.

    Is pseudo inverse does not work in real time ?

    Can you please explain about the above case ?

    1. Peter Corke says:

      There’s not really information here to comment or explain. Can you provide the full code example? Questions like this might be better on the Toolbox support forum at tiny.cc/rvcforum. Whether pseudo inverse is “real time” depends on the implementation you use and your sample rate.

  4. Storrie says:

    Hi Peter! your material and books are great! I am trying to plot a straight line up a wall with the Baxter and get its end affector to maintain the same pose facing directly at the wall as if scanning it just using the pitch joints in the baxter. This simplifies it to a 3DOF DH table. I am wondering how to I apply this to fixed path co-ordinates? how do i implement this in a path plot. can you point me in the direction of some material on how to do this.

    1. Peter Corke says:

      If I understand correctly, you want to use just 4 joints to move the wrist along a line, then use the 3 wrist joints to control the orientation? You could do this but it seems overly complex. Here’s how I’d do it:

      >> mdl_baxter % load the Baxter kinematic model, we’ll use the left arm
      >> T1=SE3(0.8, 0, 0)*SE3.Ry(pi/2) % define first point on the wall, the rotation is to ensure tool points to wall
      T1 =
      0 0 1 0.8
      0 1 0 0
      -1 0 0 0
      0 0 0 1
      >> T2=SE3(0.8, 0, 0.5)*SE3.Ry(pi/2) % define second point on the wall, a bit higher up
      T2 =
      0 0 1 0.8
      0 1 0 0
      -1 0 0 0.5
      0 0 0 1
      >> T = ctraj(T1,T2, 100); % create a Cartesian (straight line) path in 100 steps, a sequence of poses
      >> q=left.ikine(T); % do the inverse kinematics for each pose
      >> left.plot(q) % animate the left arm doing this motion

Leave a comment