Coder Social home page Coder Social logo

a-loam's People

Contributors

cuitaixiang avatar qintonguav avatar shaozu 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

a-loam's Issues

Saving the mapping result

Hi, first of all I want to say great work on this algorithm, very robust and useful!
My question here is after we run the algorithm, and we have done the mapping process, how to save this map information into a file?

Thanks a lot!

Question about Kitti data.

The results from rviz I can get is this:
A-LOAM-RVIZ
and I have already select after_maped topic. Is there anything wrong?
I also confused that I can't find my point cloud image and i have select the point cloud topic too? I realy want to know how to recurring the effect like this ?
image
I really need your help, Is there anything wrong, could you please give me some advice ? Thanks!

Did anyone test the running time in KITTI or own dataset?

Thanks for the nice code from your guys,
after trying your code I have found that in VLP-32 the whole mapping time may cost 130ms per frame (may not reach real-time performance)

Can anyone provide some suggestions to speed up that code? Thanks.

Huge vertical deviation for a long dataset

Hi thanks for sharing such a good project.

I've tested your project with my own dataset which is around 1700 seconds. What I noticed there was a huge vertical deviation for the path after around 1300 seconds as shown below

allMapCloud
image

AftMapped Path
It's very clear here, that's supposed to be at the same level.
image

And the ground truth doesn't have this vertical deviation at all, all streets were at the same level.

What do you think the issue would come from? And how can I resolve this issue?

Thanks!

the input requirement

Hi, I'd like to test on my own data, and I am wondering what is the minimum requirement for the overlap between two frames of lidar points cloud?
Thank you very much!

A short documentation/explanation about topic names

Is there a short description of topic names? The cloud ones sort of self explanatory but for example what's the difference between aft_mapped_to_init and laser_odom_to_init? I would be glad if someone can explain. Thanks.

How to run owe Lidar data?

Thank you for your excellent work.

There are some own data which are not from velodyne, is it possible to run own dataset? If so, what kind of data form is needed?

Looking forward to hearing from you soon!

Intensity

Is there a way to get point cloud map with intensity??

Problem on kitti_helper.launch

Now I am trying to test A-LOAM on kitti (velodyne laser data, 80 GB), as far as I know, we should try to transform them into ROS bag at first. (if it is not true, please point it out).

When I use the kitti_helper.launch, the output is only a .bag file about 4kB in total.

This is the terminal information:
`... logging to /home/objloc/.ros/log/c787383e-8951-11ea-b5c0-9cebe8b95aff/roslaunch-deeplearning-12255.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://deeplearning:xxxxx/

SUMMARY

PARAMETERS

  • /kittiHelper/dataset_folder: /home/objloc/OBJL...
  • /kittiHelper/output_bag_file: /home/objloc/OBJL...
  • /kittiHelper/publish_delay: 1
  • /kittiHelper/sequence_number: 004
  • /kittiHelper/to_bag: True
  • /rosdistro: kinetic
  • /rosversion: 1.12.14

NODES
/
kittiHelper (aloam_velodyne/kittiHelper)

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

setting /run_id to c787383e-8951-11ea-b5c0-9cebe8b95aff
process[rosout-1]: started with pid [12282]
started core service [/rosout]
process[kittiHelper-2]: started with pid [12300]
Reading sequence 004 from /home/objloc/OBJLOC/A-LOAM/
Done
[kittiHelper-2] process has finished cleanly
log file: /home/objloc/.ros/log/c787383e-8951-11ea-b5c0-9cebe8b95aff/kittiHelper-2*.log
`
any suggestion or advice for it?

scanRegistration issue

    if (!halfPassed)
    {   //确保-pi/2 < ori - startOri < 3*pi/2
        if (ori < startOri - M_PI / 2)
        {
            ori += 2 * M_PI;
        }
        else if (ori > startOri + M_PI * 3 / 2)
        {
            ori -= 2 * M_PI;
        }

        if (ori - startOri > M_PI)
        {
            halfPassed = true;
        }
    }
    else
    {   //确保-3*pi/2 < ori - endOri < pi/2
        ori += 2 * M_PI;
        if (ori < endOri - M_PI * 3 / 2)
        {
            ori += 2 * M_PI;
        }
        else if (ori > endOri + M_PI / 2)
        {
            ori -= 2 * M_PI;
        }
    }

    float relTime = (ori - startOri) / (endOri - startOri); 

您好,我想问一下关于这块的公式是正确的吗?M_PI < endOri - startOri < 3 * M_PI,-pi/2 < ori - startOri < 3*pi/2
我发现计算出的结果是错误的,我不知道是不是我的理解有问题,能帮吗解答一下吗?在我理解中,应该将ori按照endori的方式,加2π,然后再分类讨论,才能得出正确的时间结果。

