Crius All In One GPS and Installation Howto – MultiWii – Part 1

July 10, 2012 21:07 | By | 44 Comments


This tutorial has been rewritten for MultiWii 2.2, taking into account the new native support for uBlox GPS modules! Please follow the instructions in the new HowTo and consider the article below to be outdated.

We’ve left the old article intact below in the unlikely event that someone wants to use MultiWii 2.0 or 2.1 in favor for the much improved version 2.2. It’s striked through for a reason though, so if you’re hesitant whether the jump to 2.2 is justified: It most definitely is.

But if you really want to read the oudated info, here you go :)



Aaah, the Crius AIO – it promises loads of functionality with its many ports. But how do you hook up that GPS module anyway? We’ll show you how in this tutorial.

The Crius All In One (AIO) Flight Controller arrived in our mailbox and being the cost-aware model pilots we are, we didn’t opt for the $70  AIO Addon board with GPS. Instead we ordered a much cheaper u-blox based 10Hz GPS module with a serial interface. After all, the AIO uses an Atmega 2560, which means ample serial ports and no need for an extra serial-to-I2C board – something you would need for the Crius SE or Crius Lite.

But saving that money means several extra steps you need to perform to get the GPS running. And on top of that you’ll have to deal with the AIO controller itself, which is brand new and few tutorials are available.

So we figured, before going into our review we’ll share what we learnt setting up the new Crius AIO controller. At the end of this howto you will be flying with your QuadX copter, including GPS hold and GPS return home functionality!

Kudos and thanks go to RCG User Quadframes and the other fellow AIO users for various bits and pieces of information that helped to get this tutorial together.


Configuring the GPS

The first order of business is to configure the u-box based GPS module from its default 9600 baud serial speed and  1Hz update rate to a more useful 115200 baud at 10 Hz update rate. To do this, you will need to connect the GPS module to a USB-to-Serial adapter, for example the little USB FTDI interface we used to set up the Crius Lite. Connect GND to GND, 5V to 5V,  RX to TX and TX to RX (obviously).

After that, download the u-blox configuration software at

This program allows you to connect to the serial port of your USB to serial interface. Set it to 9600 baud, 8 bit, No parity, no flow control for now, as that’s what the u-blox module uses by default. You don’t need to change anything but the baud rate really. If that goes well, you should see GPS information streaming in, the little monitoring windows should jump to life. If that doesn’t work, try power cycling the GPS.

Once you have the GPS working with your PC, you need to go into the configuration window, set the baud rate and update speed, and save the configuration into the GPS memory. You’ll notice that there’s a small button cell on the GPS module, this actually powers the configuration memory because otherwise the u-blox would revert to default configuration at every power loss.

The Configuration Menu can be accessed via “View”, “Configuration View”

Now select PRT (Ports) from the list on the left, the Target is UART1, and the baud rate is 115200. Leave the protocol options unchanged. Now Press the SEND button below the list on the left. If you do not press SEND, the values will not be changed! (Note that the send button is on the left side, below the list of configuration categories. In these screenshots it is grayed out.)

IMPORTANT: After switching the baud rate, your serial connection will be broken! You will need to switch the PC program to 115200 baud and reconnect before the next step!

Now scroll the left hand list down to RATE (Rates) and enter 100 ms for the Measurement Period, 10.00 Hz Measurement Frequency, 2 cycles Navigation Rate, 5.00 Hz Navigation Frequency. Again, do not forget to press SEND when done. Now all that’s left is to write the configuration to the configuration memory.

Scroll the list up to CFG (Configuration), select “Save current configuration”, and press the SEND button.

Now the GPS module is ready for action.

Wiring the GPS module

The GPS needs to be connected to the RX2 and TX2 ports on the Crius AIO controller. At the same time, 5V power has to be supplied as well, but the serial ports 1, 2 and 3 on that connector don’t offer Vcc (they can if you power the board externally and remove the yellow jumper, but that’s for another tutorial) – so the easiest way is to just use the 5V and GND pins of the I2C port. This is simple because Crius was so nice to supply all the molex connectors needed with the board – all you have to do is switch around the pins a bit.

This is the simple solution to get a serial GPS working: Use 5V and GND from the I2C port, and connect the GPS to the RX2 and TX2 ports on the Crius AIO

Flashing MultiWii 2.1

We still need to tell MultiWii about all this, so that means downloading the sourcecode from

- Even though the AIO comes standard with MultiWii 2.0, we used the latest release candidate of MultiWii 2.1

The second needed piece of software is the Arduino SDK, which can be downloaded for free.

For Windows:
For Mac:
For Linux 32bit:
For Linux 64bit:

Connect your Crius AIO board using the on-board USB connector, unpack the sourcecode, launch the Arduino IDE, and open any of the MultiWii source files. This will load up the entire project. Switch to the tab def.h , scroll to the “IMU Orientations and Sensors” section and copy/paste the following code:

