TrIMUpter - GPS Position hold test with ArduIMU + GPS EM406 on Vimeo.

Hello, I have successfully tested the GPS position hold with my TrIMUpter (a VTOL tricopter).

The full stabilisation process is simply done with:
- an ArduIMU+ V2 flat,
- a triple axis magnetometer (HMC5843),
- a GPS EM406,
so this is a very cheap setup.

Below a photo of the setup used:

The TrIMUpter is stabilised by the firmware TriStab v2.1

Some features of the firmware v2.1:

- Full stabilisation process required for a multicopter,
- GPS position hold, tested with the GPS EM406, and compatible with Ublox, NMEA, and Mediatek MTK ,
- a true Heading Lock for the yaw with 2 modes: inertial heading lock or magnetic heading lock,
- self-calibration of the IMU sensors,
- self-test at the startup for valid datas from the HMC5843 triple axis magnetometer,
- the switch from the "stabilisation mode" to "the GPS position hold" is done with switch linked to the ch5,
- the Roll/Pitch PID gains can be easily tuned via the transmitter knob linked to the ch6,
- the main servo mixer is placed in one function "call_servomix()" and can be easily modified for multicopters
and also helicopters...

The firmware TriStab v2.1 can be downloaded here.

Have fun and happy dev,

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • Developer
    Hello, here an interesting ultrasonic sensor which works well with I2C bus (no more I/O required on the ArduIMU). This is the SRF08 ultrasonic range finder which is able to do an altitude hold up to 6 meters. You will find a Arduino sample program here
    I shall soon add this device to the TriStab firmware for a low altitude hold. For a high altitude hold, I think that the GPS is sufficient...
    Regards, Jean-Louis
  • Very cool, thanks a lot for the detailed description. I am currently building an ArduIMU+ based quadrocopter myself, so I'll take a look at your work when I reach the software stage.
  • Developer
    I wonder if anyone has yet tried High Bandwidth Dead Reckoning (HBDR) for arducopters, as used in the UAV Devboard with MatrixPilot ? This should give you position updates 40 times / second using the accelerometer information. The HBDR updates itself from the GPS, taking account of some of the GPS delay.

    A Ublox running at 4 times / second, and not using HBDR, is going to have something like a 1.5 second delay in providing a GPS position. It provides 4 positions per second, but every position has a delay on reality of around 1.5 second. Some people believe the ublox delay is variable, and can stretch to being 3 seconds depending on the dynamics of movement.
  • Developer
    Hello Jack, yes I agree with you about the lag of the EM406, the best way is to use a Ublox or a MTK GPS. You see the lag in the video, to TrIMUpter position hold is not really accurate but the purpose of the test is to test the PID response... My great challenge here in the development was to put all the stabilisation and the GPS code in the ArduIMU memory... This is done now and this demonstrates fully that is is now possible to use only this board as a starting point for VTOL multicopters UAV dev...
    Regards, Jean-Louis
  • Developer
    Hello Sid. To switch from "Stabilisation mode" to "GPS position hold", I have used only one of my Transmitter command button (SW2 of my Graupner MX16s) linked to the ch5... Yes, I agree with you, the use of serial PPM from the RX is a must to save the Atmega328 I/O. This setup with the ArduIMU+ v2 flat is the cheapest setup compared to others and a very good starting point for VTOL multicopters UAV developments...
    Regards, Jean-Louis
  • Surprised the old EM406 with 2 second lag actually did it in ground effect without a barometer for altitude.
  • Developer
    Hello SID, In the full parts list above I have put the GPS, this is the "20 channels EM406 Sirf III receiver with antenna" SEN-09371 at SparkFun. With the TriStab v2.1, the current version is able to do only the position hold, the altitude hold is currently done by the pilot... In the new firmware release v2.2, I shall add the altitude hold feature. I need to do more tests about the altitude lock by mixing the z-accel value with the data from a sensitive altimeter sensor "Altimeter 1A" from DMD. This altimeter gives an analog output of 0.6mv/meter (from 1 to 1850m). The altitude hold with the GPS.altitude is not sufficiently accurate for a VTOL craft just above the ground. Stay tuned...
    Jean-Louis ..
  • Thanks Jean.. So there is no need of ardu mega right.. Only ardu imu flat will do. You have not mentioned GPS in the component list. Can you also share some operating stuff like Stabilize mode and GPS position hold mode and how do you achieve that. Use a three pos switch on Tx ?
    I believe PPM Rx is a must due to i/o restrictions. \
    How about altitude hold with GPS position hold..
  • Developer
    Here the full parts list of electronics and RC componants that I recommend you for building the TrIMUpter (you need to add 3 aluminum squared arms 10x10x450 mm and 2 epoxy board for the center frame):

    FYI, to speed up the development of my TrIMUpter project, I have used a old and ready made frame (from Y-UFO) taken off the shelf and I have removed the old gyros and mixer. This old frame is light and small and this have been very usefull for conducting indoor tests in the lab... But, the Y-UFO frame is too much light, fragile for outdoor and windy flights and not able to carry payload. So today, I recommend strongly to use the same frame that I have built and used for my VTOL Tricopter project (see the dedicated blog about this), this VTOL Tricopter frame is more robust, powerfull and able to carry payload such as a HD video camera...
    Regards, Jean-Louis
  • Developer
    Here a detailled photo about the command of the Yaw servo:

    Regards, Jean-Louis
This reply was deleted.