Hello,
I recently received a Startling 2 drone and have been trying to get the Mapper functionality to work.
I tried SDK 1.3.3 and then tried 1.3.4-202409192201.
TOF seems to be working fine, as is the tracking_front camera however QVIO is not. See the attached screenshot and logs.
Any advice on how to resolve this would be appreciated.
voxl2:/$ voxl-inspect-qvio
waiting for server
dt(ms) | T_imu_wrt_vio (m) |Roll Pitch Yaw (deg)|features|quality| state| error_codes |
31.1 | 0.00 0.00 0.00| 0.0 -0.0 0.0| 0 | -1% | FAIL | CAM_MISSING CAM_BAD_RES STALLED ^C
received SIGINT Ctrl-C
closing and exiting
voxl2:/$ voxl-inspect-services
Scanning services...
Service Name | Enabled | Running | CPU Usage
-------------------------------------------------------------------
docker-autorun | Disabled | Not Running |
modallink-relink | Disabled | Not Running |
voxl-camera-server | Enabled | Running | 93.9%
voxl-cpu-monitor | Enabled | Running | 0.3%
voxl-dfs-server | Disabled | Not Running |
voxl-feature-tracker | Disabled | Not Running |
voxl-flow-server | Disabled | Not Running |
voxl-imu-server | Enabled | Running | 3.6%
voxl-lepton-server | Disabled | Not Running |
voxl-lepton-tracker | Disabled | Not Running |
voxl-logger | Disabled | Not Running |
voxl-mavcam-manager | Enabled | Running | 0.0%
voxl-mavlink-server | Enabled | Running | 3.1%
voxl-modem | Disabled | Not Running |
voxl-neopixel-manager | Disabled | Not Running |
voxl-open-vins-server | Disabled | Not Running |
voxl-osd | Disabled | Not Running |
voxl-portal | Enabled | Running | 24.1%
voxl-px4-imu-server | Disabled | Not Running |
voxl-px4 | Enabled | Running | 21.6%
voxl-qvio-server | Enabled | Running | 5.0%
voxl-rangefinder-server | Enabled | Running | 0.5%
voxl-remote-id | 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 | Disabled | Not Running |
voxl-time-sync | Disabled | Not Running |
voxl-uvc-server | Disabled | Not Running |
voxl-vision-hub | Enabled | Running | 4.1%
voxl-vrx | Disabled | Not Running |
voxl-vtx | Disabled | Not Running |
voxl-wait-for-fs | Enabled | Completed |
voxl2:/$ cat /etc/modalai/voxl-camera-server.conf
/**
* voxl-camera-server Configuration File
*
* Each camera has configurations for up to 4 HAL3 streams:
* - `preview` stream for raw unprocessed images from CV cameras
* - `small_video` 720p (ish) h264/h265 compressed for fpv video streaming
* - `large_video` 4k (ish) h264/h265 for onboard video recording to disk
* - `snapshot` ISP-processed JPG snapshots that get saved to disk
*
* on QRB5165 platforms (VOXL2 and VOXL2 mini) you can only have 3 of the 4 enabled
*
* This file is generated from default values by voxl-configure-cameras.
* Do not expect arbitrary resolutions to work, the ISP and video compression
* pipelines only support very specific resolutions.
*
* The default video compression mode is cqp or Constant Quantization Parameter
*
*
*
*/
{
"version": 0.1,
"fsync_en": true,
"fsync_gpio": 109,
"cameras": [{
"type": "ar0144",
"name": "tracking_front",
"enabled": true,
"camera_id": 0,
"fps": 30,
"en_rotate": true,
"en_preview": true,
"preview_width": 1280,
"preview_height": 800,
"en_raw_preview": true,
"ae_mode": "lme_msv",
"ae_desired_msv": 60,
"exposure_min_us": 20,
"exposure_max_us": 33000,
"gain_min": 54,
"gain_max": 8000,
"exposure_soft_min_us": 5000,
"ae_filter_alpha": 0.600000023841858,
"ae_ignore_fraction": 0.20000000298023224,
"ae_slope": 0.05000000074505806,
"ae_exposure_period": 1,
"ae_gain_period": 1
}, {
"type": "imx412",
"name": "hires",
"enabled": true,
"camera_id": 1,
"fps": 30,
"en_preview": false,
"preview_width": 640,
"preview_height": 480,
"en_raw_preview": false,
"en_small_video": true,
"small_video_width": 1024,
"small_video_height": 768,
"small_venc_mode": "h265",
"small_venc_br_ctrl": "cqp",
"small_venc_Qfixed": 30,
"small_venc_Qmin": 15,
"small_venc_Qmax": 40,
"small_venc_nPframes": 9,
"small_venc_mbps": 2,
"en_large_video": true,
"large_video_width": 4056,
"large_video_height": 3040,
"large_venc_mode": "h265",
"large_venc_br_ctrl": "cqp",
"large_venc_Qfixed": 38,
"large_venc_Qmin": 15,
"large_venc_Qmax": 50,
"large_venc_nPframes": 29,
"large_venc_mbps": 30,
"en_snapshot": true,
"en_snapshot_width": 4056,
"en_snapshot_height": 3040,
"exif_focal_length": 3.0999999046325684,
"exif_focal_length_in_35mm_format": 17,
"exif_fnumber": 1.2400000095367432,
"ae_mode": "isp"
}, {
"type": "pmd-tof-liow2",
"name": "tof",
"enabled": true,
"camera_id": 2,
"fps": 10,
"en_rotate": true,
"ae_mode": "off",
"exposure_max_us": 6000,
"standby_enabled": false,
"decimator": 5
}, {
"type": "ar0144",
"name": "tracking_down",
"enabled": true,
"camera_id": 3,
"fps": 30,
"en_rotate": false,
"en_preview": true,
"preview_width": 1280,
"preview_height": 800,
"en_raw_preview": true,
"ae_mode": "lme_msv",
"ae_desired_msv": 60,
"exposure_min_us": 20,
"exposure_max_us": 33000,
"gain_min": 54,
"gain_max": 8000,
"exposure_soft_min_us": 5000,
"ae_filter_alpha": 0.600000023841858,
"ae_ignore_fraction": 0.20000000298023224,
"ae_slope": 0.05000000074505806,
"ae_exposure_period": 1,
"ae_gain_period": 1
}]
}
voxl2:/$ cat /etc/modalai/voxl-qvio-server.conf
/**
* This file contains configuration that's specific to voxl-qvio-server.
*
* voxl-qvio-server also uses parameters from the following config files:
* /etc/modalai/extrinsics.conf
* /data/modalai/opencv_tracking_intrinsics.yml
*
* parameter descriptions:
*
* mask_file_path: A file path for qvio mask.
* 1/4 resolution image (w.r.t. VGA), 160 x 120,
* PGM format, the part of the camera view for which
* pixels are set to 255 is blocked from feature
* detection useful, e.g., to avoid detecting & tracking
* points on landing gear reaching into camera view.
*
* imu_name: VOXL uses imu1 by defualt since it's the most reliable. On
* VOXL-FLIGHT you can optionally try imu0 which is a newer icm42688
* voxl-configure-mpa will decide which IMU to use for you.
*
* cam_name: camera to use, defaults to tracking0
*
* odr_hz: Output data date is independent from the camera frame rate so you can
* choose the desired output data rate. Note that voxl-imu-server defaults to
* 500hz imu sampling but new data is received by voxl-qvio-server at 100hz by
* default so requesting qvio data faster requires updating voxl-imu-server.
*
* use_camera_height_bootstrap: When enabled, the feature estimator will assume
* the system starts up with the camera pointed partially at the ground and use
* this to make an intial guess of the feature's depth. This should be enabled
* for drones that have known-height landing gear.
*
* camera_height_off_ground_m: camera distance above ground (meters) for the
* above bootstrap feature.
*
* enable_init_while_moving: optionally allow the algorithm to initialize or
* reinitialize while moving. Use this if you want to be able to reinitialize
* during flight. Based on camera motion, not IMU motion. Recommended to leave
* this off unless absolutely desired.
*
* cam_imu_timeshift_s: Misalignment between camera and imu timestamp in
* seconds.
*
* cam_imu_timeshift_s_uncertainty: uncertainty in camera imu timestamp
* misalignment
*
* T_cam_wrt_imu_uncertainty[3] & R_cam_to_imu_uncertainty[3]: uncertainty in
* camera-imu translation
*
* accl_fsr_ms2 & gyro_fsr_rad: Full scale range used to detect clipping. By
* default this is set to a little under the real 16G and 2000DPS FSR so
* clipping is detected reliably
*
* accl_noise_std_dev & gyro_noise_std_dev: standard deviation of accl and gyro
* noise
*
* cam_noise_std_dev: Standard dev of camera noise per pixel.
*
* min_std_pixel_noise: Minimum of standard deviation of feature measurement
* noise in pixels.
*
* fail_high_pixel_noise_points: Scales measurement noise and compares against
* search area (is search area large enough to reliably compute measurement
* noise covariance matrix).
*
* limited_imu_bw_trigger: To prevent tracking failure during/right after (hard)
* landing: If sum of 3 consecutive accelerometer samples in any dimension
* divided by 4.3 exceed this threshold, IMU measurement noise is increased (and
* resets become more likely); if platform vibrates heavily during flight, this
* may trigger mid- flight; if poseQuality in mvVISLAMPose drops to
* MV_TRACKING_STATE_LOW_QUALITY during flight, improve mechanical dampening
* (and/or increase threshold). QC default is 35, we prefer 25.
*
* gps_imu_time_alignment_s: Misalignment between GPS and IMU time in seconds
*
* T_gps_wrt_imu: location of gps with respect to the IMU in meters
*
* enable_mapping: rudimentary lightweight mapping of feature points, leave this
* on.
*
* enable_gps_vel: allow gps velocity to be added to VIO, requires ModalAI
* custom PX4 firmware to expose this data. This is an Alpha feature, don't
* enable this unless instructed to.
*
*
*
* en_auto_reset: on by default. If any one of the following thresholds are met
* voxl-qvio-server will assume an otherwise undetected fault has occured in
* the inderlying algorithm and will hard reset the QVIO library.
*
* auto_reset_max_velocity: meters per second, if velocity faster than this is
* detected then an auto-reset is triggered
*
* auto_reset_max_v_cov_instant: if the covariance of the velocity estimate ever
* exceeds this for a since sample then an auto-reset is triggered
*
* auto_reset_max_v_cov: if th covariance of the velocity estimate ever exceeds
* this for more than auto_reset_max_v_cov_timeout_s then an auto-reset is triggered
*
* auto_reset_max_v_cov_timeout_s: time period for auto_reset_max_v_cov criteria
*
* auto_reset_min_features: if fewer than this number of features are tracked for
* more than auto_reset_min_feature_timeout_s then an auto-reset is triggered.
* it is okay for feature tracking to be lost for short periods of time.
*
*
*
* en_standby_mode: When enabled, qvio will skip camera frames while voxl-cpu-monitor
* reports that the CPU is in standby mode.
*
* standby_skip_frames: number of frames to skip before processing one. default is 1,
meaning skip every other frame. 30 -> 15hz
*/
{
"imu_name": "imu_apps",
"cam_name": "tracking_front",
"lens_cal_path": "/data/modalai/opencv_tracking_front_intrinsics.yml",
"cam_extrinsics_name": "tracking_front",
"use_second_cam_if_stereo": false,
"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.0020000000949949026,
"cam_imu_timeshift_s_uncertainty": 0.0010000000474974513,
"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": ""
}
voxl2:/$