QVIO unstable flight. Please help!
-
Hello! very good morning! I am trying to develop a safe and efficient solution to control the drone in a simple way, the idea is to manage the drone through actions with the Mavlink server (I already have it, I can take off the drone from QGC) the problem is to get stability, the drone flies most of the time in an unstable way, i have configured the voxl-vision-hub with qvio, and i have also tried with ov, but in none of the two is stable, i take off the drone in position mode and what it does most of the times is not to keep its position, but to start flying uncontrolled, upwards or sideways.
As you know this is totally inefficient and not applicable to the need I have, since basically the main thing is a safe and stable flight.
I would like you to help me first to understand the difference between QVIO, VIO and OV (I have not seen anything in the documentation that explains well the difference between these three).
And secondly to see if you can help me to be able to give the necessary configuration to be able to obtain a safe accuracy.
I am going to leave you the configurations I have and the tests I have done.
system-image: 1.8.02-M0054-14.1a-perf kernel: #1 SMP PREEMPT Mon Nov 11 22:47:44 UTC 2024 4.19.125 ──────────────────────────────────────────────────────────────────────────────── hw platform: M0054 mach.var: 1.0.1 SKU: MRB-D0014-4-V1-C27-T7-M22-X0 ──────────────────────────────────────────────────────────────────────────────── voxl-suite: 1.4.5 ──────────────────────────────────────────────────────────────────────────────── Packages: Repo: http://voxl-packages.modalai.com/ ./dists/qrb5165/sdk-1.4/binary-arm64/ Last Updated: 2025-07-16 21:35:53 List: kernel-module-voxl-fsync-mod-4.19.125 1.0-r0 kernel-module-voxl-gpio-mod-4.19.125 1.0-r0 kernel-module-voxl-platform-mod-4.19.125 1.0-r0 libfc-sensor 1.0.7 libmodal-cv 0.5.18 libmodal-exposure 0.1.4 libmodal-journal 0.2.5 libmodal-json 0.4.7 libmodal-pipe 2.13.1 libqrb5165-io 0.5.0 libvoxl-cci-direct 0.3.2 libvoxl-cutils 0.1.5 modalai-slpi 1.1.20 mv-voxl 0.1-r0 qrb5165-bind 0.1-r0 qrb5165-dfs-server 0.2.0 qrb5165-imu-server 1.1.3 qrb5165-rangefinder-server 0.1.5 qrb5165-slpi-test-sig 01-r0 qrb5165-system-tweaks 0.3.5 qrb5165-tflite 2.8.0-2 voxl-bind-spektrum 0.1.1 voxl-camera-calibration 0.5.9 voxl-camera-server 2.2.1 voxl-ceres-solver 2:1.14.0-10 voxl-configurator 1.0.1 voxl-cpu-monitor 0.6.0 voxl-docker-support 1.3.1 voxl-elrs 0.4.7 voxl-esc 1.5.2 voxl-feature-tracker 0.5.2 voxl-flow-server 0.3.6 voxl-fsync-mod 1.0-r0 voxl-gphoto2-server 0.0.10 voxl-gpio-mod 1.0-r0 voxl-io-server 0.0.5 voxl-jpeg-turbo 2.1.3-7 voxl-lepton-server 1.3.3 voxl-lepton-tracker 0.0.4 voxl-libgphoto2 0.0.4 voxl-libuvc 1.0.7 voxl-logger 0.5.3 voxl-mapper 0.2.4 voxl-mavcam-manager 0.5.8 voxl-mavlink 0.1.5 voxl-mavlink-server 1.4.7 voxl-mission-manager 1.0.6 voxl-modem 1.1.6 voxl-mongoose 7.7.0-2 voxl-mpa-to-ros 0.3.9 voxl-mpa-tools 1.4.0 voxl-nlopt 2.5.0-4 voxl-open-vins 0.4.19 voxl-open-vins-server 0.3.12 voxl-opencv 4.5.5-3 voxl-osd 0.1.7 voxl-platform-mod 1.0-r0 voxl-portal 0.7.10 voxl-px4 1.14.0-2.0.98 voxl-px4-imu-server 0.1.2 voxl-px4-params 0.7.3 voxl-qvio-server 1.2.0 voxl-remote-id 0.0.9 voxl-reset-slpi 0.0.1 voxl-state-estimator 0.0.5 voxl-streamer 0.7.5 voxl-suite 1.4.5 voxl-tag-detector 0.0.4 voxl-tflite-server 0.4.4 voxl-utils 1.4.7 voxl-uvc-server 0.1.7 voxl-vision-hub 1.8.21 voxl-voxblox 1.1.5 voxl-vtx 1.3.14 voxl-wavemux 0.0.1 voxl2-io 0.0.3 voxl2-system-image 1.8.02-r0 voxl2-wlan 1.0-r0
Service Name | Enabled | Running | CPU Usage ─────────────────────────────────────────────────────────────────── docker-autorun | Disabled | Not Running | modallink-relink | Disabled | Not Running | voxl-camera-server | Enabled | Running | 67.9% voxl-cpu-monitor | Enabled | Running | 0.0% voxl-dfs-server | Disabled | Not Running | voxl-elrs-startup | Disabled | Not Running | voxl-feature-tracker | Disabled | Not Running | voxl-flow-server | Disabled | Not Running | voxl-imu-server | Enabled | Running | 1.8% voxl-io-server | Disabled | Not Running | voxl-lepton-server | Disabled | Not Running | voxl-lepton-tracker | Disabled | Not Running | voxl-logger | Disabled | Not Running | voxl-mapper | Enabled | Running | 53.6% voxl-mavcam-manager | Enabled | Running | 0.0% voxl-mavlink-server | Enabled | Running | 5.4% voxl-mission-manager | Enabled | Not Running | voxl-modem | Disabled | Not Running | voxl-open-vins-server | Enabled | Running | 98.2% voxl-osd | Disabled | Not Running | voxl-portal | Disabled | Not Running | voxl-px4-imu-server | Enabled | Running | 1.8% voxl-px4 | Enabled | Running | 28.6% voxl-qvio-server | Enabled | Running | 37.5% voxl-rangefinder-server | Enabled | Running | 1.8% voxl-remote-id | Disabled | Not Running | voxl-seek-server | Disabled | Not Running | voxl-softap | Disabled | Not Running | voxl-state-estimator | Disabled | Not Running | voxl-static-ip | Disabled | Not Running | voxl-streamer | Enabled | Running | 0.0% voxl-tag-detector | Disabled | Not Running | voxl-tflite-server | Enabled | Running | 0.0% voxl-time-sync | Disabled | Not Running | voxl-uvc-server | Disabled | Not Running | voxl-vision-hub | Enabled | Running | 8.9% voxl-vrx | Disabled | Not Running | voxl-vtx | Disabled | Not Running | voxl-wait-for-fs | Enabled | Completed |
{ "config_file_version": 1, "en_localhost_mavlink_udp": true, "localhost_udp_port_number": 14551, "en_vio": true, "vio_pipe": "qvio", "secondary_vio_pipe": "ov", "vfc_vio_pipe": "ov", "en_reset_vio_if_initialized_inverted": true, "vio_warmup_s": 3, "send_odom_while_failed": true, "horizon_cal_tolerance": 0.5, "en_hitl": false, "offboard_mode": "trajectory", "follow_tag_id": 0, "figure_eight_move_home": true, "robot_radius": 0.300000011920929, "collision_sampling_dt": 0.1, "max_lookahead_distance": 1, "backtrack_seconds": 60, "backtrack_rc_chan": 8, "backtrack_rc_thresh": 1500, "wps_move_home": true, "wps_stride": 0, "wps_timeout": 0, "wps_damp": 1, "wps_vfc_mission": true, "wps_vfc_mission_loop": false, "wps_vfc_mission_to_ramp": 25, "wps_vfc_mission_to_kp": 0.10000000149011612, "wps_vfc_mission_cruise_speed": 1, "en_tag_fixed_frame": false, "fixed_frame_filter_len": 5, "en_transform_mavlink_pos_setpoints_from_fixed_frame": false, "vfc_rate": 100, "vfc_rc_chan_min": 980, "vfc_rc_chan_max": 2020, "vfc_thrust_ch": 3, "vfc_roll_ch": 1, "vfc_pitch_ch": 2, "vfc_yaw_ch": 4, "vfc_submode_ch": 6, "vfc_alt_mode_rc_min": 0, "vfc_alt_mode_rc_max": 0, "vfc_flow_mode_rc_min": 0, "vfc_flow_mode_rc_max": 0, "vfc_hybrid_flow_mode_rc_min": 0, "vfc_hybrid_flow_mode_rc_max": 0, "vfc_position_mode_rc_min": 0, "vfc_position_mode_rc_max": 2100, "vfc_traj_mode_rc_min": 0, "vfc_traj_mode_rc_max": 0, "vfc_yaw_deadband": 30, "vfc_vxy_deadband": 50, "vfc_vz_deadband": 150, "vfc_min_thrust": 0, "vfc_max_thrust": 0.800000011920929, "vfc_tilt_max": 0.43599998950958252, "vfc_yaw_rate_max": 3, "vfc_thrust_hover": 0.5, "vfc_vz_max": 1, "vfc_kp_z": 5.2899999618530273, "vfc_kd_z": 5.9800000190734863, "vfc_vxy_max": 3, "vfc_kp_xy": 0.63999998569488525, "vfc_kd_xy": 2.559999942779541, "vfc_kp_z_vio": 5.2899999618530273, "vfc_kd_z_vio": 5.9800000190734863, "vfc_kp_xy_vio": 3.2400000095367432, "vfc_kd_xy_vio": 3.9600000381469727, "vfc_w_filt_xy_vio": 10, "vfc_w_filt_xy_flow": 3, "vfc_vel_ff_factor_vio": 0.899999976158142, "vfc_xy_acc_limit_vio": 2.5, "vfc_max_z_delta": 3, "vfc_att_transition_time": 0.5, "vfc_stick_move_threshold": 30, "vfc_flow_transition_time": 1, "vfc_q_min": 10, "vfc_points_min": 7, "vfc_en_submode_announcement": 1, "vfc_disable_fallback": false, "vfc_traj_csv": "/data/voxl-vision-hub/traj.csv", "en_voa": true, "voa_upper_bound_m": -0.15000000596046448, "voa_lower_bound_m": 0.15000000596046448, "voa_voa_memory_s": 1, "voa_max_pc_per_fusion": 100, "voa_pie_max_dist_m": 20, "voa_pie_min_dist_m": 0.25, "voa_pie_under_trim_m": 1, "voa_pie_threshold": 3, "voa_send_rate_hz": 20, "voa_pie_slices": 36, "voa_pie_bin_depth_m": 0.15000000596046448, "voa_inputs": [{ "enabled": true, "type": "point_cloud", "input_pipe": "dfs_point_cloud", "frame": "stereo_l", "max_depth": 8, "min_depth": 0.300000011920929, "cell_size": 0.079999998211860657, "threshold": 4, "x_fov_deg": 68, "y_fov_deg": 56, "conf_cutoff": 0 }, { "enabled": true, "type": "point_cloud", "input_pipe": "stereo_front_pc", "frame": "stereo_front_l", "max_depth": 8, "min_depth": 0.300000011920929, "cell_size": 0.079999998211860657, "threshold": 4, "x_fov_deg": 68, "y_fov_deg": 56, "conf_cutoff": 0 }, { "enabled": true, "type": "point_cloud", "input_pipe": "stereo_rear_pc", "frame": "stereo_rear_l", "max_depth": 8, "min_depth": 0.300000011920929, "cell_size": 0.079999998211860657, "threshold": 4, "x_fov_deg": 68, "y_fov_deg": 56, "conf_cutoff": 0 }, { "enabled": true, "type": "tof", "input_pipe": "tof", "frame": "tof", "max_depth": 6, "min_depth": 0.15000000596046448, "cell_size": 0.079999998211860657, "threshold": 3, "x_fov_deg": 106.5, "y_fov_deg": 85.0999984741211, "conf_cutoff": 125 }, { "enabled": true, "type": "rangefinder", "input_pipe": "rangefinders", "frame": "body", "max_depth": 8, "min_depth": 0.300000011920929, "cell_size": 0.079999998211860657, "threshold": 4, "x_fov_deg": 68, "y_fov_deg": 56, "conf_cutoff": 0 }] }
{ "odr_hz": 30, "use_camera_height_bootstrap": true, "camera_height_off_ground_m": 0.085000000894069672, "enable_init_while_moving": false, "cam_imu_timeshift_s": 0, "cam_imu_timeshift_s_uncertainty": 9.99999974737875e-05, "T_cam_wrt_imu_uncertainty": [0.00050000002374872565, 0.00050000002374872565, 0.00050000002374872565], "R_cam_to_imu_uncertainty": [0.00499999988824129, 0.00499999988824129, 0.00499999988824129], "accl_fsr_ms2": 156, "gyro_fsr_rad": 34, "accl_noise_std_dev": 0.31600001454353333, "gyro_noise_std_dev": 0.00999999977648258, "cam_noise_std_dev": 100, "min_std_pixel_noise": 0.5, "fail_high_pixel_noise_points": 1.6650999784469604, "limited_imu_bw_trigger": 25, "gps_imu_time_alignment_s": 0, "T_gps_wrt_imu": [0, 0, 0], "enable_mapping": true, "enable_gps_vel": false, "en_auto_reset": true, "auto_reset_max_velocity": 10, "auto_reset_max_v_cov_instant": 0.10000000149011612, "auto_reset_max_v_cov": 0.00999999977648258, "auto_reset_max_v_cov_timeout_s": 0.5, "auto_reset_min_features": 3, "auto_reset_min_feature_timeout_s": 1, "en_standby_mode": true, "standby_skip_frames": 1, "mask_file_path": "" }
finally I share with you the tests I have done:
- take off the drone in the place where I connect the battery (failure)
- move the drone manually until I saw that the z-axis coincided more or less with the movement it made, position the drone at 0, and take off (here I got more stability)
- reset qvio and ov, after powering up the drone, the qvio was accurate but the ov was moving crazily on the plane when static (failure)
here are some images of the inconsistencies between qvio and ov
thank you very much in advance, and sorry if the thread is too big!
-
@Daniel-Rincon QVIO (voxl-qvio-server) and OVINS (voxl-open-vins-server) are two different VIO algorithms. Currently only one can be used at a time. If you take a look at
/etc/modalai/voxl-vision-hub.conf
you should be able to specify which to use. -
@tom Hello Tom! Yes, I understand this, but which one is more accurate? which one should I decide on in an Indoor environment? we have the Starling 2 triple tracking.
Can you help me by answering the other questions? or is there someone in the ModalAI team who can help me?
I have left all my settings there, and as you can see QVIO is set as the main VIO.
-
@Daniel-Rincon Others will likely chime in, but OVINS allows you to run multi-cam VIO which in general will be more accurate than single-cam which is all that QVIO can do
-
@tom Thanks Tom, I will wait to see if someone else joins, as this has blocked our development, thank you very much.
-
@Daniel-Rincon,
Please consider updating to the latest SDK release, 1.5.0, if you haven't already. This has our latest VIO public development.As Tom mentioned, OV in 1.5.0 can use a binocular+ tracking, i.e., number of cams => 2 without stereo matching. This improves VIO robustness significantly compared to the single cam QVIO. Hence, OV should be preferred.
Additionally, I would recommend redoing a full calibration of all sensors (IMU, PX4, Cams) and checking if the extrinsics file is correct.
This should improve your flight performance.
I hope this clarifies some of your questions