ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Problems in resetting voxl-open-vins-server

    GPS-denied Navigation (VIO)
    2
    5
    132
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Marco SpangaroM
      Marco Spangaro
      last edited by

      Hi,

      In Voxl2 (SDK 1.4.1), I'm using voxl-open-vins-server for odometry and testing the auto-reset functionality. When OV detects that a reset is needed, it correctly performs the reset. However, after that, problems start to arise: the VIO keeps resetting because the x, y, and z positions diverge.

      In some cases, the quality drops below -1% (e.g., -200%), and the reset doesn't even trigger. Only in a couple of tests did the functionality work as expected, but I haven't been able to determine the exact conditions under which this happens.

      Has anyone else encountered this issue?

      1 Reply Last reply Reply Quote 0
      • zauberflote1Z
        zauberflote1 ModalAI Team
        last edited by

        Hello Marco,
        Thanks for your question.

        A few things to consider:
        What is your camera setup -- or is it a ModalAI development drone?

        Note that the default configuration of voxl-open-vins-server does not use dynamic initialization, meaning that if a reset triggers while the platform has some motion above the maximum threshold, OV won't be able to properly re-initialize.
        If you want to test if that is the case, set "init_dyn_use" to true in the voxl-open-vins-server.conf

        To further diagnose the issue, please do the following:

        • Run voxl-open-vins-server from terminal
        voxl-open-vins-server
        
        • Check why the reset was triggered based on the output
        • Analyze the following messages post unsuccessful re-initialization -- usually, motion issues will be characterized by IMU threshold messages
        • If the problem persists, upload your voxl-open-vins-server.conf file
        Marco SpangaroM 1 Reply Last reply Reply Quote 0
        • Marco SpangaroM
          Marco Spangaro @zauberflote1
          last edited by

          Hi, thanks for your response!

          I'm using a ModalAI development drone (Starling2), and to make the VIO less robust and test the auto-reset, I'm only using the tracking_front camera.

          I have already set "init_dyn_use" = true and "en_force_init" = true.
          However, whether "en_force_init" is set to true or false, the result is always the same: the system resets, but as soon as it restarts, it immediately begins to diverge, causing another reset shortly after, and so on. After a certain number of resets, it sometimes stops resetting and continues to diverge indefinitely.

          The only way the reset works without the VIO diverging afterward is if the reset happens while the drone is placed on a stable surface.

          This is my config file:

          {
          	"en_auto_reset":	true,
          	"auto_reset_max_velocity":	20,
          	"auto_reset_max_v_cov_instant":	0.10000000149011612,
          	"auto_reset_max_v_cov":	0.10000000149011612,
          	"auto_reset_max_v_cov_timeout_s":	0.5,
          	"auto_reset_min_features":	1,
          	"auto_reset_min_feature_timeout_s":	3,
          	"auto_fallback_timeout_s":	3,
          	"auto_fallback_min_v":	0.600000023841858,
          	"en_cont_yaw_checks":	false,
          	"fast_yaw_thresh":	5,
          	"fast_yaw_timeout_s":	1.75,
          	"do_fej":	true,
          	"imu_avg":	true,
          	"use_rk4_integration":	true,
          	"cam_to_imu_refinement":	true,
          	"cam_intrins_refinement":	true,
          	"cam_imu_ts_refinement":	true,
          	"max_clone_size":	8,
          	"max_slam_features":	35,
          	"max_slam_in_update":	10,
          	"max_msckf_in_update":	10,
          	"feat_rep_msckf":	4,
          	"feat_rep_slam":	4,
          	"cam_imu_time_offset":	0,
          	"slam_delay":	1,
          	"gravity_mag":	9.80665,
          	"init_window_time":	1,
          	"init_imu_thresh":	1,
          	"imu_sigma_w":	0.00013990944749616306,
          	"imu_sigma_wb":	4.1189724174615527e-07,
          	"imu_sigma_a":	0.0038947538150776763,
          	"imu_sigma_ab":	5.538346201712153e-05,
          	"msckf_chi2_multiplier":	0.65,
          	"slam_chi2_multiplier":	40,
          	"zupt_chi2_multiplier":	1,
          	"msckf_sigma_px":	1,
          	"slam_sigma_px":	1.8,
          	"zupt_sigma_px":	1,
          	"try_zupt":	true,
          	"zupt_max_velocity":	0.03,
          	"zupt_only_at_beginning":	true,
          	"zupt_noise_multiplier":	1,
          	"zupt_max_disparity":	8,
          	"init_dyn_use":	true,
          	"triangulate_1d":	false,
          	"refine_features":	false,
          	"max_runs":	5,
          	"init_lamda":	0.001,
          	"max_lamda":	10000000000,
          	"min_dx":	1e-06,
          	"min_dcost":	1e-06,
          	"lam_mult":	10,
          	"min_dist":	0.1,
          	"max_dist":	60,
          	"max_baseline":	40,
          	"max_cond_number":	600000,
          	"use_mask":	false,
          	"use_stereo":	false,
          	"use_baro":	false,
          	"num_opencv_threads":	4,
          	"fast_threshold":	10,
          	"histogram_method":	1,
          	"knn_ratio":	0.7,
          	"takeoff_accel_threshold":	0.5,
          	"takeoff_threshold":	-0.1,
          	"use_stats":	false,
          	"max_allowable_cep":	1,
          	"en_force_init":	true,
          	"en_force_ned_2_flu":	false,
          	"track_frequency":	30,
          	"publish_frequency":	15,
          	"en_vio_always_on":	true,
          	"en_ext_feature_tracker":	false,
          	"en_gpu_for_tracking":	true,
          	"num_features_to_track":	30
          }
          

          Also, I am keeping "en_vio_always_on" = true because i am performing hand testing. But if i set it to false, the VIO never starts (from voxl-inspect-vins I see it is at 0,0,0 and the the portal I do not see any feature on ov_overlay if i move the drone).

          Any suggestion? Thanks again!

          zauberflote1Z 1 Reply Last reply Reply Quote 0
          • zauberflote1Z
            zauberflote1 ModalAI Team @Marco Spangaro
            last edited by

            @Marco-Spangaro
            From your test case description, there could be a few reasons for an imperfect re-initialization. Please note that monocular VINS has four unobservable directions (position and yaw), so your hand motion could likely affect initialization, especially if you are moving too erratically or performing a degenerate motion that would affect the calibration refinement.

            Note that if the image frames post-reset are not feature-friendly, they could also have a negative impact.

            Regarding the vio_always_on flag, some segments of the voxl-open-vins-server code will only be executed if the drone is armed or the flag is set to true.

            Finally, I noticed that you increased the tracking and publishing frequency. Did you see an increase in robustness from these new parameters? Usually, for general environments, I would suggest leaving these as the default values, as you will likely have a better feature triangulation between keyframes. Additionally, enabling feature refinement can also help.

            Marco SpangaroM 1 Reply Last reply Reply Quote 0
            • Marco SpangaroM
              Marco Spangaro @zauberflote1
              last edited by

              @zauberflote1 Hi,

              So, it’s almost impossible for OpenVINS’ VIO to successfully reset while the drone is in flight if even a simple hand movement (which I always tried to do gently) is enough to prevent proper reinitialization, right?

              What I used to do to break the VIO was cover the camera, wait for x, y, and z to return to zero, and then uncover it.

              As for the test environment, it's rich in features, so I don't think that's the issue.

              I increased the publish and tracking frequency because I wanted to ensure the VIO was "responsive," and with two or three cameras, I consistently achieved reliable results.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post
              Powered by NodeBB | Contributors