UPDATE: The following code is already part of MultiWii 2.1 Final and does NOT need to be pasted into def.h !!

#if defined(CRIUS_AIO_PRO_V1) 
#define MPU6050 
#define HMC5883 
#define MS561101BA 
#define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = -X; accADC[PITCH] = -Y; accADC[YAW] = Z;} 
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = -X; gyroADC[YAW] = -Z;} 
#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = -Z;} 
#define MPU6050_EN_I2C_BYPASS // MAG connected to the AUX I2C bus of MPU6050 

Now switch to the tab “config.h” and insert this under “Boards and Sensors definitions”:

#define CRIUS_AIO_PRO_V1 // Crius Multiwii AIO PRO v1.

Note for MultiWii 2.1 Final: This line already exists, you just need to uncomment it.

For the GPS, scroll down to the GPS section in config.h and set the following:

#define GPS_SERIAL 2
#define GPS_BAUD 115200

Note that you’ll want to do the usual other configuration stuff in config.h, like selecting your airframe type, or changing the MINTHROTTLE and related values if needed for your ESC.

Compile the software and press upload to flash your AIO. That’s all there’s to be done here.


Installing the AIO controller

The white arrow points to the front of the aircraft. The motor outputs for a Quad X copter are defined as follows:

Use the outputs 2, 5, 6 and 3 for a Quad X airframe.

Incidentally, these outputs are right next to each other on the Crius AIO controller. After connecting the motors, it’s a breeze to get your receiver hooked up. There is only one ground and one V+ pin in use, every channel only uses the signal pin of your receiver. Just use the supplied cables, as they come pre-made for this kind of connection setup.

The finished setup. Note the motor connectors on the bottom left, the inputs for the receiver are on the left, the GPS power comes from the molex connector to the right, and the GPS serial data goes into the RX2/TX2 pins on the molex connector on the top side.

Connect your USB cable and start the MultiWii configuration tool for MultiWii 2.1, connect to the serial port, click “Start”, and check if all your sensor values are visible, and whether the GPS sensor has been recognized. If you’re outside, you should start to see the GPS satellite counter increasing and, new in the MultiWii 2.1 config tool, your coordinates, altitude and speed.

From here on everything works like with the Crius SE or Crius Lite: Set up your switches to activate autolevel, altitude hold, GPS position hold and GPS return home functions as desired. Then, tune your PID values: The defaults are most likely okay or a tad too high, quick oscillations mean a too high P value for pitch and roll, slow oscillations mean a too high I or D value. Above all, make sure your props are balanced!

How does the Crius AIO perform, how stable is it? At this point we’re pretty happy with it – but a full review is coming up after some more extensive flight tests later this week.

That’s it, happy flying and, thanks to GPS, happy auto-return-home!

Category: Howto

About the Author ()

FPVCentral is a private, independent news and review site for all things related to First Person View RC model flight. Covering everything from hobby, commercial and military drones, RC models and electronics related to FPV flight, we are not sponsored by any manufacturer or affiliated with any company or project.

Comments (44)

Trackback URL | Comments RSS Feed

  1. jack says:

    hello fvpcentral i have questions
    how to wiring this board with telemetry like xbee and how to configure the code/firmwara

    • fpvcentral says:

      If you want to install an XBee module then I recommend you to get the addon board that contains GPS and the xbee socket:

      The only downside is that it’s $69, but it gets rid of all your wiring problems and is a nice, clean solution.

      The GPS on that board should be preprogrammed already – but I have no confirmation yet. As for the XBee, there has been a new serial telemetry protocol developed for MultiWii 2.1 which I believe is meant to work for XBee, but I haven’t tried that out yet.

  2. Justin says:


    Where do I find the tab def.h in Arduino?

    Much appreciated!!!

  3. Justin says:

    how do I fix this error?

    MultiWii_2_1:1011: error: ‘writeMotors’ was not declared in this scope

    Thank you!

  4. Justin says:

    Thank you for all of the helpful information. Does anyone happen to know how to get this Crius AIO to work with ER9X so that you can use the different modes of this flight controller?

    much appreciated!!!

  5. lordgotham says:


    have you got the same howto for crius multiwii se V1.O with crius i2c gps module, and crius gps blox

    because i see everywhere the all in one but not the se :(

    thank you man

    • fpvcentral says:

      AFAIK that’s because the Crius SE only supports GPS via I2C, and the I2C connection isn’t fed to a dedicated connector. Instead you have to connect the I2C port of the I2C-GPS Nav Module to various pins on the Crius SE. Someone posted a picture on RCGroups of such a setup, but I haven’t tried to replicate that.

  6. Justin says:

    Here’s a great way to setup ER9X’s modes, works great!:

  7. Justin says:


    Is there a way to plug the GPS CN-06 directly into the 12C port
    on the Crius AIO? Powering externally with a standalone BEC is not a hassle.
    -much appreciated!

    • fpvcentral says:

      Not directly, but they do sell a small serial->i2c board that goes inbetween.

      • Justin says:

        Thank you for the reply :)

        I have a Crius AIO and was wondering how I could connect it with my Multiwii FC I2C-GPS NAV Module & Multiwii MWC FC CN-06 GPS Receiver?
        How would it be wired together using this 12C-GPS NAV module.

        Very much appreciated any advice!

        • fpvcentral says:

          The connection is quite simple: Connect the GPS receiver to the I2C-GPS Nav Module (serial connection) and then the I2C-GPS Nav Module to the Crius AIO (I2C connection)

          Note that it’s better to connect the GPS directly via serial port. I2C conversion is definitely an additional overhead.

  8. Luis says:

    What does navigation rate mean?
    Does it measure and send the position 5times per second or is that more complicated?

    • fpvcentral says:

      The u-blox chip has the ability to integrate external gyro and wheel rotation sensor data from a car into its navigation calculations. This is called ADR, or “Automotive Dead Reckoning”. What it does is it allows the GPS to output location data despite the car going through a tunnel. As soon as GPS fix is lost, the u-blox does a sort of inertia-based navigation. You have to feed it gyro and speed data via a special interface though.

      The rate at which it calculates these dead-reckoning position updates is called navigation update.

      This feature hasn’t been used for multicopter flying yet AFAIK.

  9. Pavuk says:

    Hi, thanx for introductin.

    I don’t know why but I’m unable to change Navigation rate from 1. It works with measurement period 100ms and NR 1, but box with NR goes pink (probably invalid parameter). By the datasheet it should work like you wrote. 10hz measurement/5hz navigation.

    • Lancer says:

      I am having the same problem and cannot get the Navigation rate to 2cyc and the Frequency to 5.00hz. It always resets back to 1.00 and 10.00hz and won’t work when connected to the Crius AIO

      I tried to connect the CN-06 directly as per the method here and it wouldn’t work either so I decided to try with the Nav Module and I’m still having trouble!!

      Anyone got any idea how to get it working??

      Thanks, Lance

  10. John Boy says:

    Great How-To… ;)

    When do we get Part 2?


  11. Higear says:

    Do these instructions also apply to the AIO v1.1 board?

  12. Higear says:

    I was browsing through the LEA-6 datasheet and happened to notice that the one for sale on rctimer is a -6H which does not have the 10Mhz option. Has anyone got a -6H into 10Mhz or got an Extend Board with a -6T?

    From the LEA-6 datasheet…

    1.15.2 Timepulse and frequency reference:

    LEA-6T not only features the new u-blox 6 engine with its extra acquisition sensitivity, it also comes with a 2nd
    timepulse output, which can be configured from 0.25 Hz up to 10 MHz. One timepulse can be used for time
    synchronization (i.e. 1 pulse per second), while the 2nd timepulse can be used with LEA-6T as a reference
    frequency in the MHz range. A timepulse in the MHz range provides excellent long-term frequency accuracy and
    stability. This brings cost savings for LEA-6T customers since it is no longer necessary to generate an additional
    reference frequency with their circuitry.

  13. Higear says:

    BTW – this also seems to apply to the NEO-6M.
    The 10Mhz option is for the NEO-6T.

  14. Higear says:

    MY BAD! :(

    The data sheets says on both say .25hz-1khz.
    I got my Hz & Mhz confused. My brain Hertz!

  15. koda says:

    Is it correctly writen to conect gps to the AIO board reversaly: RX to TX and TX to RX, or its a mistake?

  16. torkaman says:

    hi is there a step by step foe dummies for flashing both the crius aiop and the gps module? also i bought the uav package that came with telemetry and it did not come with any instructions at all.

  17. Dave says:

    This is a great explanation for me having never done any of this before. I’m interested to know how I would set up my transmitter to enable the GPS return home feature? I cant find any details on this anywhere I’m wondering if it will show up in the multiwii config but as I havent bought anything yet I cant see how easy this would be to enable. Thanks Dave

  18. Blasterke says:


    How did you connect the usb/ftdi to the gps chip? ftdi connector has 6 connections labeled: DTR, RXI, TXO, 5V, CTS, GND

    I’am assuming 5V is 5V (or Vcc), GND is GND, RXI is RX and TXO is TX
    But what to do with the other 2 (CTS and DTR)
    Do I need to use them also, I’am not sure.

    Thanks for this helpfull guide, I bought exactly the same stuff at rctimer and loving it.

    • fpvcentral says:

      You’ll want to use a serial port, not the ftdi port. There you’ll only need RX and TX. The only other thing you’ll need is GND and +5V, which you can take from the I2C port for example.

Leave a Reply