Just another blog


  • Category Archives Heli
  • Mobile set, helicopter math model and more

    It has been long time since the last post, but unlike the blog, work on the project did not stop :)

    I have ported the control and service application from notebook to a tablet (and for this purpose from Linux to Windows). Porting was easy as the application is written using Qt framework. Now the service application is truly multi-platform.

    Heading controller for semi-assisted flight is more or less finished. It is based on classical state controller but with variable gain (gain depends on main rotor throttle). This is the only way how to assure enough robustness of the controller in all regimes.

    The BeagleBone INS/control SW has a new option to debug it in PC using simulated sensor data. The BeagleBone SW can be built and run in PC. And via IPC (normally used to communicate with motor control thread) it receives simulated sensor data from service application (run in the same PC) and sends back data (the same as sent over wireless). This all is done in real time. With proper mathematical model of helicopter, all algorithms and complete control can be tested without exposing real helicopter to any damage caused by crash landings (for me, most popular form of landing).
    So, now I am working on the mathematical model of the helicopter…

    Will post more information soon, I promise.

  • Acceleration Detection in High Vibration Environments (like RC helicopter)

    This post is again about IMU/INS and related to the previous post.

    When no GPS data is present – or more genrally in IMU mode, estimated helicopter attitude (and heading) depends on measured magnetic field vector and gravity vector (through acceleration). Acceleration is assumed to be roughly equal to gravity vector, but it is not a case when any “long” term unidirectional acceleration is applied – like for example during takeoff, or acceleration from hovering to fast forward flight.

    In such cases, IMU tends to slowly align to the measured acceleration vector (gravity + body acceleration). This leads to estimated attitude error which in turn affects control.

    The only way to prevent this issue is to stop attitude corrections during a period when the acceleration affects measured gravity. This means to continue running attitude estimation but to stop estimation correction. This means to either stop EKF or to throw away quaternion and bias correction.

    To do this acceleration has to be detected. The only problem is that measured acceleration contains high frequency signals (vibration) of huge amplitude (several Gs) even after filtration.

    But this problem can be solved very easily. Integration/summation or averaging filters out the vibrations. Like below:


    This calculates true velocity change -> acceleration over time period (direction of velocity/acceleration is not important). The period can be for example 1 second.

    Because the estimated quaternion and bias correction can be kept in the EKF (until it is decided to be applied to the attitude estimation) it can be thrown away after every second significant acceleration has been detected. Or any more sophisticated algorithm can be introduced.

  • Heli identification and control verification equipment

    I had few days so I integrated the new GPS and created a stand to aid to create a math model of the heli and test control algorithms without any fear of crash (never test control algorithms without previous verification in a safe environment no matter how confident you are about your work – proven by experiments …).

    So, here is the stand :)

    Heli Stand P, Y

    It is home made from waste I found around the house but for now it is more than sufficient.
    It enables free rotations only around yaw and pitch axis (yaw is without limitations and pitch is limited to +-45 degrees) and is “mounted” at the center of gravity of the helicopter.

    It is firm enough to handle 100% engine throttle – which in fact is a bit terrifying. When you see it and feel the wind you realize how powerful and potentially dangerous it is.

    I am planning to add rotation around roll axis to have free rotations in all axes but it will need more sophistication and some new tools.

  • GPS + Control

    Finally, I have some free time to work on heli.
    Now I am testing a new GPS module based uBlox 6M. It is assembled by drotek.fr and seems promising. It comes with UART (3.3V or 5V) and USB. The antenna has good indoor performance (outdoors tests will come in spring :) )

    As the (absolute) heading controller is finished it is time to roll, pitch and thrust controllers.

  • Test flights

    The heli underwent some test flights. Unfortunately I have no videos (I cannot do two things paralelly ;) ) but at least some results are here.

    But first of all, lets show how the heli is controlled. I am using a standard USB joystick and a computer. It is not a good way to control heli outdoors but on the other hand the heli is intended to be a remote controlled UAV (one day). Thus some advanced “ground station” is vital.

    Here goes the picture:heli control

    In the future I am going to make it a bit more compact and mobile (I’ll probably use a tablet :) ).

    Anyway, when it comes to flight results, here it is.

    Manual control works fine and heli immediately reacts on pilot’s commands. But IMU/INS is surpassing some hurdless. There is a huge problem with vibrations. Main rotor causes massive high frequency vibrations. The INS board is placed in a mechanically damped platform in all 3 axes but still, measured vibrations exceed 6 g. High frequency is not such a problem as it can be filtered but another problem are low frequency vibrations around 5 Hz – heli is essentially shaking in all three axis. This can be clearly seen on the artificial horizon.

    Here are some graphs showing vibration problem:

    heli_acc takeoffThe figure shows acceleration in all 3 axis during a (slow) takeoff. It can be seen that vibrations are huge. Another problem is influence of vibrations/shaking on the gyroscopes. They are working around their limits and potentially cannot handle a sudden rotation.


    During fast rotation around yaw axis there are significant vibrations around other two axes. Gyro’s sensing limit is around 6 randians per second. Vibrations are almost 3. And again, this is for 3axial mechanical damping of the INS platform!

    heli_acc_fftHere is some brief frequency analysis of the vibrations. It can be seen that vibrations start at around 20 Hz.

    Compared to quadrocopter, helicopter is a wild beast…

  • Irregular Update

    New INS Board

    As the old board is not reliable a new board with new sensors has been designed. As MLX90609 is out of production ADXRS450 is the new choice. It is pretty expensive but has continues self test and potential failure can be detected. Besides the self test the gyro is factory precalibrated, accurate and comes also in LCC package.

    Now all I have to do is to solder the board. And make it running :)


    Finally, I have implemented TaitBryan angle conversion and added simple EFIS display to the service application.  Will be handy for semi automatic flights. Some minor things are not implemented yet but, generally, every essential information is displayed.


     Magnetometer Calibration Video

    Added a short video showing magnetometer calibration algorithm working real-time. See Calibration section.

  • UML Modelling Tool

    When a software grows keeping track of states and transitions becomes more and more difficult. When simple enumeration – switch – case statemachine is not feasible anymore it is time to look at some UML (statechart) modelling tool. There are tons of them around the Web but unfortunately most of them are not able to generate code for created statemachines in C or C++. If there is some, it costs a fortune like Rhapsody or when free like Quantum Leaps it brings it’s own framework (for pedants, Rhapsody has it’s framework too).

    But when you want to have full control of event flow and generation and statemachine execution. It is a problem. Finally I have found a possible solution. It is called Yakindu. After few tests it looks good enough. I’ll look how to incorporate it to the heli system.

  • New INS Board

    Pitch gyro stop working (actually it has not stopped working entirely but it is not reliable enough anymore). And ADXL335 has to be replaced by something more accurate and tolerant to vibrations. It means that original INS board (designed for quadrocopter) can be used for testing purposes only and will be replaced by something newer, faster, cuter and designed specifically for the heli.