I am currently an engineering student and a member of the aerospace club of my engineering school (ESILV) which is called LéoFly. We’re a team of 12 students and are building a Fusex (Experimental Rocket) for the launch campaign of the CNES in partnership with Planète Sciences association. The goal of our experiment is to counter the “natural” roll of the rocket after the boost-phase. I am the one who must program the algorithm that counters the roll using a gyroscope and four solenoid valves (2 for the clockwise direction and 2 others for the counter-clockwise direction). I decided to use Simulink to develop the closed loop control using the following image, equations and data.

The image is the cross-section of the rocket with the four fins. This is an example of a “natural” roll in the counter-clockwise direction, so the program gives the order to the two solenoid valves of the clockwise direction to eject gases and cancel the roll of the rocket.

enter image description here

Here are the equations we have started with:

$$\begin{align} \sum C = J \dot\omega &= J \ddot\theta \\ 2F_a R_1 + 4F_b R_2 &= J\ddot\theta \\ \dfrac{1}{J}(2F_a R_1 + 4F_b R_2) &= \ddot\theta \\ \omega(t) = \ddot\theta(t)t + \omega_0 &= \int \ddot\theta(t)\text{d}t \end{align}$$

The $C$’s are the torques considered in the experimentation (Thrust torque and Roll torque), $J$ is the inertia, $\theta$ is the angle and $\theta$ equals the derivative of $\omega$ in the time domain. After that, $F_a$ is the force of thrust, $F_b$ is the force of roll, $R_1$ and $R_2$ are two different radii of the rocket.

Here are the data, taken from our experiments and our rocket.

enter image description here

Then, in Simulink, I’ve crafted the closed loop thanks to the schematic representation, the equations and the data. We don’t want roll, so the input is 0 (in radians per second) and the output is the roll of the rocket (in radians per second). This is a closed loop because of the gyroscope, and the dynamic subsystem is composed of the thrust torque and the roll torque which is the disturbance in this problem.

enter image description here

Thêta-lim is the saturation block that represents the max roll that the rocket can have physically. The White-Noise block is here to add randomness in the representation of the roll torque. The roll torque can be clockwise or counter-clockwise and is never always at the maximum of him (here the Roll Torque block is approximately 10 N.m so the disturbance which is added to the thrust torque is between 10 N.m and -10 N.m). Thrust Torque is approximately equal to 0.29 N.m and the inverse of Inertia is equals to 90 m2.kg-1. The switch subsystem is here just to permit a better implementation in the Arduino to pin the solenoid valves in the program (which will be generated from Simulink). The PID has the next values: $P = 114$ and $I = 28$. I didn’t use the auto-tuner because it gives the values for a step of 1 while we don’t want a step of 1 but an input of 0. Thus, here is what the scope gives me.

enter image description here

It is what we wanted for our roll control system: counter the “natural roll” and converge to an angular velocity of 0 radians per second. Of course, it is a student Fusex so we don’t want to have a perfect curve that converges to 0, we don’t have the time and the money to do that!

But the problem is at $t = 0^+$: I put in Simulink (in the integrator block) a “natural” roll (angular velocity) of 2 radians per second. How is it possible to go from 19 rpm to approximately 0 rpm in 0 seconds? It does not seem physically possible, and we don’t know if it is a problem due to Simulink or if it is a problem in our blocks, if our closed-loop is poorly conceived or if the starting equations are not good. One of our professors told us that it can certainly be the problem of Simulink (because of the side effects apparently).

Thus, what are your impressions about this and what do you recommend me to resolve this (these) problem(s)?

  • $\begingroup$ Who downvoted the question? $\endgroup$
    – user14407
    Jun 3, 2019 at 16:50
  • $\begingroup$ @SamFarjamirad I would like to know! $\endgroup$
    – Axel JOLY
    Jun 3, 2019 at 16:52
  • $\begingroup$ Excellent question, +1. Completely out of my area of expertise, so can't help you other than to say there's no need to apologize for your English which is near-fluent. $\endgroup$
    – Wasabi
    Jun 22, 2019 at 23:20
  • $\begingroup$ have you tried any other gains? can you try replacing your controller with some fixed value (e.g. Zero), to see how the system behaves? These will give you some clues about the dynamics of the system, although may not be necessary for your course. $\endgroup$ Jun 19, 2020 at 20:42
  • $\begingroup$ @Wasabi: I look for derivative blocks whenever I see large unexplained spikes at the start of simulation or when first enabling conditional subsystems. The PID block has a derivative block under its mask. What's your derivative gain? $\endgroup$
    – user30230
    Feb 8, 2021 at 21:44

1 Answer 1


Isn't there something off about your equations already? If I look at the sketch that you provided looks to me as if the forces Fa and Fb should act against each other which would result in opposite signs in the balance equation. And then of course you would also have to take into account the angle of the forces relative to the axis of rotation. But if I see the equation to calculate Fb might also be that they are just put wrong in the sketch.


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.