I've been trying to implement a PI (proportional-integral) controller to allow a launch vehicle to track 2 reference states simultaneous, namely position and velocity, so that the launch vehicle will end its ascent burn in a stable circular orbit at a 600km orbital altitude. I tried doing this by first solving an optimal guidance problem which provides the required reference position, reference velocity and reference control input (which is used as feedforward control) for the rocket to follow along its ascent. The PI controller is then used primarily to reject disturbances, with the feedforward control providing the bulk of the control input.
What I've noticed is that the PI controller does a good job at tracking 1 reference at a time (i.e. tracking a position reference or a velocity reference), but if I try and track both position and velocity at the same time, it gives disappointing results, with only 1 of the reference states being tracked accurately.
Attached is an example of implementing the controller to track only a position reference. Radial position is given in the left plot, and total velocity is given in the right plot, where the blue plots are the references to follow, and the orange plots are the actual trajectories taken by the rocket.
As can be seen, the controller tracks the position reference very well, but isn't able to track the velocity reference with good accuracy.
If we then try to track just the velocity reference, we have the following plots, where the velocity is tracked well, but the position deviates from our desired trajectory.
As such, I was wondering if there is a way to accurately track both position and velocity for the launch vehicle's ascent to orbit. How would tracking multiple reference targets be achieved during a real launch event?