Goal: Use model rocket motors to make the “rocket” turn to a specified angle.
Why?: The rocket needs to land upright. Controlling rocket attitude is the first step to making that happen. This test will also determine if the rocket’s servos are fast enough to steadily control the thrust vector.
We were able to consistently make the rocket point towards the correct angle in roughly 3 seconds, within a few degrees of error. The given servo limits us to a minimum settling time of 3 seconds for rotations up to 180 degrees. This is just enough time to reorient the rocket before the motors stop burning. This is obviously not fast enough for the final design, which will require a faster settling time so that the rocket has time to right itself and then decelerate. Controlling orientation prior to motor ignition will be essential to minimize the loss of deceleration when the rocket is reorienting itself. Nonetheless, the controller performed as expected.
Next steps: Can we control the vertical force with these motors?
This experiment tests whether a servo can control the model rocket motor to make the rocket rotate to a desired angle. This simulates the rocket descending at an angle, where it will have to orient itself vertically in order to decelerate for a soft landing. Our test rocket was constrained to one axis of rotation.
We tested the orientation control before vertical control for several reasons. First, the test setup for the orientation test is much simpler than the current design for the vertical controller. We also don’t need to build a tall rig to drop the rocket. Second, this allows us to test the servo specs we would need to control the motors. The speed of the actuators is the limiting factor for this project. If the servo is too slow or has too little torque, the motor could overpower the servo and become unstable. Lastly, the data could also show that the motor’s non-linear thrust is not controllable for servos within our budget, so this test determines the overall feasibility of this project.
We designed and machined a new sleeve to hold the motor, a mounting plate for the servo, a linkage to connect the servo to the sleeve, and a rig that would constrain the system to one axis of rotation. We designed the system so that the relationship between the angle of the servo, which we control, and the angle of the sleeve was a simple arcsine function.
One limitation of this test is that it assumes a constant center of mass of the rocket, as simulated by the rod at the rocket’s axis of rotation. This, however, is not a proper assumption since the center of mass will move as the motors are actuated. This test assumes this change in center of mass is negligible, but we will have to investigate the effects of this assumption with further testing and simulation.
The rotational inertia of the rocket will also be different than the inertia of this system, but the test will still show if the servo specs are sufficient for this test setup.
Control and Simulation
The controller used for this test was a two mode lag-lead compensator. There was one controller to control the rocket until the initial spike in thrust was over, and another to control it once the thrust was more constant. The initial controller attempts to keep the rocket from rotating at all, since we do not want the large spike in thrust to cause the rocket to spin out of control. After the initial spike is over, the second controller attempts to rotate the rocket to the specified angle. The Simulink block diagram, MATLAB code and Arduino code can all be found here [Dropbox].
The Simulink simulations account for the maximum speed and angle of the servo, servo deadband, and include the time variance of the thrust. Servo speed proved to be a critical factor in decreasing the settling time of the controller. The servo speed was tested with the load of the motors prior to simulation and controller tuning.
To measure the state of the rocket (angle, angular velocity), we used the GY-521 breakout board for the MPU-6050 which includes a gyroscope. We accurately calibrated the gyroscope and optimized the Arduino code for minimal loop time, allowing us to integrate the gyroscope to measure the rocket angle without drift.
Below is the circuit used in this test.
The servo tested is a HiTec HS-5485HB digital servo.
For this test, optimizing the Arduino code for minimal loop time was critical for accurately measuring the angle of the rocket. We also wrote separate code for testing the servo and calibrating the gyroscope. Data acquisition did not change since the static fire test. The Arduino writes the data to LabVIEW via the serial port, then LabVIEW records and saves the data. The LabVIEW and Arduino code for this test are available here [Dropbox].
We did four tests, two with the system turning to 90 degrees and two with the system turning to 180 degrees. The two videos above show one of the 90 degree tests and one of the 180 degree tests.
Graphs of the test data are also shown above. The graphs and the videos matched the simulations, settling to the desired angle within a few degrees of error in roughly 3 seconds.
Fortunately the servo we used had enough power to control the motor. This gives us a good starting point to find servos for future tests. Increasing the speed of the servo has the greatest impact on settling time and steady state error, so finding servos with higher torque and lower travel time will improve the controller greatly.
This test confirmed that our current design is feasible and that we can control the rotation of the rocket. The next step is to determine if we can control the vertical force output with three motors and three servos.