Streaming data from multiple IMUs to QGroundControl



  • I would like to stream the data from all 5 IMUs to QGroundControl (via WiFi) and then log this data for a sensor fusion project. In the voxl-imu-server.conf, I see that IMU0 and IMU1 are enabled, running at a sample rate of 500 Hz, and reading every 5 samples, so I would expect to see an overall rate to QGC of 100 Hz. When I connect, I only see data from the "high_res" IMU (I suppose this is IMU1?) at the rate is 50 Hz, which does not match what is in the setup. Any guidance on getting data at least through IMU0 and IMU1, and ideally from the other 3 on the Flight Core? I have the m500 developer system.


  • Dev Team

    Hi @Daniel-Gauthier ,

    The VOXL-Flight PCBA is really the VOXL + Flight Core.

    The Flight Core side has 3 IMUs that PX4 uses (really, only a single IMU at a time in PX4 v1.10/v1.11, the other are backups. This is the 'flight controller' portion of the hardware, and QGC should be able to use the IMUs for logging in a standard way.

    The 2 IMUs on the VOXL side are used basically for the computer vision features (e.g. VIO). These IMUs are basically unknown to PX4 in this setup, so you won't be seeing this data in QGC.

    Is your goal just to log data? Is QGC a requirement?

    Thanks!



  • Thanks for your response! Regarding the two other IMUs on flight core, I am not sure how to access them to even log the data - QGC doesn't list them so it seems that data is not being published? When you mean in the standard way, do you mean logging to an SD card, for example?

    Yes, I would be interested in getting data from the other two IMUs on the VOXL side.

    For now, just logging data is fine and QGC is not necessary. For example, would it be possible to grab data from all IMUs using MAVSDK for example, or did you have something else in mind?

    I am also curious why the voxl-imu-server.conf file sets the sample rate to 500 Hz (then only every 5th sample, so 100 Hz), where as QGC says the sampling rate is 50 Hz.

    Again, thanks so much for your time.



  • @modaltb
    Another related question. In looking at your PX4 distro, there are only drivers for IMU1 (ICM-20602) and IMU3 (BMI-088) on the flight core, and IMU1 (ICM-20948) on VOXL. So I assume that PX4 can access IMU2 on the flight core? Or has ModalAI written their own driver for the ICM-42688. If so, is this driver code available? Also, I don't see anywhere in the ModalAI PX4 parameter set that instructs PX4 which IMU to use. In looking at the IMU portion of PX4, it appears that they take the lowest IMU number on the list if none is specified, which means the ICM-20602 and that this is an inferior IMU in comparison to the ICM-42688 on the Flight Core. Am I on the right track here?


  • Dev Team

    Hi @Daniel-Gauthier ,

    Partial answers here but hopefully can git things moving. Also, I'm making assumptions here that you are OK "opening up the hood" and modifying code 😉

    Consider voxl-imu-serverand the two IMUs on VOXL as not accessible via PX4/QGC. Let me reach out to a colleague who's more in this area and I'll get back to you.

    We have some tools in the works for logging VOXL IMUs (and other) data easily on the VOXL side. I'll need to touch base on timeline, we are looking for a mid-end Feb release but have a developer channel that you could use if you're OK with pre-release SW (e.g. not ready for prime time...).

    OK for the PX4 side I'm more versed on. The 42688p driver is here:

    At least in v1.10 and v1.11, PX4 uses a single IMU as input to EKF2.
    Whatever has the highest priority and is functional.... A little silly, but the two extra IMUs on there are from the v5x design spec which we were asked to try to implement, but are used as 'backups' basically.. and thus far I don't believe the backups have been used.... So it's really based on a sensor priority (which ICM42688 and ICM20648 share the same) and what sensor is started first (right now, 20602).

    --> https://github.com/PX4/PX4-Autopilot/blob/master/boards/modalai/fc-v1/init/rc.board_sensors#L13

    You can change the order here/comment out sensors, and it will change the default IMU being used. For validation testing, I commented out the 20602 line.

    So, to make the 42688p default, make it startup first in that script.

    Here's the 42688p driver for PX4:
    --> https://github.com/PX4/PX4-Autopilot/tree/master/src/drivers/imu/invensense/icm42688p

    Here's the 42688p driver for VOXL:
    -> https://gitlab.com/voxl-public/modal-pipe-architecture/voxl-imu-server/-/blob/master/server/src/icm42688.c

    Keep questions coming and we'll get to them!


Log in to reply