Same data but not always successed. Jump & Large velocity sometimes.
j953302 opened this issue · 10 comments
Hello @rsasaki0109
Thanks for your soon reply. You have help me clean one bug in #23 . And I have add the check delta_t code in imu_preintegration.cpp.
However, when I keep play my bag data, I hope it could finish a loop.
But it will happen a lot of problem randomly.
Here I record some result here.
And I knew you are busy. But if you are free, please help me check my data or how could I avoid this randomly problem.
Thank you very much.
bag file:
https://drive.google.com/drive/folders/1Ov5nnFHmqO3qDI_GLPtWwOS9HZtOQiP0?usp=sharing
Result1:
First half everything is perfact. But other will jump out. And I will get Rviz2 info:
[rviz2]: Message Filter dropping message: frame 'base_link' at time 1686970685.207 for reason 'Unknown'
Result2:
Same. But this time it jump early than result1. And show more info like:
[imu_preintegration]: Large velocity, reset IMU-preintegration!
If I have other new found, I will update here. Thank you very much.
@j953302 Can you provide the yaml file?
@rsasaki0109 Sure. But I didn;t change anything.
lio.zip
If you need more information, please tell me.
The following output is being produced. Are you using image_projection (which is a node for scan distortion correction)?
Not using it can lead to a decrease in estimation accuracy.
[image_projection-4] Failed to find match for field 'time'.
[image_projection-4] [ERROR] [image_projection]: Point cloud is not in dense format, please remove NaN points first!
[image_projection-4] [WARN] [image_projection]: Point cloud timestamp not available, deskew function disabled, system will drift significantly!
[INFO] [image_projection-4]: process has finished cleanly [pid 1039676]
The accuracy will degrade if the following is not estimated with an actual IMU. For example, the following package could be useful: https://github.com/gaowenliang/imu_utils
imuAccNoise: 3.9939570888238808e-03
imuGyrNoise: 1.5636343949698187e-03
imuAccBiasN: 6.4356659353532566e-05
imuGyrBiasN: 3.5640318696367613e-05
Setting ndt_resolution to 1.0 or slowing down the rosbag playback speed may improve the trajectory estimation.
Note that lowering ndt_resolution reduces robustness against violent movement and rotation.
Also, if ndt_num_threads is 0, the pc load may be too high, so adjusting it for your pc may help stabilize scan matching.
And I have add the check delta_t code in imu_preintegration.cpp.
By the way, it would be great if you could give me a PR for this.
If it's too much trouble, I can fix it myself.
@j953302
In my environment, there were no issues with scan maching failure even when playing the rosbag at 1.0x with your parameters, so I suspect the problem lies with your PC specs. I would recommend adjusting the ndt_num_threads or lowering the speed of rosbag playback or using a higher spec PC.
The following output is being produced. Are you using image_projection (which is a node for scan distortion correction)? Not using it can lead to a decrease in estimation accuracy.
[image_projection-4] Failed to find match for field 'time'. [image_projection-4] [ERROR] [image_projection]: Point cloud is not in dense format, please remove NaN points first! [image_projection-4] [WARN] [image_projection]: Point cloud timestamp not available, deskew function disabled, system will drift significantly! [INFO] [image_projection-4]: process has finished cleanly [pid 1039676]
The accuracy will degrade if the following is not estimated with an actual IMU. For example, the following package could be useful: https://github.com/gaowenliang/imu_utils
imuAccNoise: 3.9939570888238808e-03 imuGyrNoise: 1.5636343949698187e-03 imuAccBiasN: 6.4356659353532566e-05 imuGyrBiasN: 3.5640318696367613e-05
[image_projection-4] Failed to find match for field 'time'. -> This problem will always occur but it will not affect my reconstruct. Is it ok?
And because imu_utilts is just for ros1. Maybe later I try to change it into ros2 and try it.
And I have add the check delta_t code in imu_preintegration.cpp.
By the way, it would be great if you could give me a PR for this. If it's too much trouble, I can fix it myself.
It's my pleasure, but I didn't change too much code.
I change in image_projection.cpp. And add some code before it check if point cloud is dense cloud point. Like below:
std::vector<int> indices;
pcl::removeNaNFromPointCloud(*laserCloudIn, *laserCloudIn, indices);
if (laserCloudIn->is_dense == false) {
RCLCPP_ERROR(
get_logger(), "Point cloud is not in dense format, please remove NaN points first!");
rclcpp::shutdown();
}
The issue seems to be resolved, so I'll close this issue.