# Implementing control system to track position and velocity references simultaneously

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?

• I'm not a control systems person, but I'm wondering if there is any expectation that this can work to begin with. These are not independent parameters, one is based on derivatives of the other, so they can't be controlled independently. Also, is the trajectory between t = 60 and 760 seconds ballistic? It looks like there is no thrust. Just what exactly is the algorithm controlling? I think it would be better if you include a clear, complete list and description of the specific input parameters and output parameters that your algorithm is connected to. – uhoh Dec 30 '17 at 6:24
• I barely know anything about controls other than the fact that your tracking error is determined by the order of the system. Make sure your controller can reasonably minimize your error according to what the dynamics dictate. In other words, a PI controller may not be your best option, you may need to make a PID or PD. Again I am not a controls guy so this comment may seem unhelpful, but I think its worth looking at whether or not you are using the correct control algorithm to simultaneously track velocity and position. – aaastro Aug 15 at 15:03
• -1. This question does not make any sense to me as a control engineer. As others point out, you cannot control position and velocity as functions of time. You could try controlling velocity as function of position, but this is only a theoretical exercise, as it doesn’t make any physical sense (thrusters apply forces that result in accelerations). – Ludo Oct 14 at 20:26

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.

If possible, have more accurate actuators and reference models. Improves the tracking of states easier.

But since there is a relationship between position and velocity you cannot properly control both. The reason is simple: If you have a reference trajectory position and velocity, that are both aligned with time. If at any point you are lagging behind in position, you can only compensate by accelerating and thus increasing velocity which would make you deviate from the reference velocity. If you tried only to control the reference velocity, then, over time, your position would increasingly deviate from its reference.

What I'd suggest you consider for such a simplified problem is that, while you generate $$p(t)$$ and $$v(t)$$ as references based on time, you should try to control the velocity as a function of the position, i.e. $$v(p)$$. This makes sense because it is better to be at the relevant height with the relevant speed than at the right time.

How would tracking multiple reference targets be achieved during a real launch event?

That is pretty much proprietary information for each rocket and launching site. But keep in mind a few things: 1. Not only height and speed are monitored, there is also latitude, longitude, absolute speed, vertical speed and horizontal speed. 2. The attitude of the rocket matters a lot. 3. It is not simple to modulate the trust (I don't even think any rocket can control inner pressure with a reference). And turning on and off the thrusters takes long if possible. 4. Any modern rocket controls the pointing of the thrust, but in a very limited manner, withing a small angle, and the direction can only (and should only) change slowly.

• There’s no way to control velocity in any realistic physical model though. – Ludo Oct 14 at 20:27
• @Ludo: I'm unsure what you mean by this. You do know that airplanes, cars and so on control velocity right? Surely, it is not perfect, but this is a control theory/engineering question, not a pure physics problem. – Mefitico Oct 14 at 20:58
• I mean that a system model where $v=u$, I.e. where velocity is directly imposed, doesn’t make sense as a model. Cars and airplanes control acceleration to achieve the desired velocity. I realize now though that you might mean “control” as the controlled state variable, where I mean “control” as the control input. – Ludo Oct 15 at 5:40

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?

You cannot. Position and velocity are dependent variables (velocity is by definition the time derivative of the position), so controlling one will affect the other and vice versa (see Mefitico's answer).

As a theoretical exercise you could parameterize the trajectory to get velocity as function of position as suggested by Mefitico, but this approach does not make any physical sense: physical systems either allow you to apply a force, yielding an acceleration (anything that behaves like a mass, $$a = \frac{1}{m}F$$), or displace it yielding a force (spring-like things, $$F = Kx$$).

So I suggest you model your rocket first as a point mass with an omnidirectional thruster and see if you can track your trajectory. Then gradually refine your model from there.

• To be clear: I'm not suggesting that he should create a system where the velocity physical behavior is a function of the position, but rather, as it is a control systems question, that he discards controlling the position and attempt to control the velocity only, but then use a reference velocity which should be computed on-board based on the position, according to the pre-generated profile he created. – Mefitico Oct 14 at 21:14