url-kaist / dynaVINS

DynaVINS : A Visual-Inertial SLAM for Dynamic Environments
GNU General Public License v3.0
320 stars 48 forks source link

Can not run Euroc datasets #11

Open lihanlun opened 1 year ago

lihanlun commented 1 year ago

I have used VIODE datasets to test the dynaVINS, and got results as better as the paper write. However, when I use the Euroc datasets to test the dynaVINS, I find that, the dynaVINS cannot get a correct results, the results is not convergence. Have you tried other datasets except other open datasets except the paper used.

ForLoveandPeace commented 1 year ago

Hi, I have tried it and it worked well. Maybe you need to check the config of euroc.

lihanlun commented 1 year ago

I have checked it, and can not find the problem. My euroc config file as flows, could you help me check it?

Extrinsic parameter between IMU and Camera.

estimate_extrinsic: 0 # 0 Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.

1 Have an initial guess about extrinsic parameters. We will optimize around your initial guess.

body_T_cam0: !!opencv-matrix rows: 4 cols: 4 dt: d data: [0.0148655429818, -0.999880929698, 0.00414029679422, -0.0216401454975, 0.999557249008, 0.0149672133247, 0.025715529948, -0.064676986768, -0.0257744366974, 0.00375618835797, 0.999660727178, 0.00981073058949, 0.0, 0.0, 0.0, 1.0]

body_T_cam1: !!opencv-matrix rows: 4 cols: 4 dt: d data: [0.0125552670891, -0.999755099723, 0.0182237714554, -0.0198435579556, 0.999598781151, 0.0130119051815, 0.0251588363115, 0.0453689425024, -0.0253898008918, 0.0179005838253, 0.999517347078, 0.00786212447038, 0.0, 0.0, 0.0, 1.0]

Multiple thread support

multiple_thread: 1

feature traker paprameters

max_cnt: 150 # max feature number in feature tracking min_dist: 15 # min distance between two features freq: 10 # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image F_threshold: 2.0 # ransac threshold (pixel) max_depth: 10.0 # max estimated depth (m) show_track: 1 show_image_feat_weight: 1

publish tracking image as topic

flow_back: 1 # perform forward and backward optical flow to improve feature tracking accuracy

dynaVINS parameters

dyna_on: true # do not change it to false regularization_lambda: 2.0 momentum_on: true momentum_lambda: 0.2 alternating_converge: 0.9 margin_feature_thresh: 0.1

optimization parameters

max_solver_time: 0.3 # max solver itration time (ms), to guarantee real time max_num_iterations: 10 # max solver itrations, to guarantee real time keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

imu parameters The more accurate parameters you provide, the better performance

acc_n: 0.2 # accelerometer measurement noise standard deviation. gyr_n: 0.05 # gyroscope measurement noise standard deviation. acc_w: 0.02 # accelerometer bias random work noise standard deviation. gyr_w: 4.0e-5 # gyroscope bias random work noise standard deviation. g_norm: 9.81007 # gravity magnitude

unsynchronization parameters

estimate_td: 0 # online estimate time offset between camera and imu td: 0.0 # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)

lihanlun commented 1 year ago

cam0 config file as fellows: model_type: PINHOLE camera_name: camera image_width: 752 image_height: 480 distortion_parameters: k1: -2.9545645106987750e-01 k2: 8.6623215640186171e-02 p1: 2.0132892276082517e-06 p2: 1.3924531371276508e-05 projection_parameters: fx: 4.6115862106007575e+02 fy: 4.5975286598073296e+02 cx: 3.6265929181685937e+02 cy: 2.4852105668448124e+02

lihanlun commented 1 year ago

cam1 config file as fellows: model_type: PINHOLE camera_name: camera image_width: 752 image_height: 480 distortion_parameters: k1: -2.9294124381930947e-01 k2: 8.4798002331543665e-02 p1: -2.9984646536002372e-04 p2: 3.0028216325237329e-04 projection_parameters: fx: 4.6009781682258682e+02 fy: 4.5890983492218902e+02 cx: 3.7314916359808268e+02 cy: 2.5440734973672119e+02

lihanlun commented 1 year ago

Or, Could you share your euroc config files?

ForLoveandPeace commented 1 year ago

I have used evo to evaluate dynaVINS on Machine Hall dataset. As result, VINS-Fusion's performance is better than dynaVINS's. Actually, your config file is almost same with mine. Could you show more information about the error?

lihanlun commented 1 year ago

Thank you for your share information. When I use euroc MH01, at the beginning it is OK, then show the wrong traj ( traj as straight line). Now I find that, I should change some code: while(costDiff<DYN_ALT_CONV && iteration<5) { optimizeVIO(true,costDiff); optimizeVIO(false,costDiff); std::cout<<"COSTDIFF:"<<costDiff<<std::endl; iteration++; } To

while(costDiff<DYN_ALT_CONV && iteration<5) { optimizeVIO(false,costDiff); optimizeVIO(true,costDiff); std::cout<<"COSTDIFF:"<<costDiff<<std::endl; iteration++; }

It can get a correct traj, but worse than vins-fusion.

lihanlun commented 1 year ago

I think the code should fix feature_weight first then fix others and optimize feature_weight. A very big problem is that the results get worse.

zhipengak commented 1 year ago

I have the same problem, DynaVins can't get the reasonable result with Euroc dataset. Also I try it with my dataset I acquired from my chassis, bad trajectory I got. But both Euroc dataset and my dataset I can run well in VINS-fusions!

ForLoveandPeace commented 1 year ago

I have the same problem, DynaVins can't get the reasonable result with Euroc dataset. Also I try it with my dataset I acquired from my chassis, bad trajectory I got. But both Euroc dataset and my dataset I can run well in VINS-fusions!

Hi, could you show more details? Thanks!

zhipengak commented 1 year ago

Problem solved! I replace the yaml "cam0_pinhole.yaml" and "cam1_pinhole.yaml" with "cam0_mei.yaml" and "cam0_mei.yaml", it work and output the right trajectory! I dont know why "cam0_pinhole.yaml" and "cam1_pinhole.yaml" are not work, but glad this code can work with "cam0_mei.yaml" and "cam0_mei.yaml"! Thank you for share this code very much! 图片

lihanlun commented 1 year ago

Problem solved! I replace the yaml "cam0_pinhole.yaml" and "cam1_pinhole.yaml" with "cam0_mei.yaml" and "cam0_mei.yaml", it work and output the right trajectory! I dont know why "cam0_pinhole.yaml" and "cam1_pinhole.yaml" are not work, but glad this code can work with "cam0_mei.yaml" and "cam0_mei.yaml"! Thank you for share this code very much! 图片

I have tried this method,but the result is still wrose than vins-fusion. Have you evaluated the results on Euroc datasets.