High Accuracy Aftermarket IMU/Gyro

Hi guys,

We are looking to upgrade the position estimation of the blueROV2. We plan to order a Waterlinked DVL soon and want to also upgrade the IMU/gyro onboard.

What is the highest precision IMU/gyro sensor available that has been tested and verified with the blueROV2? Want to try and get something that will pose minimal integration issues

Let’s say our budget tops out at around $3-5k.

Hi @cmarq,

I’ve asked about this internally and will get back to you if there are any in particular that we know about or have tried.

I’m told we have an xsense mti that we tried to integrate as an external AHRS during Navigator testing, but ran out of time to get fully working.

For minimal integration work you’ll likely want a sensor that’s already supported in the ArduPilot codebase, in which case I recommend starting by checking the AP_InertialSensor library :slight_smile:

Hi Eliot,

That is useful info. What would be the process for integrating an external IMU if it is included in the AP_InertialSensor library?

I was assuming it would be auto-detected once connected to an appropriate port, but that may not be the case. I’ve since been told

We have apparently previously tried to integrate an “xsense mti” during Navigator testing, but ran out of time to get it fully working. “yost” and “PNI” are other potentially relevant suppliers, but I don’t believe either has an existing integration with ArduPilot.

Hi Eliot,

Per your last response, we went ahead and purchased an ADIS16475 IMU to integrate into the blueROV2. This IMU has a driver written for it already in AP_InertialSensor.

Are you saying that there is not going to be any hope to integrate this IMU into the system even with the driver already existing in Ardupilot?

If that is the case, we are within our return window, so we could return it and go for a vectornav AHRS system that has driver in AP_ExternalAHRS. Am I correct in understanding that even with the AHRS, there are no examples of someone successfully integrating an external AHRS into the blueROV?

After some reasonably extensive internal discussion, my latest understanding is:

  • ArduPilot’s AP_InertialSensor libraries can only be used by autopilot boards
    • To use one of the supported sensors externally would require defining a custom board that includes the sensor(s) that you’re interested in using
      • i.e. pretend that it’s actually included in the board being used
  • ArduPilot’s AP_ExternalAHRS libraries support External AHRS systems, which can be used to completely replace the AHRS, or to replace some inputs to ArduPilot’s EKF
    • Replacing ArduPilot’s AHRS would also require integrating the DVL with the external AHRS, so it would likely make more sense to follow the latter approach instead

It’s not so much “no hope of integrating” as “integration would require some firmware changes, so you can’t just plug it in and set some parameters to get it working”.

We’re not aware of any examples of it. That said, the one we were trying to integrate wasn’t already supported by ArduPilot - it should be simpler to set up an external AHRS that already has firmware support, and that will have been done successfully with other vehicle types (otherwise the option wouldn’t already be available).

Hi Eliot,

Everything you said there makes sense. I guess I would prefer to integrate the IMU into the system since we already have it. I found in AP_InertialSensor.cpp around line 1000, there’s a switch statement with different board types and each type calls one or two of the existing InertialSensor drivers. Could you not just change out the Pixhawk IMU for the ADIS1647x?

If this may be difficult and an external AHRS would be much easier, just say the word and we will opt to go that route, but I’m willing to change some firmware around to make the ADIS1647x work if anyone there has an idea of what path to take

Hi Eliot,

Do you have any suggestions on how to adjust the firmware to accommodate the external IMU?

I have added lines to probe for the ADIS1647x IMU. My issues are that I am unsure how to determine the last argument of probe, which is drdy_gpio (data ready gpio). My understanding is that this is the GPIO of the SPI port on Pixhawk that will be connected to Data Ready pin of sensor.

If this understanding is correct, I can go ahead and hook up the IMU to the SPI port and run the generic_INS example located at /ardupilot/libraries/AP_InertialSensor/examples/

I asked about this to confirm, and was told

As a couple of additional points,

  1. Given you seemingly haven’t tried out the DVL integration yet, are you sure additional inertial sensing precision is actually necessary / helpful for your application?
    • There’s some additional concern here because an external IMU may cause navigation noise, as described in the INS_POS* parameter descriptions:

      The IMU should be located as close to the vehicle c.g. as practical … Failure to do so can result in noisy navigation velocity measurements due to vibration and IMU gyro noise.

Not beyond those I’ve already provided. This isn’t something I’ve had to do before.

That interpretation seems reasonable to me. I can ask about it if you want, but it may be simpler to try it and look further into it if it doesn’t work as expected.

Discussion this far into the weeds of the ArduPilot codebase may be more fruitful in the ArduPilot developer chat.

I expect if it’s working correctly it should also show up in the “Sensors” section of QGC’s Vehicle Setup/Summary page :slight_smile: