Eliminating all sensor noise and bias

Hello everyone!

I’m currently making a drone trajectory tracking simulator (HITL with px4 for iris model) that doesn’t have any sensor noise or bias ( IMU, GPS, magnetometer, etc…), i.e. the sensors are perfect.

I wonder if there is any way I can do that. I’m struggling with this problem.

I tried to reduce and set the sensor parameters to 0 in the " iris.sdf " file and it didn’t work.

My specs:

  • PX4 v1.9.2
  • QGC v3.5.5

Thanks for helping!

Have a look at these places:

1 Like

As your suggestion, this is what I did:

  • In iris.sdf file, I deleted the gpsNoise variable to eliminate the GPS noise.
  • In imu,magnetic,mavlink.cpp file, I basically tried to neglect noises by assigning for example:
    (*angular_velocity)[i] = (*angular_velocity)[i] ; // + noise
  • In iris.world, I assigned the magnetic field equals 0.

When I rebuild it and run HITL simulation, I got error:
“Unable to start mission: vehicle not ready”
and the value of Alt in QGC didn’t appear.

Could you give me another suggestion?

If there is no noise present the sensor values might be considered stale (or stuck) and ignored in some ekf or sensor voting steps. I suppose you need to debug where the information flows through and what happens step by step.

One way to do this is by looking at the various published messages in PX4 by using listener msg_name in the console.

1 Like

Thank you so much for your support!
This is gonna be a lot of work.
I just have a small and curious question:
Instead of doing what you said like modifying the cpp file, could I just change the value of the noise and bias directly in iris.sdf file? I planned to find the smallest value that the system could work and then live with it.
As my understanding, everytime I change the cpp file, I have to remake it using: make px4_sitl_default gazebo.

I wouldn’t change the iris.sdf file because it is auto-generated from the iris_base.xacro and iris.xacro file as far as I know. I generally don’t mind doing an incremental build, it doesn’t take long.

@heinzketchupp Maybe you already solved the problem. but I have recommend to change the noise parameters in .world file.

You need to eliminate these lines in the DataValidator.cpp for a SITL run with no noise.

You can do it like this so it will still work for practical flights:

#ifndef CONFIG_ARCH_BOARD_PX4_SITL // enable noiseless SITL
    /* we got the exact same sensor value N times in a row */
    _error_mask |= ERROR_FLAG_STALE_DATA;
    ret = 0.0f;

Then just search for where sensor noise is added and comment out those lines in the plugins, like gazebo_imu_plugin and gazebo_barometer_plugin