Losing intensity values when recording from /velodyne_cloud_registered

I'm using a-loam as part of a ros workflow to help stabilize point clouds captured with an ouster lidar scanner. I feed a-loam data played from a bag (referred to as pc.bag) containing PointCloud2 and imu messages while recording the the /velodyne_cloud_registered topic of PointCloud2 messages.

My issue when I visualize this data is I only see colored rings from bottom to top instead of intensity values.
image

After inspecting some of the code base I see that there is a line setting the intensity value to something else

point.intensity = scanID + scanPeriod * relTime;
, but when I comment it out, I still don't get the correct values.

Is there some where in the code where I can specify that I want the original values which my pc.bag has?

terminate called after throwing an instance of 'std::bad_alloc'

I have run successfully to get result of KITTI 00~09. But when I test Sequence 10, Error happens:

ThinkStation:~/catkin_ws$ roslaunch aloam_velodyne kitti_helper.launch
... logging to /home/*/.ros/log/22327ae4-994a-11e9-b2df-cc52af3d9390/roslaunch-dlr-ThinkStation-14860.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://ThinkStation:34326/

SUMMARY
========

PARAMETERS
 * /kittiHelper/dataset_folder: /home/*/Project...
 * /kittiHelper/output_bag_file: /home/*/catkin_...
 * /kittiHelper/publish_delay: 1
 * /kittiHelper/sequence_number: 10
 * /kittiHelper/to_bag: True
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /
    kittiHelper (aloam_velodyne/kittiHelper)

ROS_MASTER_URI=http://localhost:11311

process[kittiHelper-1]: started with pid [14877]
Reading sequence 10 from /home/*/Project/ORB_SLAM2/Examples/kitti-benchmark/dataset/
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
[kittiHelper-1] process has died [pid 14877, exit code -6, cmd /home/*/catkin_ws/devel/lib/aloam_velodyne/kittiHelper __name:=kittiHelper __log:=/home/*/.ros/log/22327ae4-994a-11e9-b2df-cc52af3d9390/kittiHelper-1.log].
log file: /home/*/.ros/log/22327ae4-994a-11e9-b2df-cc52af3d9390/kittiHelper-1*.log
all processes on machine have died, roslaunch will exit
shutting down processing monitor...
... shutting down processing monitor complete
done

Could you help me with it?
Thanks in advance~

Logic of the scanID

can you explain the logic of L171.
I'm using VLP16 lidar, attaching my scanID and Vertcal angle relationship diagram
vlp_scan_draw

Range check for output index of nearestKSearch()

I have tried running A-LOAM on Velodyne lidar .bag file recordings and encountered a bug when processing point-clouds.
In laserOdometry.cpp, at line 390:
kdtreeCornerLast->nearestKSearch(pointSel, 1, pointSearchInd, pointSearchSqDis);
pointSearchInd is later used to refer to values from laserCloudCornerLast->points[] list

...
closestPointInd = pointSearchInd[0];
...
int closestPointScanID = int(laserCloudCornerLast->points[closestPointInd].intensity);
...

It happens that the index obtained from nearestKSearch() is a number that exceeds the length of the laserCloudCornerLast->points list and causes this node to stop.

What I added was index check after line 395:

if (closestPointInd >= 0 && closestPointInd < (int)laserCloudCornerLast->points.size()){  
... lines 397 to 481...
}

and the remainder of the code for that block (line 394-482) should go inside if-block to make sure list is not invoked with invalid index.

could you show the optimize time on your computer and the config of your computer?

On my computer, the whole laserOdometry time is about 15ms, and the mapping optimization time is about 300 ms, the lidar type is velodyne's VLP16, the config of my computer is :
Intel® Core™ i7-8750H CPU @ 2.20GHz × 12
32G RAM
I confuse that is it realtime on your computer? or is there other options to speed up the a-loam?

Quanergy M8

Hi, if I want to use the data collected from Quanergy M8 Lidar, what should I do? I find the map can not be generated when I play the data collected with Quanergy M8. Thanks

Using pose and orientation from /aft_mapped_to_init

I'm interested in capturing in a ros bag the pose and orientation values applied to the /velodyne_cloud_registered, would I be capturing the right topic if I used /aft_mapped_to_init ?

My thinking is that if I can't preserve the intensity values going into the aloam process then perhaps I can use these pose and orientation values to transform the pointcloud messages so each time step aligns correctly.

If there's a different way to get the pose and orientation values that get applied to the point cloud on the /velodyne_cloud_registered topic I'd love to know! Thanks

2D static lidar

Hello, I want to whether i can run LOAM with a 2D lidar which is fixed on the board?

Reset position periodically in difficult enviroment (tube with concreate wall completely flat...no tubes,lights, doors,ecc...)

Hello.
I do not know if this feature is alredy implemented, but I would like to reset the position estimated by slam to (x,y,z)=(0m,0m,0m) periodically. For example I move forward from 0=(x,y,z)=(0m,0m,0m) to point A=(x,y,z)=(3m,1m,1.5m), at this moment I would like to restart the estimation in order to go to another point B=(x,y,z)=(6m,1m,1.5m)(absolute position from O), but considering point A as the new origin. So point B will be B=(x,y,z)=(3m,0m,0m) (position of B relative to A).

Is possible to do such a thing? There are any problems of stability? Someone have already do this?

rviz界面中鼠标无法拖动界面

秦通大神您好,在使用您A-LOAM代码的VLP-16.launch时,发现rviz界面中鼠标无法拖动界面变化,导致时间久了机器人就消失在画面外了,请问如何在.rviz文件中修改这一项

LASER CLOUD MAP SAVE

Hi, is it possible to save the laser cloud map from the rviz?
I tried the rosbag record, the topic of laser_cloud_map looks a little weird.
Is there a method to save the map?

Question about kittiHelper.launch

I have download the Kitti Velodyne bag files into my data folder, but it doesn't work. Should I download the color sequences or the gray sequency to the same folder?

Bad result of KITTI 00 sequence

Hi, thanks for sharing your code. I used evo to evaluate the trajectory I got from running your codes in ROS. But the result is not that ideal like you got in KITTI ranking. So there may be something wrong with my evaluation or steps. Could you please give me some advices on evaluating or tuning?

aloam

After running velodyne aloam_velodyne_64.launch I played rosbag of 00 sequence (2011_10_03_drive_0027) instead of kitti_helper.launch and odom data in folders. The running speed of bag was set to 0.1. And I remapped the published topic of point cloud to "/velodyne_points". The command "rostopic echo /laser_odom_to_unit/pose/pose > result.txt" is used to record the trajectory.

Thanks.

kittiHelper.cpp中时间戳问题

if (to_bag)
{
bag_out.write("/image_left", ros::Time::now(), image_left_msg);
bag_out.write("/image_right", ros::Time::now(), image_right_msg);
bag_out.write("/velodyne_points", ros::Time::now(), laser_cloud_msg);
bag_out.write("/path_gt", ros::Time::now(), pathGT);
bag_out.write("/odometry_gt", ros::Time::now(), odomGT);
}
是不是应该写成:
if(timestamp == 0.0)
{
bag_out.write("/image_left", ros::TIME_MIN, image_left_msg);
bag_out.write("/image_right", ros::TIME_MIN, image_right_msg);
bag_out.write("/velodyne_points", ros::TIME_MIN, laser_cloud_msg);
bag_out.write("/path_gt", ros::TIME_MIN, pathGT);
bag_out.write("/odometry_gt", ros::TIME_MIN, odomGT);
}
else
{
bag_out.write("/image_left", ros::Time().fromSec(timestamp), image_left_msg);
bag_out.write("/image_right", ros::Time().fromSec(timestamp), image_right_msg);
bag_out.write("/velodyne_points", ros::Time().fromSec(timestamp), laser_cloud_msg);
bag_out.write("/path_gt", ros::Time().fromSec(timestamp), pathGT);
bag_out.write("/odometry_gt", ros::Time().fromSec(timestamp), odomGT);
}

Changes caused by inclined lidar.

Hi, thanks for the great work.

I'm trying to evaluate the algorithm in a Velodyne HDL 32 mounted with a 45° inclination. Can you please point out if there are any changes in the pipeline I should implement in order to achieve better results?

Thank you!

compile error

hi,when I compile A-LOAM package,I meet some errors as fellow,

/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Solve(cs_di_symbolic*, cs_di_numeric*, double*)': cxsparse.cc:(.text+0x92): undefined reference to cs_di_ipvec'
cxsparse.cc:(.text+0xa6): undefined reference to cs_di_lsolve' cxsparse.cc:(.text+0xba): undefined reference to cs_di_ltsolve'
cxsparse.cc:(.text+0xd3): undefined reference to cs_di_pvec' cxsparse.cc:(.text+0x108): undefined reference to cs_di_free'
cxsparse.cc:(.text+0x114): undefined reference to cs_di_malloc' /usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::SolveCholesky(cs_di_sparse*, double*)':
cxsparse.cc:(.text+0x31a): undefined reference to cs_di_cholsol' /usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::BlockAnalyzeCholesky(cs_di_sparse*, std::vector<int, std::allocator > const&, std::vector<int, std::allocator > const&)':
cxsparse.cc:(.text+0x438): undefined reference to cs_di_amd' cxsparse.cc:(.text+0x4ba): undefined reference to cs_di_free'
cxsparse.cc:(.text+0x4f6): undefined reference to cs_di_calloc' cxsparse.cc:(.text+0x506): undefined reference to cs_di_pinv'
cxsparse.cc:(.text+0x516): undefined reference to cs_di_symperm' cxsparse.cc:(.text+0x523): undefined reference to cs_di_etree'
cxsparse.cc:(.text+0x532): undefined reference to cs_di_post' cxsparse.cc:(.text+0x546): undefined reference to cs_di_counts'
cxsparse.cc:(.text+0x551): undefined reference to cs_di_free' cxsparse.cc:(.text+0x559): undefined reference to cs_di_spfree'
cxsparse.cc:(.text+0x569): undefined reference to cs_di_malloc' cxsparse.cc:(.text+0x57b): undefined reference to cs_di_cumsum'
cxsparse.cc:(.text+0x58d): undefined reference to cs_di_free' cxsparse.cc:(.text+0x60c): undefined reference to cs_di_sfree'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::CreateSparseMatrix(ceres::internal::TripletSparseMatrix*)': cxsparse.cc:(.text+0x802): undefined reference to cs_di_compress'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::ApproximateMinimumDegreeOrdering(cs_di_sparse*, int*)': cxsparse.cc:(.text+0x890): undefined reference to cs_di_amd'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::~CXSparse()': cxsparse.cc:(.text+0x2b): undefined reference to cs_di_free'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Cholesky(cs_di_sparse*, cs_di_symbolic*)': cxsparse.cc:(.text+0x47): undefined reference to cs_di_chol'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::AnalyzeCholesky(cs_di_sparse*)': cxsparse.cc:(.text+0x336): undefined reference to cs_di_schol'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::AnalyzeCholeskyWithNaturalOrdering(cs_di_sparse*)': cxsparse.cc:(.text+0x343): undefined reference to cs_di_schol'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::ApproximateMinimumDegreeOrdering(cs_di_sparse*, int*)': cxsparse.cc:(.text+0x8b7): undefined reference to cs_di_free'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::TransposeMatrix(cs_di_sparse*)': cxsparse.cc:(.text+0x8c9): undefined reference to cs_di_transpose'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::MatrixMatrixMultiply(cs_di_sparse*, cs_di_sparse*)': cxsparse.cc:(.text+0x8d7): undefined reference to cs_di_multiply'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Free(cs_di_sparse*)': cxsparse.cc:(.text+0x8e4): undefined reference to cs_di_spfree'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Free(cs_di_symbolic*)': cxsparse.cc:(.text+0x8f4): undefined reference to cs_di_sfree'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Free(cs_di_numeric*)': cxsparse.cc:(.text+0x904): undefined reference to cs_di_nfree'
collect2: error: ld returned 1 exit status
A-LOAM/CMakeFiles/alaserOdometry.dir/build.make:437: recipe for target '/home/nari/catkin_ws/devel/lib/aloam_velodyne/alaserOdometry' failed
make[2]: *** [/home/nari/catkin_ws/devel/lib/aloam_velodyne/alaserOdometry] Error 1
CMakeFiles/Makefile2:2458: recipe for target 'A-LOAM/CMakeFiles/alaserOdometry.dir/all' failed
make[1]: *** [A-LOAM/CMakeFiles/alaserOdometry.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Solve(cs_di_symbolic*, cs_di_numeric*, double*)': cxsparse.cc:(.text+0x92): undefined reference to cs_di_ipvec'
cxsparse.cc:(.text+0xa6): undefined reference to cs_di_lsolve' cxsparse.cc:(.text+0xba): undefined reference to cs_di_ltsolve'
cxsparse.cc:(.text+0xd3): undefined reference to cs_di_pvec' cxsparse.cc:(.text+0x108): undefined reference to cs_di_free'
cxsparse.cc:(.text+0x114): undefined reference to cs_di_malloc' /usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::SolveCholesky(cs_di_sparse*, double*)':
cxsparse.cc:(.text+0x31a): undefined reference to cs_di_cholsol' /usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::BlockAnalyzeCholesky(cs_di_sparse*, std::vector<int, std::allocator > const&, std::vector<int, std::allocator > const&)':
cxsparse.cc:(.text+0x438): undefined reference to cs_di_amd' cxsparse.cc:(.text+0x4ba): undefined reference to cs_di_free'
cxsparse.cc:(.text+0x4f6): undefined reference to cs_di_calloc' cxsparse.cc:(.text+0x506): undefined reference to cs_di_pinv'
cxsparse.cc:(.text+0x516): undefined reference to cs_di_symperm' cxsparse.cc:(.text+0x523): undefined reference to cs_di_etree'
cxsparse.cc:(.text+0x532): undefined reference to cs_di_post' cxsparse.cc:(.text+0x546): undefined reference to cs_di_counts'
cxsparse.cc:(.text+0x551): undefined reference to cs_di_free' cxsparse.cc:(.text+0x559): undefined reference to cs_di_spfree'
cxsparse.cc:(.text+0x569): undefined reference to cs_di_malloc' cxsparse.cc:(.text+0x57b): undefined reference to cs_di_cumsum'
cxsparse.cc:(.text+0x58d): undefined reference to cs_di_free' cxsparse.cc:(.text+0x60c): undefined reference to cs_di_sfree'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::CreateSparseMatrix(ceres::internal::TripletSparseMatrix*)': cxsparse.cc:(.text+0x802): undefined reference to cs_di_compress'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::ApproximateMinimumDegreeOrdering(cs_di_sparse*, int*)': cxsparse.cc:(.text+0x890): undefined reference to cs_di_amd'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::~CXSparse()': cxsparse.cc:(.text+0x2b): undefined reference to cs_di_free'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Cholesky(cs_di_sparse*, cs_di_symbolic*)': cxsparse.cc:(.text+0x47): undefined reference to cs_di_chol'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::AnalyzeCholesky(cs_di_sparse*)': cxsparse.cc:(.text+0x336): undefined reference to cs_di_schol'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::AnalyzeCholeskyWithNaturalOrdering(cs_di_sparse*)': cxsparse.cc:(.text+0x343): undefined reference to cs_di_schol'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::ApproximateMinimumDegreeOrdering(cs_di_sparse*, int*)': cxsparse.cc:(.text+0x8b7): undefined reference to cs_di_free'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::TransposeMatrix(cs_di_sparse*)': cxsparse.cc:(.text+0x8c9): undefined reference to cs_di_transpose'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::MatrixMatrixMultiply(cs_di_sparse*, cs_di_sparse*)': cxsparse.cc:(.text+0x8d7): undefined reference to cs_di_multiply'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Free(cs_di_sparse*)': cxsparse.cc:(.text+0x8e4): undefined reference to cs_di_spfree'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Free(cs_di_symbolic*)': cxsparse.cc:(.text+0x8f4): undefined reference to cs_di_sfree'
/usr/local/lib/libceres.a(cxsparse.cc.o): In function ceres::internal::CXSparse::Free(cs_di_numeric*)': cxsparse.cc:(.text+0x904): undefined reference to cs_di_nfree'
collect2: error: ld returned 1 exit status
A-LOAM/CMakeFiles/alaserMapping.dir/build.make:437: recipe for target '/home/nari/catkin_ws/devel/lib/aloam_velodyne/alaserMapping' failed
make[2]: *** [/home/nari/catkin_ws/devel/lib/aloam_velodyne/alaserMapping] Error 1
CMakeFiles/Makefile2:1963: recipe for target 'A-LOAM/CMakeFiles/alaserMapping.dir/all' failed
make[1]: *** [A-LOAM/CMakeFiles/alaserMapping.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2

Can you give me some advices how to resolve these problems?Thank you!

ground pose frame and laser points frame

Hi @shaozu , thanks for your share. According to kitti_development_kit/readme.txt, GT pose is left camera(Z-front, X-right, Y-down) in left_camera_0th(world) pose. when convert GT pose into loam's camera_init frame(Z-front, X-left, Y-up), use R_transform << 0, 0, 1, -1, 0, 0, 0, -1, 0;. I think R_camInit_world = Rz(-pi), p_camInit = R_camInit_world * GT_pose, should be R_transform << -1, 0, 0, 0, -1, 0, 0, 0, 1 ?

When publish "/velodyne_points" to loam, each points is in camera_init loam's world frame, why not is velodyne frame?

Thanks in advance!

Can this package successfully build on ubuntu 14.04(x64) ?

I build this A-LOAM on my ubuntu14.04(x64, virtual machine) , but it seems that the it's not compatiable with some library in ceres and Eigen.
I also build the package in Ubuntu16.04, and this problem didn't occur.
The following is the error information, could you please give me some advice?

In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:41:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h: In instantiation of ‘Eigen::Quaternion<typename Eigen::internal::traits<T>::Scalar> Eigen::QuaternionBase<Derived>::slerp(const Scalar&, const Eigen::QuaternionBase<OtherDerived>&) const [with OtherDerived = Eigen::Quaternion<ceres::Jet<double, 7>, 0>; Derived = Eigen::Quaternion<ceres::Jet<double, 7>, 0>; typename Eigen::internal::traits<T>::Scalar = ceres::Jet<double, 7>; Eigen::QuaternionBase<Derived>::Scalar = ceres::Jet<double, 7>]’:
/home/either/catkin_tws/src/A-LOAM/src/lidarFactor.hpp:81:15:   required from ‘bool LidarPlaneFactor::operator()(const T*, const T*, T*) const [with T = ceres::Jet<double, 7>]’
/usr/local/include/ceres/internal/variadic_evaluate.h:168:26:   required from ‘static bool ceres::internal::VariadicEvaluate<Functor, T, N0, N1, 0, 0, 0, 0, 0, 0, 0, 0>::Call(const Functor&, const T* const*, T*) [with Functor = LidarPlaneFactor; T = ceres::Jet<double, 7>; int N0 = 4; int N1 = 3]’
/usr/local/include/ceres/internal/autodiff.h:290:45:   required from ‘static bool ceres::internal::AutoDiff<Functor, T, N0, N1, N2, N3, N4, N5, N6, N7, N8, N9>::Differentiate(const Functor&, const T* const*, int, T*, T**) [with Functor = LidarPlaneFactor; T = double; int N0 = 4; int N1 = 3; int N2 = 0; int N3 = 0; int N4 = 0; int N5 = 0; int N6 = 0; int N7 = 0; int N8 = 0; int N9 = 0]’
/usr/local/include/ceres/autodiff_cost_function.h:218:25:   required from ‘bool ceres::AutoDiffCostFunction<CostFunctor, kNumResiduals, N0, N1, N2, N3, N4, N5, N6, N7, N8, N9>::Evaluate(const double* const*, double*, double**) const [with CostFunctor = LidarPlaneFactor; int kNumResiduals = 1; int N0 = 4; int N1 = 3; int N2 = 0; int N3 = 0; int N4 = 0; int N5 = 0; int N6 = 0; int N7 = 0; int N8 = 0; int N9 = 0]’
/home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:602:1:   required from here
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: error: no match for ‘operator<’ (operand types are ‘Eigen::QuaternionBase<Eigen::Quaternion<ceres::Jet<double, 7>, 0> >::Scalar {aka ceres::Jet<double, 7>}’ and ‘int’)
   if(d<0) scale1 = -scale1;
       ^
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note: candidates are:
In file included from /usr/local/include/ceres/internal/autodiff.h:145:0,
                 from /usr/local/include/ceres/autodiff_cost_function.h:132,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/either/catkin_tws/src/A-LOAM/src/lidarFactor.hpp:4,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:57:
/usr/local/include/ceres/jet.h:416:1: note: template<class T, int N> bool ceres::operator<(const ceres::Jet<T, N>&, const T&)
 CERES_DEFINE_JET_COMPARISON_OPERATOR( <  )  // NOLINT
 ^
/usr/local/include/ceres/jet.h:416:1: note:   template argument deduction/substitution failed:
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:41:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note:   deduced conflicting types for parameter ‘const T’ (‘double’ and ‘int’)
   if(d<0) scale1 = -scale1;
       ^
In file included from /usr/local/include/ceres/internal/autodiff.h:145:0,
                 from /usr/local/include/ceres/autodiff_cost_function.h:132,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/either/catkin_tws/src/A-LOAM/src/lidarFactor.hpp:4,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:57:
/usr/local/include/ceres/jet.h:416:1: note: template<class T, int N> bool ceres::operator<(const T&, const ceres::Jet<T, N>&)
 CERES_DEFINE_JET_COMPARISON_OPERATOR( <  )  // NOLINT
 ^
/usr/local/include/ceres/jet.h:416:1: note:   template argument deduction/substitution failed:
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:41:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note:   mismatched types ‘const ceres::Jet<T, N>’ and ‘int’
   if(d<0) scale1 = -scale1;
       ^
In file included from /usr/local/include/ceres/internal/autodiff.h:145:0,
                 from /usr/local/include/ceres/autodiff_cost_function.h:132,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/either/catkin_tws/src/A-LOAM/src/lidarFactor.hpp:4,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:57:
/usr/local/include/ceres/jet.h:416:1: note: template<class T, int N> bool ceres::operator<(const ceres::Jet<T, N>&, const ceres::Jet<T, N>&)
 CERES_DEFINE_JET_COMPARISON_OPERATOR( <  )  // NOLINT
 ^
/usr/local/include/ceres/jet.h:416:1: note:   template argument deduction/substitution failed:
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserOdometry.cpp:41:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note:   mismatched types ‘const ceres::Jet<T, N>’ and ‘int’
   if(d<0) scale1 = -scale1;
       ^
make[2]: *** [A-LOAM/CMakeFiles/alaserOdometry.dir/src/laserOdometry.cpp.o] 错误 1
make[1]: *** [A-LOAM/CMakeFiles/alaserOdometry.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /usr/include/pcl-1.7/pcl/conversions.h:50,
                 from /opt/ros/indigo/include/pcl_conversions/pcl_conversions.h:44,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:43:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h: In instantiation of ‘Eigen::Quaternion<typename Eigen::internal::traits<T>::Scalar> Eigen::QuaternionBase<Derived>::slerp(const Scalar&, const Eigen::QuaternionBase<OtherDerived>&) const [with OtherDerived = Eigen::Quaternion<ceres::Jet<double, 7>, 0>; Derived = Eigen::Quaternion<ceres::Jet<double, 7>, 0>; typename Eigen::internal::traits<T>::Scalar = ceres::Jet<double, 7>; Eigen::QuaternionBase<Derived>::Scalar = ceres::Jet<double, 7>]’:
/home/either/catkin_tws/src/A-LOAM/src/lidarFactor.hpp:81:15:   required from ‘bool LidarPlaneFactor::operator()(const T*, const T*, T*) const [with T = ceres::Jet<double, 7>]’
/usr/local/include/ceres/internal/variadic_evaluate.h:168:26:   required from ‘static bool ceres::internal::VariadicEvaluate<Functor, T, N0, N1, 0, 0, 0, 0, 0, 0, 0, 0>::Call(const Functor&, const T* const*, T*) [with Functor = LidarPlaneFactor; T = ceres::Jet<double, 7>; int N0 = 4; int N1 = 3]’
/usr/local/include/ceres/internal/autodiff.h:290:45:   required from ‘static bool ceres::internal::AutoDiff<Functor, T, N0, N1, N2, N3, N4, N5, N6, N7, N8, N9>::Differentiate(const Functor&, const T* const*, int, T*, T**) [with Functor = LidarPlaneFactor; T = double; int N0 = 4; int N1 = 3; int N2 = 0; int N3 = 0; int N4 = 0; int N5 = 0; int N6 = 0; int N7 = 0; int N8 = 0; int N9 = 0]’
/usr/local/include/ceres/autodiff_cost_function.h:218:25:   required from ‘bool ceres::AutoDiffCostFunction<CostFunctor, kNumResiduals, N0, N1, N2, N3, N4, N5, N6, N7, N8, N9>::Evaluate(const double* const*, double*, double**) const [with CostFunctor = LidarPlaneFactor; int kNumResiduals = 1; int N0 = 4; int N1 = 3; int N2 = 0; int N3 = 0; int N4 = 0; int N5 = 0; int N6 = 0; int N7 = 0; int N8 = 0; int N9 = 0]’
/home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:939:1:   required from here
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: error: no match for ‘operator<’ (operand types are ‘Eigen::QuaternionBase<Eigen::Quaternion<ceres::Jet<double, 7>, 0> >::Scalar {aka ceres::Jet<double, 7>}’ and ‘int’)
   if(d<0) scale1 = -scale1;
       ^
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note: candidates are:
In file included from /usr/local/include/ceres/internal/autodiff.h:145:0,
                 from /usr/local/include/ceres/autodiff_cost_function.h:132,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:54:
/usr/local/include/ceres/jet.h:416:1: note: template<class T, int N> bool ceres::operator<(const ceres::Jet<T, N>&, const T&)
 CERES_DEFINE_JET_COMPARISON_OPERATOR( <  )  // NOLINT
 ^
/usr/local/include/ceres/jet.h:416:1: note:   template argument deduction/substitution failed:
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /usr/include/pcl-1.7/pcl/conversions.h:50,
                 from /opt/ros/indigo/include/pcl_conversions/pcl_conversions.h:44,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:43:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note:   deduced conflicting types for parameter ‘const T’ (‘double’ and ‘int’)
   if(d<0) scale1 = -scale1;
       ^
In file included from /usr/local/include/ceres/internal/autodiff.h:145:0,
                 from /usr/local/include/ceres/autodiff_cost_function.h:132,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:54:
/usr/local/include/ceres/jet.h:416:1: note: template<class T, int N> bool ceres::operator<(const T&, const ceres::Jet<T, N>&)
 CERES_DEFINE_JET_COMPARISON_OPERATOR( <  )  // NOLINT
 ^
/usr/local/include/ceres/jet.h:416:1: note:   template argument deduction/substitution failed:
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /usr/include/pcl-1.7/pcl/conversions.h:50,
                 from /opt/ros/indigo/include/pcl_conversions/pcl_conversions.h:44,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:43:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note:   mismatched types ‘const ceres::Jet<T, N>’ and ‘int’
   if(d<0) scale1 = -scale1;
       ^
In file included from /usr/local/include/ceres/internal/autodiff.h:145:0,
                 from /usr/local/include/ceres/autodiff_cost_function.h:132,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:54:
/usr/local/include/ceres/jet.h:416:1: note: template<class T, int N> bool ceres::operator<(const ceres::Jet<T, N>&, const ceres::Jet<T, N>&)
 CERES_DEFINE_JET_COMPARISON_OPERATOR( <  )  // NOLINT
 ^
/usr/local/include/ceres/jet.h:416:1: note:   template argument deduction/substitution failed:
In file included from /usr/include/eigen3/Eigen/Geometry:40:0,
                 from /usr/include/pcl-1.7/pcl/point_cloud.h:47,
                 from /usr/include/pcl-1.7/pcl/conversions.h:50,
                 from /opt/ros/indigo/include/pcl_conversions/pcl_conversions.h:44,
                 from /home/either/catkin_tws/src/A-LOAM/src/laserMapping.cpp:43:
/usr/include/eigen3/Eigen/src/Geometry/Quaternion.h:712:7: note:   mismatched types ‘const ceres::Jet<T, N>’ and ‘int’
   if(d<0) scale1 = -scale1;
       ^
make[2]: *** [A-LOAM/CMakeFiles/alaserMapping.dir/src/laserMapping.cpp.o] 错误 1
make[1]: *** [A-LOAM/CMakeFiles/alaserMapping.dir/all] 错误 2
make: *** [all] 错误 2
Invoking "make -j4 -l4" failed
either@ubuntu:~/catkin_tws$ 

thank you!

How to use ouster 64 line lidar?

I want to run A-LOAM with ouster OS1 64 ,but I am confused with mapping_line_resolution and mapping_plane_resolution. How can I set these parameters?

How to save results

Does anyone know how to save the trajectory results in KITTI groundtruth format?

Segmentation fault

Sorry to bother you, but when I launch the ascanRegistration from aloam_velodyne_64.launch, I obtained this error and I saw
" #7 std::vector<pcl::PointXYZI, Eigen::aligned_allocatorpcl::PointXYZI >::~vector (this=0x7fffffffc758, __in_chrg=)
"
"#8 pcl::PointCloudpcl::PointXYZI::~PointCloud (this=0x7fffffffc720, __in_chrg=)" in gdb, maybe something is wrong with eigen, Can you help me ?

why not transform feature points to the scan end point

Hello, thank you for your great work!
I found that you disenabled the operation to transform corner features and plane features to the scan end point.
I enabled this operation and run the project again. However, I found nothing changed. Maybe I missed something.
Could you tell me why would you disenable this operation?

Vertical velodyne sensor setup for a drone simulation

Hi, I want to mount the Velodyne VLP 16 sensor vertically for my simulations as shown below. However, when I tried the A-LOAM package with that sensor setup, the state estimation and mapping were not accurate enough. I did not change any coordinate frames in this case. Does anyone know whether this is possible and whether anything needs to be changed in the code?
verticallidar

Meaning of LidarEdgeFactor

Hi, I'm confused about the residual computed by LidarEdgeFactor in lidarFactor.hpp:
Eigen::Matrix<T, 3, 1> nu = (lp - lpa).cross(lp - lpb);
Eigen::Matrix<T, 3, 1> de = lpa - lpb;
residual[0] = nu.x() / de.norm();
residual[1] = nu.y() / de.norm();
residual[2] = nu.z() / de.norm();
What's the meaning of this residual?
Since the residual of LidarPlaneFactor means the distance from the point to the plane, shouldn't the residual of LidarEdgeFactor mean the distance from the point to the line? How to explain that
the residual is 3-dimensional? Thank you~

Unstable Of Distortion In LaserOdometry

Thanks for the nice code from your guys,
after studying the detail of it there is one question here.

In LaserOdometry since Kitti provide undistortion pointcloud, distortion is turn off in the code.
But for our own data(VLP16), turning on distortion to true makes the result much poor, the path oscillate and sometimes diverge, we have notice that TransformToEnd shoud turn on too...
Pictures of turning on distortion(Upper) and turning off(Lower) for same data are shown below, any advice here?

2019-10-15 20-32-45 的螢幕擷圖

2019-10-15 20-36-00 的螢幕擷圖

Test on odometay (Velodyne HDL-64)

As is shown in step4, I want to use kitti_helper.launch to test it, but I cannot use it directly. it is said we need to debug, however, I have no idea how to debug.

Then I tried to save it into .bag, but when I use kitti2bag, there are 3 parameters to select,{raw_synced,odom_color,odom_gray}, in our case, I just want to use laser points , so which one should I choose?

By the way, there is also an image showing in the example, should we download clour or grey images?

Thank you for any advice!

process has died

AFD5A3DAD0E75E70735EF1052096635C

Has anyone ever encountered this problem? A-loam is running successfully on my desktop, however, it can't work on the jetson which has same environment. The error is shown in fig. The catkin_make is passed and can execute .launch file normally. Unfortunately, the process will die when we play .bag file.

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.