You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying to run open_vins on a Raspberry Pi 4 with 4GB RAM. I installed ROS2 humble from source and it works fine.
To compile open_vins. I first installed deps
I tries using the default euroc_mav config file, the ran the ros2 launch ov_msckf subscribe.launch.py config:=euroc_mav, but the pose diverges quickly. I played the V1_01_easy bag.
I updated the config file as follows
%YAML:1.0 # need to specify the file type at the top!verbosity: "INFO"# ALL, DEBUG, INFO, WARNING, ERROR, SILENTuse_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: true # if we have more than 1 camera, if we should try to track stereo constraints between pairsmax_cameras: 2# 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_CinIcalib_cam_intrinsics: true # if camera intrinsics should be optimized (focal, center, distortion)calib_cam_timeoffset: true # if timeoffset between camera and IMU should be optimizedcalib_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 calibratedmax_clones: 11# how many clones in the sliding windowmax_slam: 25# number of features in our state vectormax_slam_in_update: 25# update can be split into sequential updates of batches, how many in a batchmax_msckf_in_update: 20# how many MSCKF features to use in the updatedt_slam_delay: 1# delay before initializing (helps with stability from bad initialization...)gravity_mag: 9.81# magnitude of gravity in this locationfeat_rep_msckf: "GLOBAL_3D"feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"# zero velocity update parameters we can use# we support either IMU-based or disparity detection.try_zupt: falsezupt_chi2_multipler: 0# set to 0 for only disp-basedzupt_max_velocity: 0.1zupt_noise_multiplier: 10zupt_max_disparity: 0.5# set to 0 for only imu-basedzupt_only_at_beginning: false# ==================================================================# ==================================================================init_window_time: 2.0# how many seconds to collect initialization informationinit_imu_thresh: 1.5# threshold for variance of the accelerometer to detect a "jerk" in motioninit_max_disparity: 10.0# max disparity to consider the platform stationary (dependent on resolution)init_max_features: 50# how many features to track during initialization (saves on computation)init_dyn_use: false # if dynamic initialization should be usedinit_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 ininit_dyn_mle_max_threads: 6# how many threads the MLE should useinit_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 initinit_dyn_inflation_ori: 10# what to inflate the recovered q_GtoI covariance byinit_dyn_inflation_vel: 100# what to inflate the recovered v_IinG covariance byinit_dyn_inflation_bg: 10# what to inflate the recovered bias_g covariance byinit_dyn_inflation_ba: 100# what to inflate the recovered bias_a covariance byinit_dyn_min_rec_cond: 1e-12# reciprocal condition number thresh for info inversioninit_dyn_bias_g: [ 0.0, 0.0, 0.0 ] # initial gyroscope bias guessinit_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 methodrecord_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_simulationsave_total_state: falsefilepath_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 matchingnum_pts: 50# number of points (per camera) we will extract and try to trackfast_threshold: 20# 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)min_px_dist: 10# distance between features (features near each other provide less information)knn_ratio: 0.70# descriptor knn threshold for the top two descriptor matchestrack_frequency: 21.0# frequency we will perform feature tracking at (in frames per second / hertz)downsample_cameras: false # will downsample image in half if truenum_opencv_threads: 1# -1: auto, 0-1: serial, >1: number of threadshistogram_method: "HISTOGRAM"# NONE, HISTOGRAM, CLAHE# aruco tag tracker for the system# DICT_6X6_1000 from https://chev.me/arucogen/use_aruco: falsenum_aruco: 1024downsize_aruco: true# ==================================================================# ==================================================================# camera noises and chi-squared threshold multipliersup_msckf_sigma_px: 1up_msckf_chi2_multipler: 1up_slam_sigma_px: 1up_slam_chi2_multipler: 1up_aruco_sigma_px: 1up_aruco_chi2_multipler: 1# masks for our imagesuse_mask: false# imu and camera spacial-temporal# imu config should also have the correct noise valuesrelative_config_imu: "kalibr_imu_chain.yaml"relative_config_imucam: "kalibr_imucam_chain.yaml"
Then, I ran the node gain, but it still diverges as I see it in RViz. I don't run RViz on the Raspberry Pi, I run it on a separate laptop on the same network, and I only visualize the imu path topic.
In DEBUG mode, here is the node output just after I stopped node when the pose started to diverge.
@Hohyeong I am not sure if it is related to the computation power of RPi 4 or the dataset, but I managed to run the estimator using real-time stereo images on the same RPi 4 and MPU6050 IMU.
@mzahana When I applied the EuroC dataset V1_01 easy to OpenVINS, I checked that the state diverges. Was the state converging properly when do you use real-time sensor? As I check with other issues, I saw that ROS2 often has problems in multi-threading environment. So I'm considering about using OpenVINS based on ROS1.
Hi @goldbattle
I am trying to run open_vins on a Raspberry Pi 4 with 4GB RAM. I installed ROS2 humble from source and it works fine.
To compile open_vins. I first installed deps
sudo apt-get update && sudo apt-get install -y \ libeigen3-dev \ libboost-all-dev \ libceres-dev \
Then I compiled the ros workspace using
MAKEFLAGS="-j1 -l1" colcon build --executor sequential --cmake-args -DCMAKE_BUILD_TYPE=Release
The compilation went fine.
My OpenCV version is
4.6.0
I tries using the default euroc_mav config file, the ran the
ros2 launch ov_msckf subscribe.launch.py config:=euroc_mav
, but the pose diverges quickly. I played theV1_01_easy
bag.I updated the config file as follows
Then, I ran the node gain, but it still diverges as I see it in RViz. I don't run RViz on the Raspberry Pi, I run it on a separate laptop on the same network, and I only visualize the imu path topic.
In
DEBUG
mode, here is the node output just after I stopped node when the pose started to diverge.The frequency of the
poseimu
is between 10 and 15 hzHere is the output of
ros2 run ov_core test_profile
Is there any optimization that can be done for the filter to work OK on Raspberry Pi 4 with 4GB RAM?
Thank you for your time.
The text was updated successfully, but these errors were encountered: