Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse
Brand Logo

ModalAI Forum

  1. ModalAI Support Forum
  2. Software Development
  3. GPS-denied Navigation (VIO)
  4. Problems in resetting voxl-open-vins-server

Problems in resetting voxl-open-vins-server

Scheduled Pinned Locked Moved GPS-denied Navigation (VIO)
5 Posts 2 Posters 1.2k Views 1 Watching
  • 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 Offline
    Marco SpangaroM Offline
    Marco Spangaro
    wrote on last edited by
    #1

    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
    0
    • zauberflote1Z Offline
      zauberflote1Z Offline
      zauberflote1
      ModalAI Team
      wrote on last edited by
      #2

      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
      0
      • zauberflote1Z zauberflote1

        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 Offline
        Marco SpangaroM Offline
        Marco Spangaro
        wrote on last edited by
        #3

        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
        0
        • Marco SpangaroM Marco Spangaro

          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 Offline
          zauberflote1Z Offline
          zauberflote1
          ModalAI Team
          wrote on last edited by
          #4

          @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
          0
          • zauberflote1Z zauberflote1

            @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 Offline
            Marco SpangaroM Offline
            Marco Spangaro
            wrote on last edited by
            #5

            @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
            0

            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

            With your input, this post could be even better 💗

            Register Login
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            ModalAI
            Categories Recent Tags ModalAI.com Docs
            © 2026 ModalAI® · Accelerating autonomy for smaller, smarter, safer drones · Powered by NodeBB
            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups