-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added bluefox front session with tuned parameters inspired by mins in
uas mapping challenge
- Loading branch information
Showing
13 changed files
with
958 additions
and
0 deletions.
There are no files selected for viewing
127 changes: 127 additions & 0 deletions
127
ros_packages/mrs_open_vins_core/config/realworld_bluefox_front/estimator_config.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
%YAML:1.0 # need to specify the file type at the top! | ||
|
||
verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT | ||
|
||
use_fej: true # if first-estimate Jacobians should be used (enable for good consistency) | ||
integration: "rk4" # discrete, rk4, analytical (if rk4 or analytical used then analytical covariance propagation is used) | ||
use_stereo: false # if we have more than 1 camera, if we should try to track stereo constraints between pairs | ||
max_cameras: 1 # how many cameras we have 1 = mono, 2 = stereo, >2 = binocular (all mono tracking) | ||
|
||
calib_cam_extrinsics: true # if the transform between camera and IMU should be optimized R_ItoC, p_CinI | ||
calib_cam_intrinsics: true # if camera intrinsics should be optimized (focal, center, distortion) | ||
calib_cam_timeoffset: true # if timeoffset between camera and IMU should be optimized | ||
calib_imu_intrinsics: false # if imu intrinsics should be calibrated (rotation and skew-scale matrix) | ||
calib_imu_g_sensitivity: false # if gyroscope gravity sensitivity (Tg) should be calibrated | ||
|
||
max_clones: 11 # how many clones in the sliding window | ||
max_slam: 50 # number of features in our state vector | ||
max_slam_in_update: 50 # update can be split into sequential updates of batches, how many in a batch | ||
max_msckf_in_update: 50 # how many MSCKF features to use in the update | ||
dt_slam_delay: 2 # delay before initializing (helps with stability from bad initialization...) | ||
|
||
gravity_mag: 9.81 # magnitude of gravity in this location | ||
|
||
feat_rep_msckf: "GLOBAL_3D" | ||
feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH" | ||
feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH" | ||
# feat_rep_slam: "ANCHORED_FULL_INVERSE_DEPTH" | ||
# feat_rep_aruco: "ANCHORED_FULL_INVERSE_DEPTH" | ||
|
||
# zero velocity update parameters we can use | ||
# we support either IMU-based or disparity detection. | ||
try_zupt: false | ||
zupt_chi2_multipler: 0 # set to 0 for only disp-based | ||
zupt_max_velocity: 0.1 | ||
zupt_noise_multiplier: 50 | ||
zupt_max_disparity: 1.5 # set to 0 for only imu-based | ||
zupt_only_at_beginning: true | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
init_window_time: 1.0 # how many seconds to collect initialization information | ||
# init_window_time: 2.0 # how many seconds to collect initialization information | ||
init_imu_thresh: 0.3 # threshold for variance of the accelerometer to detect a "jerk" in motion | ||
init_max_disparity: 2.0 # max disparity to consider the platform stationary (dependent on resolution) | ||
init_max_features: 75 # how many features to track during initialization (saves on computation) | ||
|
||
init_dyn_use: false # if dynamic initialization should be used | ||
init_dyn_mle_opt_calib: false # if we should optimize calibration during intialization (not recommended) | ||
init_dyn_mle_max_iter: 50 # how many iterations the MLE refinement should use (zero to skip the MLE) | ||
init_dyn_mle_max_time: 0.05 # how many seconds the MLE should be completed in | ||
init_dyn_mle_max_threads: 6 # how many threads the MLE should use | ||
init_dyn_num_pose: 6 # number of poses to use within our window time (evenly spaced) | ||
init_dyn_min_deg: 10.0 # orientation change needed to try to init | ||
|
||
init_dyn_inflation_ori: 10 # what to inflate the recovered q_GtoI covariance by | ||
init_dyn_inflation_vel: 100 # what to inflate the recovered v_IinG covariance by | ||
init_dyn_inflation_bg: 10 # what to inflate the recovered bias_g covariance by | ||
init_dyn_inflation_ba: 100 # what to inflate the recovered bias_a covariance by | ||
init_dyn_min_rec_cond: 1e-12 # reciprocal condition number thresh for info inversion | ||
|
||
init_dyn_bias_g: [ 0.0, 0.0, 0.0 ] # initial gyroscope bias guess | ||
init_dyn_bias_a: [ 0.0, 0.0, 0.0 ] # initial accelerometer bias guess | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
record_timing_information: false # if we want to record timing information of the method | ||
record_timing_filepath: "/tmp/traj_timing.txt" # https://docs.openvins.com/eval-timing.html#eval-ov-timing-flame | ||
|
||
# if we want to save the simulation state and its diagional covariance | ||
# use this with rosrun ov_eval error_simulation | ||
save_total_state: false | ||
filepath_est: "/tmp/ov_estimate.txt" | ||
filepath_std: "/tmp/ov_estimate_std.txt" | ||
filepath_gt: "/tmp/ov_groundtruth.txt" | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
# our front-end feature tracking parameters | ||
# we have a KLT and descriptor based (KLT is better implemented...) | ||
use_klt: true # if true we will use KLT, otherwise use a ORB descriptor + robust matching | ||
num_pts: 200 # number of points (per camera) we will extract and try to track | ||
# num_pts: 200 # number of points (per camera) we will extract and try to track | ||
# fast_threshold: 20 # threshold for fast extraction (warning: lower threshs can be expensive) | ||
fast_threshold: 15 # threshold for fast extraction (warning: lower threshs can be expensive) | ||
grid_x: 10 # extraction sub-grid count for horizontal direction (uniform tracking) | ||
# grid_y: 5 # extraction sub-grid count for vertical direction (uniform tracking) | ||
grid_y: 10 # extraction sub-grid count for vertical direction (uniform tracking) | ||
# min_px_dist: 10 # distance between features (features near each other provide less information) | ||
min_px_dist: 20 # distance between features (features near each other provide less information) | ||
knn_ratio: 0.70 # descriptor knn threshold for the top two descriptor matches | ||
track_frequency: 21.0 # frequency we will perform feature tracking at (in frames per second / hertz) | ||
downsample_cameras: false # will downsample image in half if true | ||
num_opencv_threads: 4 # -1: auto, 0-1: serial, >1: number of threads | ||
histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE | ||
|
||
# aruco tag tracker for the system | ||
# DICT_6X6_1000 from https://chev.me/arucogen/ | ||
use_aruco: false | ||
num_aruco: 1024 | ||
downsize_aruco: true | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
# camera noises and chi-squared threshold multipliers | ||
up_msckf_sigma_px: 1.5 | ||
up_msckf_chi2_multipler: 1.5 | ||
up_slam_sigma_px: 1.5 | ||
up_slam_chi2_multipler: 1.5 | ||
up_aruco_sigma_px: 1.5 | ||
up_aruco_chi2_multipler: 1.5 | ||
|
||
# masks for our images | ||
use_mask: true | ||
mask0: "mask_mv_25003671.png" | ||
|
||
# imu and camera spacial-temporal | ||
# imu config should also have the correct noise values | ||
relative_config_imu: "kalibr_imu_chain.yaml" | ||
relative_config_imucam: "kalibr_imucam_chain.yaml" | ||
|
||
|
||
|
||
|
45 changes: 45 additions & 0 deletions
45
ros_packages/mrs_open_vins_core/config/realworld_bluefox_front/kalibr_imu_chain.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
%YAML:1.0 | ||
|
||
imu0: | ||
T_i_b: | ||
- [1.0, 0.0, 0.0, 0.0] | ||
- [0.0, 1.0, 0.0, 0.0] | ||
- [0.0, 0.0, 1.0, 0.0] | ||
- [0.0, 0.0, 0.0, 1.0] | ||
|
||
accelerometer_noise_density: 2.0000e-3 # [ m / s^2 / sqrt(Hz) ] ( accel "white noise" ) | ||
accelerometer_random_walk: 3.0000e-3 # [ m / s^3 / sqrt(Hz) ]. ( accel bias diffusion ) | ||
gyroscope_noise_density: 1.6968e-04 # [ rad / s / sqrt(Hz) ] ( gyro "white noise" ) | ||
gyroscope_random_walk: 1.9393e-05 # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion ) | ||
# rostopic: /uav35/vio_imu/imu_filtered | ||
time_offset: 0.0 | ||
update_rate: 1000.0 | ||
# three different modes supported: | ||
# "calibrated" (same as "kalibr"), "kalibr", "rpng" | ||
model: "kalibr" | ||
# how to get from Kalibr imu.yaml result file: | ||
# - Tw is imu0:gyroscopes:M: | ||
# - R_IMUtoGYRO: is imu0:gyroscopes:M: | ||
# - Ta is imu0:accelerometers:M: | ||
# - R_IMUtoACC not used by Kalibr | ||
# - Tg is imu0:gyroscopes:A: | ||
Tw: | ||
- [ 1.0, 0.0, 0.0 ] | ||
- [ 0.0, 1.0, 0.0 ] | ||
- [ 0.0, 0.0, 1.0 ] | ||
R_IMUtoGYRO: | ||
- [ 1.0, 0.0, 0.0 ] | ||
- [ 0.0, 1.0, 0.0 ] | ||
- [ 0.0, 0.0, 1.0 ] | ||
Ta: | ||
- [ 1.0, 0.0, 0.0 ] | ||
- [ 0.0, 1.0, 0.0 ] | ||
- [ 0.0, 0.0, 1.0 ] | ||
R_IMUtoACC: | ||
- [ 1.0, 0.0, 0.0 ] | ||
- [ 0.0, 1.0, 0.0 ] | ||
- [ 0.0, 0.0, 1.0 ] | ||
Tg: | ||
- [ 0.0, 0.0, 0.0 ] | ||
- [ 0.0, 0.0, 0.0 ] | ||
- [ 0.0, 0.0, 0.0 ] |
14 changes: 14 additions & 0 deletions
14
ros_packages/mrs_open_vins_core/config/realworld_bluefox_front/kalibr_imucam_chain.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
%YAML:1.0 | ||
|
||
cam0: | ||
T_imu_cam: #rotation from camera to IMU R_CtoI, position of camera in IMU p_CinI | ||
- [1, 0, 0, 0] | ||
- [0, 1, 0, 0] | ||
- [0, 0, 1, 0.007] | ||
- [0.0, 0.0, 0.0, 1.0] | ||
cam_overlaps: [0] | ||
camera_model: pinhole | ||
distortion_coeffs: [-0.007054279635535503,-0.013010999471709818,0.007672805064263297,-0.0034608152598251778] | ||
distortion_model: equidistant | ||
intrinsics: [218.62328342963636,218.84544019573178, 374.186243114997, 203.57046644527676] #fu, fv, cu, cv | ||
resolution: [752, 480] |
Binary file added
BIN
+354 KB
...packages/mrs_open_vins_core/config/realworld_bluefox_front/mask_mv_25003671.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
64 changes: 64 additions & 0 deletions
64
ros_packages/mrs_open_vins_core/launch/realworld_bluefox_front.launch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
<launch> | ||
|
||
<arg name="UAV_NAME" default="$(env UAV_NAME)" /> | ||
|
||
<group ns="$(arg UAV_NAME)"> | ||
|
||
<!-- SENSOR TOPICS --> | ||
<arg name="imu_topic" default="/$(arg UAV_NAME)/vio_imu/imu_filtered" /> | ||
<arg name="device" default="$(env BLUEFOX)" /> | ||
<arg name="camera_name" default="bluefox_vio_front" /> | ||
<arg name="image_topic" default="/$(arg UAV_NAME)/$(arg camera_name)/image_raw" /> | ||
|
||
<!-- what config we are going to run (should match folder name) --> | ||
<arg name="config" default="realworld_bluefox_front" /> <!-- euroc_mav, tum_vi, rpng_aruco --> | ||
<arg name="config_path" default="$(find mrs_open_vins_core)/config/$(arg config)/estimator_config.yaml" /> | ||
<arg name="verbosity" default="INFO" /> <!-- ALL, DEBUG, INFO, WARNING, ERROR, SILENT --> | ||
|
||
<!--//{ bluefox2 --> | ||
<include file="$(find bluefox2)/launch/single_nodelet.launch"> | ||
<!-- Camera Settings --> | ||
<arg name="plugin" value="false" /> | ||
<arg name="manager" value="" /> | ||
<arg name="camera_name" value="bluefox_vio_front" /> | ||
|
||
<arg name="aec" value="1" /> | ||
<arg name="ctm" value="3" /> | ||
<arg name="max_expose_jump" value="10000" /> | ||
<arg name="expose_upper_limit_us" default="50000"/> | ||
|
||
<arg name="calib_url" value="file://$(find mrs_open_vins_core)/calibration/mv_$(arg device).yaml" /> | ||
</include> | ||
<!--//}--> | ||
|
||
<!--//{ open_vins --> | ||
<node name="ov_msckf" pkg="ov_msckf" type="run_subscribe_msckf" output="screen"> | ||
|
||
<!-- master configuration object --> | ||
<param name="verbosity" type="string" value="$(arg verbosity)" /> | ||
<param name="config_path" type="string" value="$(arg config_path)" /> | ||
|
||
<!-- topics --> | ||
<param name="topic_imu" type="string" value="$(arg imu_topic)" /> | ||
<param name="topic_camera0" type="string" value="$(arg image_topic)" /> | ||
|
||
</node> | ||
<!--//}--> | ||
|
||
</group> | ||
|
||
<!--//{ vio_imu --> | ||
<include file="$(find mrs_serial)/launch/vio_imu.launch"> | ||
</include> | ||
<!--//}--> | ||
|
||
<!--//{ imu_filter --> | ||
<include file="$(find mrs_vins_imu_filter)/launch/filter_icm_42688.launch"> | ||
</include> | ||
<!--//}--> | ||
|
||
<!--//{ republisher --> | ||
<include file="$(find mrs_vins_republisher)/launch/vins_republisher_openvins_bluefox.launch"> | ||
</include> | ||
<!--//}--> | ||
</launch> |
126 changes: 126 additions & 0 deletions
126
.../mrs_open_vins_core/tmux/realworld/bluefox_front/config/bluefox_imu/estimator_config.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
%YAML:1.0 # need to specify the file type at the top! | ||
|
||
verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT | ||
|
||
use_fej: true # if first-estimate Jacobians should be used (enable for good consistency) | ||
integration: "rk4" # discrete, rk4, analytical (if rk4 or analytical used then analytical covariance propagation is used) | ||
use_stereo: false # if we have more than 1 camera, if we should try to track stereo constraints between pairs | ||
max_cameras: 1 # how many cameras we have 1 = mono, 2 = stereo, >2 = binocular (all mono tracking) | ||
|
||
calib_cam_extrinsics: true # if the transform between camera and IMU should be optimized R_ItoC, p_CinI | ||
calib_cam_intrinsics: true # if camera intrinsics should be optimized (focal, center, distortion) | ||
calib_cam_timeoffset: true # if timeoffset between camera and IMU should be optimized | ||
calib_imu_intrinsics: false # if imu intrinsics should be calibrated (rotation and skew-scale matrix) | ||
calib_imu_g_sensitivity: false # if gyroscope gravity sensitivity (Tg) should be calibrated | ||
|
||
max_clones: 11 # how many clones in the sliding window | ||
max_slam: 100 # number of features in our state vector | ||
max_slam_in_update: 25 # update can be split into sequential updates of batches, how many in a batch | ||
max_msckf_in_update: 50 # how many MSCKF features to use in the update | ||
dt_slam_delay: 3 # delay before initializing (helps with stability from bad initialization...) | ||
|
||
gravity_mag: 9.81 # magnitude of gravity in this location | ||
|
||
feat_rep_msckf: "GLOBAL_3D" | ||
feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH" | ||
feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH" | ||
# feat_rep_slam: "ANCHORED_FULL_INVERSE_DEPTH" | ||
# feat_rep_aruco: "ANCHORED_FULL_INVERSE_DEPTH" | ||
|
||
# zero velocity update parameters we can use | ||
# we support either IMU-based or disparity detection. | ||
try_zupt: false | ||
zupt_chi2_multipler: 0 # set to 0 for only disp-based | ||
zupt_max_velocity: 0.1 | ||
zupt_noise_multiplier: 50 | ||
zupt_max_disparity: 1.5 # set to 0 for only imu-based | ||
zupt_only_at_beginning: true | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
init_window_time: 2.0 # how many seconds to collect initialization information | ||
# init_window_time: 2.0 # how many seconds to collect initialization information | ||
init_imu_thresh: 0.3 # threshold for variance of the accelerometer to detect a "jerk" in motion | ||
init_max_disparity: 2.0 # max disparity to consider the platform stationary (dependent on resolution) | ||
init_max_features: 75 # how many features to track during initialization (saves on computation) | ||
|
||
init_dyn_use: false # if dynamic initialization should be used | ||
init_dyn_mle_opt_calib: false # if we should optimize calibration during intialization (not recommended) | ||
init_dyn_mle_max_iter: 50 # how many iterations the MLE refinement should use (zero to skip the MLE) | ||
init_dyn_mle_max_time: 0.05 # how many seconds the MLE should be completed in | ||
init_dyn_mle_max_threads: 6 # how many threads the MLE should use | ||
init_dyn_num_pose: 6 # number of poses to use within our window time (evenly spaced) | ||
init_dyn_min_deg: 10.0 # orientation change needed to try to init | ||
|
||
init_dyn_inflation_ori: 10 # what to inflate the recovered q_GtoI covariance by | ||
init_dyn_inflation_vel: 100 # what to inflate the recovered v_IinG covariance by | ||
init_dyn_inflation_bg: 10 # what to inflate the recovered bias_g covariance by | ||
init_dyn_inflation_ba: 100 # what to inflate the recovered bias_a covariance by | ||
init_dyn_min_rec_cond: 1e-12 # reciprocal condition number thresh for info inversion | ||
|
||
init_dyn_bias_g: [ 0.0, 0.0, 0.0 ] # initial gyroscope bias guess | ||
init_dyn_bias_a: [ 0.0, 0.0, 0.0 ] # initial accelerometer bias guess | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
record_timing_information: false # if we want to record timing information of the method | ||
record_timing_filepath: "/tmp/traj_timing.txt" # https://docs.openvins.com/eval-timing.html#eval-ov-timing-flame | ||
|
||
# if we want to save the simulation state and its diagional covariance | ||
# use this with rosrun ov_eval error_simulation | ||
save_total_state: false | ||
filepath_est: "/tmp/ov_estimate.txt" | ||
filepath_std: "/tmp/ov_estimate_std.txt" | ||
filepath_gt: "/tmp/ov_groundtruth.txt" | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
# our front-end feature tracking parameters | ||
# we have a KLT and descriptor based (KLT is better implemented...) | ||
use_klt: true # if true we will use KLT, otherwise use a ORB descriptor + robust matching | ||
num_pts: 400 # number of points (per camera) we will extract and try to track | ||
# num_pts: 200 # number of points (per camera) we will extract and try to track | ||
# fast_threshold: 20 # threshold for fast extraction (warning: lower threshs can be expensive) | ||
fast_threshold: 15 # threshold for fast extraction (warning: lower threshs can be expensive) | ||
grid_x: 5 # extraction sub-grid count for horizontal direction (uniform tracking) | ||
# grid_y: 5 # extraction sub-grid count for vertical direction (uniform tracking) | ||
grid_y: 3 # extraction sub-grid count for vertical direction (uniform tracking) | ||
# min_px_dist: 10 # distance between features (features near each other provide less information) | ||
min_px_dist: 20 # distance between features (features near each other provide less information) | ||
knn_ratio: 0.70 # descriptor knn threshold for the top two descriptor matches | ||
track_frequency: 21.0 # frequency we will perform feature tracking at (in frames per second / hertz) | ||
downsample_cameras: false # will downsample image in half if true | ||
num_opencv_threads: 4 # -1: auto, 0-1: serial, >1: number of threads | ||
histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE | ||
|
||
# aruco tag tracker for the system | ||
# DICT_6X6_1000 from https://chev.me/arucogen/ | ||
use_aruco: false | ||
num_aruco: 1024 | ||
downsize_aruco: true | ||
|
||
# ================================================================== | ||
# ================================================================== | ||
|
||
# camera noises and chi-squared threshold multipliers | ||
up_msckf_sigma_px: 1 | ||
up_msckf_chi2_multipler: 1 | ||
up_slam_sigma_px: 1 | ||
up_slam_chi2_multipler: 1 | ||
up_aruco_sigma_px: 1 | ||
up_aruco_chi2_multipler: 1 | ||
|
||
# masks for our images | ||
use_mask: false | ||
|
||
# imu and camera spacial-temporal | ||
# imu config should also have the correct noise values | ||
relative_config_imu: "kalibr_imu_chain.yaml" | ||
relative_config_imucam: "kalibr_imucam_chain.yaml" | ||
|
||
|
||
|
||
|
Oops, something went wrong.