Good day, I hope you are all well :) It's been 7 years since I've last been here haha.

I am currently trying to implement this paper: https://www.mdpi.com/2077-0472/12/3/381

Their mobile manipulator uses MPC to control the end effector of the arm to efficiently spray plants in the vineyard with respect to a reference trajectory. The arm operates in the x-z plane. The distance of the robot's base and end-effector is assumed to be in a constant distance away from the vines in the y-axis.

This is the x-z view of their coordinate frame

The spray frame 𝐿𝑆 is defined at a fixed distance from the spray nozzle, and its position is computed using a single static transformation from the last link of the robot manipulator. The goal is to control the global position of the 𝐿𝑆 frame, which depends on the position of the 𝐿𝐡 frame with respect to 𝐿𝐺, and the pose of the robot arm.

𝑝𝑆,π‘₯=𝑝𝐡,π‘₯+𝑝𝐴,π‘₯ where 𝑝𝐴,π‘₯ is the x coordinate of the position of the 𝐿𝑆 frame with respect to 𝐿𝐡, controlled by the robot arm, and 𝑝𝐡,π‘₯ is the x coordinate of the position of 𝐿𝐡 with respect to 𝐿𝐺, controlled by the mobile base.

This is the y-axis view

This is their discrete state space model State Space Model Author's version of the variables

The output is basically the target x and z coordinates of the end effector.

What confuses me is where the velocity outputs from the MPC controller came from as shown in their diagram. I'm assuming their mobile robot base might be ros based an may need to accept velocity commands as inputs and so does their arm but where did they get the velocity values in their system diagram?

Author's system control diagram

I also plan on doing something similar:

My system control diagram [There's an error in the picture, Forward Kinematics should be Inverse Kinematics]

But what's different with mine is that I have already have a controller for the robot arm that accepts x and z target positions and my partner also already made a controller that takes x positions for the base.

My question is if it is possible for me to directly use the output of the MPC (y matrix) for this or do I have to use the optimize control inputs (u matrix or accelerations). If I have to use the control inputs, can I just integrate them or can I use this equation to get the position inputs needed for my other controllers?

x(k) = 1/2 x_dot_dot(k-1)^2*T + x_dot(k-1)*T+ x(k-1)

My colleague, also said that it was possible the velocities were taken from the optimized state matrix x(k)?

Thank you.


1 Answer 1


My guess is that the paper you try to implement relies on a velocity-based MPC, which is perfectly fine if the dynamics are not too important (small velocities, good low-level controllers).

If your hardware only accepts velocity control you have two choices:

  • use velocity at the MPC control inputs, as in the paper
  • or use dynamic MPC and integrate the control u to produce a velocity. This is what we have done in this paper:

Since our hardware does not yet allow to directly control the robot in acceleration, in order to test M2 we numerically integrated the acceleration signal produced by the VPC and sent the resulting signal to the low-level velocity controller running on our robot.

The same can be done for pure position control, you need to integrate u twice as you have mentioned. You may also simply track the MPC state output x if you have a good position controller, but then this is more moving horizon planning and less MPC.

  • $\begingroup$ Thank you sir :) $\endgroup$ Mar 12 at 10:20

Your Answer

By clicking β€œPost Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.