Code Monkey home page Code Monkey logo

balm's People

Contributors

zale-liu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

balm's Issues

strange covariance matrix of the estimated poses for benchmark_realworld

Dear authors,

Thank you for the great work.
I have run the simulation/consistency app, the saved covariance matrix of the estimated poses (100 poses) is in the attached txt file. The values look fine, agreeing with the fact that the computed NEES value is as expected (600).

So I also try to compute the covariance matrix in the benchmark_realworld app.
The default app does not support Rcov, so I have made a few seemingly innocuous changes including

  1. #define POINT_NOISE, and use the PointCluster class from simulation/tools.hpp.
  2. paste multi_second and give_second from BAs.hpp to bavoxel.hpp for the right state errors.
  3. straighten the function interfaces.

Then the app is run for the first 61 scans (to save computation for a test) of the benchmark_realworld data.
The saved covariance is also attached as a txt file.
The covariance entries for the position error states is very large say 100000, as we expect very small values.
Can you please inform me about how to fix this issue?

sim_cov_100.txt
cov_61.txt

About the function acc_evaluate2 in class VOX_HESS in file bavoxel.hpp

Hello, author, I am very sorry to bother you. I deduced the first-order and second-order derivatives according to the relevant formulas given in Theorem 4 in the paper Efficient and Consistent Bundle Adjustment on Lidar Point Clouds, but they are not exactly the same as those given in the source code, Have you made relevant omissions in the source code? Can you give me some advice? thank you very much.

Performance of outdoor scenes is poor

Thank you for your excellent work,In outdoor scenes, the point cloud is corrected by using the optimized posture, and the point cloud becomes very poor。I tried modifying the following parameters to make the input plane feature as good as possible(eigen_value_array and voxel_size),I don't know where the problem is。

velodyne demo failed

Do you know the problem in the picture?

/home/yjm/BALM_ws/src/BALM/src/myso3/myso3.cpp:20: SO3::SO3(const Quaterniond&): Assertion `unit_quaternion_.squaredNorm() > SMALL_EPS' failed
Screenshot from 2020-11-17 10-20-00

Memory increasing problem

Dear Author, thanks for your great work.

I build the sliding window LIO using BALM 2.0. After calling opt_lsv.damping_iter(...) function, the total memory occupancy increase, about 100MB each time. Any advise?

Waiting for your kindly reply.

question

great work ! I have one little question, why you weighted line feature in bundle adjustment ?

issue in fix T0

x_stats[j].p = x_stats[j].p - x_stats[j].R * x_stats[0].R.transpose() * x_stats[0].p;

@Zale-Liu actually, x_stats[0].p and x_stats[j].p in global frame, x_stats[j].R is from body frame to global frame
origin code:

x_stats[j].p =
    x_stats[j].p - x_stats[j].R * x_stats[0].R.transpose() * x_stats[0].p;
x_stats[j].R = x_stats[j].R * x_stats[0].R.transpose();

fixed code:

x_stats[j].p = x_stats[0].R.transpose() *(x_stats[j].p - x_stats[0].p);
x_stats[j].R = x_stats[0].R.transpose() * x_stats[j].R;

Sliding Window BA

Dear Author.
Hello! Sorry to disturb you, I have a question to ask you. We have a scene data of 3081 frames and using BALM 2.0 to optimize him, it results in memory overflow. Therefore, we would like to use a sliding window to optimize the whole scene step by step. Could you please tell me the size of the sliding window and what is the right number of frames to set for each slide, or your suggestion for parameter setting. Thank you very much!

License

Great job! Thanks for this.
Do you plan to open sources under any standard license (possibly permissive, such as MIT or BSD)? Without a license, it cannot be used in any open or closed source projects.

sigma_vi与sigma_vTv代表了什么

class SIG_VEC_CLASS
{
public:
  Eigen::Matrix3d sigma_vTv;
  Eigen::Vector3d sigma_vi;
  int sigma_size;

  SIG_VEC_CLASS()
  {
    sigma_vTv.setZero();
    sigma_vi.setZero();
    sigma_size = 0;
  }

  void tozero()
  {
    sigma_vTv.setZero();
    sigma_vi.setZero();
    sigma_size = 0;
  }

};``

Questions about left update after LM optimization

Dear author, thanks for your excellent work.I read the paper and the code recently, but some questions in my mind.
firstly, it is why the position left_update left multiply dR, specifics in damping_inter function? as I think the dR is not necessary.
the second,why do the transformation which transfer x_states to the pose relative to es0.
image
image

Next version

Hei. When is your next version coming? Just curious!

Great work .

Derivation of direct BA formulation

Thanks for your research. I want to ask something about the edge feature of the BA formulation. How is it derived? Can you give some tricks or ways? Thx a lot!

it crashed

when i use 128 line lidars for 60 frames data ,it crashes ,but when i use just 30 frames data , it works fine . why is that happened ,and how can i improve it ?

balm_front_back: unaligned arrays

When I run "roslaunch balm balm_horizon_outdoor.launch", Tthen the following appeared:

"

SUMMARY

PARAMETERS
 * /N_SCANS: 6
 * /accumulate_window: 1
 * /blind: 0.5
 * /corn_filter_length: 0.2
 * /cos160: 160.0
 * /disA: 0.01
 * /disB: 0.1
 * /edgea: 2.0
 * /edgeb: 0.1
 * /group_size: 8
 * /inf_bound: 10.0
 * /jump_down_limit: 8.0
 * /jump_up_limit: 170.0
 * /lidar_type: 1
 * /limit_maxmid: 6.25
 * /limit_maxmin: 3.24
 * /limit_midmin: 6.25
 * /p2l_ratio: 225.0
 * /point_filter_num: 3
 * /pub_skip: 5
 * /root_corn_voxel_size: 1.0
 * /root_surf_voxel_size: 1.0
 * /rosdistro: melodic
 * /rosversion: 1.14.10
 * /scan2map_on: 0
 * /smallp_intersect: 172.5
 * /smallp_ratio: 1.2
 * /surf_filter_length: 0.4

NODES
  /
    balm_front_back (balm/balm_front_back)
    livox_feature (balm/livox_feature)
    rviz (rviz/rviz)

auto-starting new master
process[master]: started with pid [13140]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 59753fca-8dfc-11eb-ae62-3c7c3f527e1a
process[rosout-1]: started with pid [13151]
started core service [/rosout]
process[livox_feature-2]: started with pid [13158]
process[balm_front_back-3]: started with pid [13159]
process[rviz-4]: started with pid [13165]
HORIZON
1.000000 1.000000
balm_front_back: /usr/include/eigen3/Eigen/src/Core/DenseStorage.h:128: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 32>::plain_array() [with T = double; int Size = 4; int MatrixOrArrayOptions = 0]: Assertion `(internal::UIntPtr(eigen_unaligned_array_assert_workaround_gcc47(array)) & (31)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
[balm_front_back-3] process has died [pid 13159, exit code -6, cmd /home/scale/catkin_ws/devel/lib/balm/balm_front_back __name:=balm_front_back __log:=/home/scale/.ros/log/59753fca-8dfc-11eb-ae62-3c7c3f527e1a/balm_front_back-3.log].
log file: /home/scale/.ros/log/59753fca-8dfc-11eb-ae62-3c7c3f527e1a/balm_front_back-3*.log
[rviz-4] process has finished cleanly
log file: /home/scale/.ros/log/59753fca-8dfc-11eb-ae62-3c7c3f527e1a/rviz-4*.log
^C[livox_feature-2] killing on exit
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done

"

How can I solve this problem?

(PS: I did not compile successfully before. I modified the CMakeLists.txt and changed the "add_executable" of "add_executable(velodyne_feature src/features/velodyne_feature.cpp)" to "add_library". After the change, it can be compiled)

Frame rate is low

When I run the balm_velo16.launch(I use the rs_lidar16,change the topic name),the frame rate is very low,even my computer is very lagging.I use the same bag in the lego_loam have not this problem.Is the problem with the algothrim?

Why move a surfel's center by 3 sigma?

Dear authors,

I appreciate your great work.

This question arises from the code line

center += 3 * sqrt(eva0) * direct;

To me, this line shifts the center along the minor axis by 3 sigma.
The following lines split the voxel into 8 cubes, and check their planarity based on the minimum eigenvalue.
All sounds reasonable except for the above line.
So why the shift?

Perturbation in trajectory for realworld benchmark

Hello! Thank you for publishing your tool! Could you please comment on what perturbation of gt trajectory was used for realworld benchmark? I've not found this information in the paper text, there is only information for synthetic environments.

eigen value array

Dear Author,

Thank you for your work. Are there any tactics about changing the eigen value array? The results seem to be very sensitive about the array.

The calculation of the mapping quality

Hi, thank you for your great work. I am attempting to replicate the mapping quality shown in TABLE III by calculating the occupied cells of the point-cloud map. Is there any function within the project that can be used for reproducing the result?
image

BA in structure-less environments

Dear Author, thanks for your great work.

As you might know, LiDAR BA may fall into degeneracy in structure-less environments. Do you recently have plans for solving such a problem by combining visual cues, sth like a combination of SFM and BALM?

HILTI 2023 dataset ground-truth trajectory

Hi all,

I am trying to reproduce your execellent work on HILTI. Just a quick(and maybe irrelavant :D) question to ask: Where did you guys find the ground-true pose of HILTI 2023 datasets. I couldn't find any sources on the main page. While in your paper's Section VI-B you said "The ground-true lidar pose trajectory is captured by a total station or motion capture ssytem.".

Did you mean by using HILTI competitions evaluation tool? In that case, how did you guys optimize the poses of ground-true pose trajectory used for registering pointclouds, shown in Fig.10?

Thanks.

Some scenes will be mismatched

@Zale-Liu : SO3::SO3(const Quaterniond&): Assertion `unit_quaternion_.squaredNorm() > SMALL_EPS' failed.
2021-04-04 01-07-39 的屏幕截图
2021-04-04 01-07-52 的屏幕截图
Feature point extraction should be no problem, I feel that scantomap is a bit problematic

Own datasets

Hi:

As I can see this work runs on individual scans in pcd format, and a csv containing the poses.
Will be there an option to use other datasets, as our own bags?

BALM v1 alowed to use own datasets, isolated or with LOAM odometry.

Will be there any utility to capture external odometry to make the PCDs and the pose file?

Thanks in advance

The ground-truth of Steven Dataset

Dear authros of BALM:
Thanks for sharing your advanced work. I want to ask a question about your paper. In Table II, you test your algorithm, LOAM and Lego-LOAM on a Velodyne VLP-16 LiDAR dataset named Steven. Howver, the author of Lego-LOAM did not provide the ground-truth poses of this trajectory. How to evaluate the performance of these approaches on this dataset? Did you suppose that the start and end point of this trajectory is strictly overlapped and compute the total drift error?

BALM 测试结果

BALM在检测中,多次发生imu漂移,不知道是不是imu运行太快的原因!

Test BALM with robosense 128-scans lidar.

Hello, thanks for your great work! I would like to test the BALM with 128-scans lidar of robosense, I have modified the params named "N_SCANS" and "scan_line" in balm_velo16.launch, but it did not work. Are there any other parameters that need to be modified?

When will the "lidar inertial odometry application" be open sourced ?

Thank you for your excellent work.
Looking forward to the "lidar-inertial odometry with sliding window optimization" work.
I have a question. I noticed in your paper VII Application-A, only point-plane residual is used. Likewise in FAST-LIO where only point-plane registration is used while in many old loam paper, both point-plane and point-line registration is used. Is there any experiment showing that point-line registration will reduce pointcloud registration performance?

Why Second order approximation

Hi, i have a question about the slide window ba, why you choose second order approximation eigenvalues w.r.t poses?
I try to use first order approximation to solve this problem, but the iteration result cannot converge. Is this ba formulation converge region is small?

edge feature

Dear Author.

Will subsequent versions update the edge feature module?

ERROR: cannot launch node of type [balm/velodyne_feature]

after I've already built BALM, I run roslaunch balm balm_velo16.launch and I get error

  ERROR: cannot launch node of type [balm/velodyne_feature]: Cannot locate node of type [velodyne_feature] in package [balm]. Make sure file exists in package path and permission is set to executable (chmod +x)
ERROR: cannot launch node of type [balm/balm_front_back]: Cannot locate node of type [balm_front_back] in package [balm]. Make sure file exists in package path and permission is set to executable (chmod +x)

How to fix it?

simulation generated pointcloud with different structure

@Zale-Liu thanks for great works for BALM2.0,
but i confused in plane pointcloud generation, looks like plSurfs[i] has different structure.

rot = Exp({randNorml(e), randNorml(e), randNorml(e)});

my comments.
// plane normal vector and center in global frame, these two vectors vary in different pointcloud(plSurfs[i])
surfDirect[i] = rot.col(2);
surfCenter[i] << randRange(e), randRange(e), randRange(e);

// pvec(randVoxel(e), randVoxel(e), randThick(e)); in samping frame
// pvec = rot * pvec + surfCenter[i]; in global frame
// pvec = xBuf[j].R.transpose() * (pvec - xBuf[j].p); in body frame
Eigen::Vector3d pvec(randVoxel(e), randVoxel(e), randThick(e));
pvec = rot * pvec + surfCenter[i];
pvec = xBuf[j].R.transpose() * (pvec - xBuf[j].p);

generated two pointcloud from this part code. looks like these have different structure.
image
image

Result using Kitti odom data

Thanks for your work! I test BALM using Kitti odom data by using a_loam as front-end, and BALM as back-end. I found that using default parameter the result after BA gets worse in height. Does anyone have any suggestion or ideas? Below is a part of traj. Purple is gt, red is a_loam, green is aloam+BALM.
image

Compilation error

When I compile, I have installed the livox-ros-driver, but the following errors will occur,
CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
Could not find a package configuration file provided by "livox_ros_driver"
with any of the following names:

livox_ros_driverConfig.cmake
livox_ros_driver-config.cmake

globally maintained voxel map

What a great job! I noticed that Experiment 1 was mentioned in the video and paper, and through issus I also saw that you will work on combining open source and lio in the future.
I noticed that in Experiment 1, there was a globally maintained voxel map, and this map seemed to be adaptive and would not change after multiple passes.
This is something I've been thinking about lately
How was this implemented? Did you design it yourself or is there a ready-made solution that you can refer to?
2023-10-17 06-20-45屏幕截图

next version

Thank you for your contribution in lidar SLAM!
just ask when will you upload the new version with loop closure or something others?
Thank you again!

数据集

梯子数据集的下载链接失效,可以重新提供嘛

关于修正状态更新的问题

你好 感谢贵团队开源这么优秀的框架
我有一个关于修正状态更新的问题:为什么在迭代更新状态时平移的更新没有乘以误差的旋转,有什么理论依据可以参考么?
类似代码如下(摘自balmclass.hpp void damping_iter()):
so3_temp = SO3::exp(dxi.block<3, 1>(0, 0)) * so3_pose;
t_temp = t_pose + dxi.block<3, 1>(3, 0);
我的理解是这里的 t_temp =SO3::exp(dxi.block<3, 1>(0, 0)) * t_pose + dxi.block<3, 1>(3, 0);
但是我这么改了结果又不是很好。
期待回复,再次感谢!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.