Stan994265 / mVIL-Fusion

Monocular Visual-Inertial-LiDAR Simultaneous Localization and Mapping in Challenging Environments
91 stars 2 forks source link

UBUNTU 20.04 编译错误 #3

Closed thisparticle closed 1 year ago

thisparticle commented 1 year ago

你好,我尝试在Ubuntu20.04 下面编译你的代码,最后会报下面的错误 No rule to make target '......./src/mVIL-Fusion/vils_estimator/src/lidar_functions/fast_gicp/build/libfast_gicp.a', needed by '......../mVIL-Fusion_ws/devel/lib/vils_estimator/vils_estimator'. Stop. make[1]: [CMakeFiles/Makefile2:2927: mVIL-Fusion/vils_estimator/CMakeFiles/vils_estimator.dir/all] Error 2

想请教一下这个问题怎么解决呀?

Stan994265 commented 1 year ago

你好,我尝试在Ubuntu20.04 下面编译你的代码,最后会报下面的错误 No rule to make target '......./src/mVIL-Fusion/vils_estimator/src/lidar_functions/fast_gicp/build/libfast_gicp.a', needed by '......../mVIL-Fusion_ws/devel/lib/vils_estimator/vils_estimator'. Stop. make[1]: [CMakeFiles/Makefile2:2927: mVIL-Fusion/vils_estimator/CMakeFiles/vils_estimator.dir/all] Error 2

想请教一下这个问题怎么解决呀?

目前还没在20.04下测试过,我用的是16.0.4。可以尝试,在20.04系统下,重新编译fast-gicp库(lidar_functions/下的.zip),重新生成新的libfast_gicp.a文件,放到对应文件夹下。

thisparticle commented 1 year ago

你好,感谢你的帮助哈哈哈,现在编译通过了,我在跑你提供的数据集时发现,因子图的轨迹和vio的轨迹会有些差别,这是因为vio不准吗?还是我编译以后跑得不正常~ Screenshot from 2022-12-15 11-12-40

Stan994265 commented 1 year ago

你好,感谢你的帮助哈哈哈,现在编译通过了,我在跑你提供的数据集时发现,因子图的轨迹和vio的轨迹会有些差别,这是因为vio不准吗?还是我编译以后跑得不正常~ Screenshot from 2022-12-15 11-12-40

是的,单目VIO在大尺度室外场景,一段时间的运行后会有较大累积误差。因此算法设计时主要将其作为预测,不考虑其全局一致性。最终的结果应注释掉前中端的可视化选项,后端的可视化内容是全局一致的。

thisparticle commented 1 year ago

你好,感谢你的帮助哈哈哈,现在编译通过了,我在跑你提供的数据集时发现,因子图的轨迹和vio的轨迹会有些差别,这是因为vio不准吗?还是我编译以后跑得不正常~ Screenshot from 2022-12-15 11-12-40

是的,单目VIO在大尺度室外场景,一段时间的运行后会有较大累积误差。因此算法设计时主要将其作为预测,不考虑其全局一致性。最终的结果应注释掉前中端的可视化选项,后端的可视化内容是全局一致的。

谢谢您的解答哈哈哈,我还有两个小问题想要麻烦您,一个是get_depth中为什么要乘上这个转换呀,配置文件中不是已经写了雷达和相机的转换了吗 Matrix4f Tlc_;//this is a fake tem coordinate Tlc_ << 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0,0.0, 0.0, -1.0, 0.0,0.0, 0.0, 0.0, 0.0, 1.0; 还有就是我试着跑NTU-VIRAL数据集,但是跑了发现点云和图像没有配置对,您能提供一下您跑这个数据集的配置文件和launch文件吗?

Stan994265 commented 1 year ago

你好,感谢你的帮助哈哈哈,现在编译通过了,我在跑你提供的数据集时发现,因子图的轨迹和vio的轨迹会有些差别,这是因为vio不准吗?还是我编译以后跑得不正常~ Screenshot from 2022-12-15 11-12-40

是的,单目VIO在大尺度室外场景,一段时间的运行后会有较大累积误差。因此算法设计时主要将其作为预测,不考虑其全局一致性。最终的结果应注释掉前中端的可视化选项,后端的可视化内容是全局一致的。

谢谢您的解答哈哈哈,我还有两个小问题想要麻烦您,一个是get_depth中为什么要乘上这个转换呀,配置文件中不是已经写了雷达和相机的转换了吗 Matrix4f Tlc_;//this is a fake tem coordinate Tlc_ << 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0,0.0, 0.0, -1.0, 0.0,0.0, 0.0, 0.0, 0.0, 1.0; 还有就是我试着跑NTU-VIRAL数据集,但是跑了发现点云和图像没有配置对,您能提供一下您跑这个数据集的配置文件和launch文件吗?

不客气哈。 第一个问题,那个就是方便处理的一个临时的固定变换,yaml文件里就给正常的相机到雷达系变换阵就行。 第二个问题,建议用odom算法运行(注释掉localMapping.cpp中的#define FOR_GLOBAL),执行roslaunch vils_estimator mynteye_leishen_odom.launch (修改雷达launch文件中的lidar_topic为:/os1_cloud_node1/points),并添加以下内容到自定义yaml文件:

%YAML:1.0 imu_topic: "/imu/imu" image_topic: "/right/image_raw" lidar_topic: "/full_cloud"

use_mynteye_adapter: 1 model_type: PINHOLE camera_name: camera image_width: 752 image_height: 480 distortion_parameters: k1: -0.300267420221178 k2: 0.090544063693053 p1: 3.330220891093334e-05 p2: 8.989607188457415e-05 projection_parameters: fx: 4.313364265799752e+02 fy: 4.327527965378035e+02 cx: 3.548956286992647e+02 cy: 2.325508916495161e+02

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

extrinsicRotation: !!opencv-matrix rows: 3 cols: 3 dt: d data: [-0.01916508, -0.01496218, 0.99970437, 0.99974371, 0.01176483, 0.01934191, -0.01205075, 0.99981884, 0.01473287]

extrinsicTranslation: !!opencv-matrix rows: 3 cols: 1 dt: d data: [ 0.00519443, 0.1347802, 0.01465067 ]

gt_rli: !!opencv-matrix rows: 3 cols: 3 dt: d data: [ 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] gt_tli: !!opencv-matrix rows: 3 cols: 1 dt: d data: [ -0.05, 0.0, 0.055 ]

gt_rlc: !!opencv-matrix rows: 3 cols: 3 dt: d data: [ 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0] gt_tlc: !!opencv-matrix rows: 3 cols: 1 dt: d data: [ -0.025, 0.115, 0.015 ]

feature traker paprameters

max_cnt: 150 # 150 max feature number in feature tracking min_dist: 30 # 30 min distance between two features freq: 10 #indoor:15 outdoor: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: 1.0 # ransac threshold (pixel) show_track: 1 # 1:publish tracking image as topic 0:publish lidar tracked image(green) equalize: 1 # if image is too dark or light, trun on equalize to find enough features fisheye: 0 # if using fisheye, trun on it. A circle mask will be loaded to remove edge noisy points

optimization parameters

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

acc_n: 0.2 # accelerometer measurement noise standard deviation. gyr_n: 0.1 # gyroscope measurement noise standard deviation.
acc_w: 5.0e-5 # accelerometer bias random work noise standard deviation.
gyr_w: 5.0e-6 # gyroscope bias random work noise standard deviation.

initialization parameters

PBC_UX: 0.1 PBC_LX: 0.0 PBC_UY: 0.15 PBC_LY: 0.5 PBC_UZ: 0.1 PBC_LZ: 0.0 PLB_UX: 0.15 PLB_LX: 0.08 PLB_UY: 0.03 PLB_LY: -0.03 PLB_UZ: -0.10 PLB_LZ: -0.17 g_norm: 9.81 # gravity magnitude 9.7944 g_direction: !!opencv-matrix rows: 3 cols: 1 dt: d data: [0.0,0.0,0.0] ANGLE_VI: 30

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)

rolling shutter parameters

rolling_shutter: 0 # 0: global shutter camera, 1: rolling shutter camera rolling_shutter_tr: 0 # unit: s. rolling shutter read out time per frame (from data sheet).

visualization parameters

save_image: 0 # save image in pose graph for visualization prupose; you can close this function by setting 0 visualize_imu_forward: 0 # output imu forward propogation to achieve low latency and high frequence results visualize_camera_size: 0.5 # size of camera marker in RVIZ

lidar compensator parameters

LidarTimeStep: 0.1 MinDistance: 0.5 MaxDistance: 70.0

fast-gicp

LeafSize: 0.3 NumThreads: 5 TransformationEpsilon: 0.0005 MaxCorrespondenceDistance: 0.8

lidar constraint

show_lidar_constraint: 0 #white(lidar icp fail) green(VIO good) red(VIO drift) blue(zero velocity) purple(pure rotation) show_lidar2cam: 1 #show unit sphere pointcloud and tem_lidar_map project to camera image

add_lidar2cam: 1 add_lidar2lidar: 1 add_lps: 1

另外,VIRAL数据集实际上不太适用这个仓库版本中的mVIL-Fusion初始化算法(运动激励不够),所以有可能初始化会失败几次。

thisparticle commented 1 year ago

哈哈哈谢谢您!我尝试了一下,效果很好,但是确实有些序列会一直初始化失败,或者是中途飘了,请问你后续会更新公开的版本吗哈哈哈

Stan994265 commented 1 year ago

哈哈哈谢谢您!我尝试了一下,效果很好,但是确实有些序列会一直初始化失败,或者是中途飘了,请问你后续会更新公开的版本吗哈哈哈

不客气哈,肯定会的,不过要过一阵了。后面想着针对像自动驾驶等应用时,激励不够场景的初始化改进,还有里程计加些新内容后再说。

af-doom commented 1 year ago

你好,我尝试在Ubuntu20.04 下面编译你的代码,最后会报下面的错误 No rule to make target '......./src/mVIL-Fusion/vils_estimator/src/lidar_functions/fast_gicp/build/libfast_gicp.a', needed by '......../mVIL-Fusion_ws/devel/lib/vils_estimator/vils_estimator'. Stop. make[1]: [CMakeFiles/Makefile2:2927: mVIL-Fusion/vils_estimator/CMakeFiles/vils_estimator.dir/all] Error 2

想请教一下这个问题怎么解决呀?

您好,我在20.04下编译也遇到了问题,可以咨询一下各个库的版本吗

Stan994265 commented 1 year ago

你好,我尝试在Ubuntu20.04 下面编译你的代码,最后会报下面的错误 No rule to make target '......./src/mVIL-Fusion/vils_estimator/src/lidar_functions/fast_gicp/build/libfast_gicp.a', needed by '......../mVIL-Fusion_ws/devel/lib/vils_estimator/vils_estimator'. Stop. make[1]: [CMakeFiles/Makefile2:2927: mVIL-Fusion/vils_estimator/CMakeFiles/vils_estimator.dir/all] Error 2 想请教一下这个问题怎么解决呀?

您好,我在20.04下编译也遇到了问题,可以咨询一下各个库的版本吗

libfast_gicp.a这个是单独build生成的,只需要CMAKE连接上就行,所以不同环境需要重新编译(或者直接在cmakelist里find然后自动编译链接)。整个代码就在16.04和18.04上测试过。GTSAM是4.0.2,其他库基本和VINS-mono的一致。

af-doom commented 1 year ago

你好,我尝试在Ubuntu20.04 下面编译你的代码,最后会报下面的错误 No rule to make target '......./src/mVIL-Fusion/vils_estimator/src/lidar_functions/fast_gicp/build/libfast_gicp.a', needed by '......../mVIL-Fusion_ws/devel/lib/vils_estimator/vils_estimator'. Stop. make[1]: [CMakeFiles/Makefile2:2927: mVIL-Fusion/vils_estimator/CMakeFiles/vils_estimator.dir/all] Error 2 想请教一下这个问题怎么解决呀?

您好,我在20.04下编译也遇到了问题,可以咨询一下各个库的版本吗

libfast_gicp.a这个是单独build生成的,只需要CMAKE连接上就行,所以不同环境需要重新编译(或者直接在cmakelist里find然后自动编译链接)。整个代码就在16.04和18.04上测试过。GTSAM是4.0.2,其他库基本和VINS-mono的一致。

谢谢您的回复,这个具体怎么操作

af-doom commented 1 year ago

libfast_gicp.a

我编译以后并没有产生这个文件libfast_gicp.a

Stan994265 commented 1 year ago

libfast_gicp.a

我编译以后并没有产生这个文件libfast_gicp.a

.so也行

af-doom commented 1 year ago

libfast_gicp.a

我编译以后并没有产生这个文件libfast_gicp.a

.so也行

还有好多eigen错误 fast_gicp/gicp/fast_vgicp_voxel.hpp:31:7: error: no matching function for call to ‘std::vector<Eigen::Matrix<int, 3, 1>, Eigen::aligned_allocator<Eigen::Matrix<int, 3, 1> > >::vector()’ 31 | }; | ^ In file included from /usr/local/include/gtsam/3rdparty/Eigen/Eigen/StdVector:23, from /usr/include/pcl-1.10/pcl/point_cloud.h:45, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/global_mapping/util.h:16, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/src/globalMappingOcTree.cpp:1: /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate: ‘std::vector<T, Eigen::aligned_allocator >::vector(std::vector<T, Eigen::aligned_allocator >::iterator, std::vector<T, Eigen::aligned_allocator >::iterator) [with T = Eigen::Matrix<int, 3, 1>; std::vector<T, Eigen::aligned_allocator >::iterator = __gnu_cxx::__normal_iterator<Eigen::Matrix<int, 3, 1>*, std::vector<Eigen::Matrix<int, 3, 1>, Eigen::aligned_allocator_indirection<Eigen::Matrix<int, 3, 1> > > >]’ 75 | EIGEN_STD_VECTOR_SPECIALIZATION_BODY | ^~~~~~~~ /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate expects 2 arguments, 7 provided /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate: ‘std::vector<T, Eigen::aligned_allocator >::vector(std::vector<T, Eigen::aligned_allocator >::size_type, const value_type&) [with T = Eigen::Matrix<int, 3, 1>; std::vector<T, Eigen::aligned_allocator >::size_type = long unsigned int; std::vector<T, Eigen::aligned_allocator >::value_type = Eigen::Matrix<int, 3, 1>]’ 75 | EIGEN_STD_VECTOR_SPECIALIZATION_BODY | ^~~~~~~~ /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate expects 2 arguments, 7 provided /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate: ‘std::vector<T, Eigen::aligned_allocator >::vector(const std::vector<T, Eigen::aligned_allocator >&) [with T = Eigen::Matrix<int, 3, 1>]’ 75 | EIGEN_STD_VECTOR_SPECIALIZATION_BODY | ^~~~~~~~ /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate expects 1 argument, 7 provided /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate: ‘template std::vector<T, Eigen::aligned_allocator >::vector(InputIterator, InputIterator, const allocator_type&)’ 75 | EIGEN_STD_VECTOR_SPECIALIZATION_BODY | ^~~~~~~~ /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: template argument deduction/substitution failed: In file included from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/fast_vgicp.hpp:16, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/src/globalMappingOcTree.cpp:17: /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:31:7: note: candidate expects 3 arguments, 7 provided 31 | }; | ^ In file included from /usr/local/include/gtsam/3rdparty/Eigen/Eigen/StdVector:23, from /usr/include/pcl-1.10/pcl/point_cloud.h:45, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/global_mapping/util.h:16, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/src/globalMappingOcTree.cpp:1: /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate: ‘std::vector<T, Eigen::aligned_allocator >::vector(const allocator_type&) [with T = Eigen::Matrix<int, 3, 1>; std::vector<T, Eigen::aligned_allocator >::allocator_type = Eigen::aligned_allocator_indirection<Eigen::Matrix<int, 3, 1> >]’ 75 | EIGEN_STD_VECTOR_SPECIALIZATION_BODY | ^~~~~~~~ /usr/local/include/gtsam/3rdparty/Eigen/Eigen/src/StlSupport/StdVector.h:75:3: note: candidate expects 1 argument, 7 provided In file included from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/fast_vgicp.hpp:16, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/src/globalMappingIkdTree.cpp:16: /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp: In member function ‘Eigen::Vector3i fast_gicp::GaussianVoxelMap::voxel_coord(const Vector4d&) const’: /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:50: error: ‘const class Eigen::CwiseUnaryOp<Eigen::internal::scalar_add_op, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op, const Eigen::ArrayWrapper<const Eigen::Matrix<double, 4, 1> > > >’ has no member named ‘floor’ 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^~~~~ /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:72: error: expected primary-expression before ‘int’ 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^~~ /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:72: error: expected ‘;’ before ‘int’ 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^~~ | ; /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:75: error: expected unqualified-id before ‘>’ token 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^ In file included from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/fast_vgicp.hpp:16, from /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/src/globalMappingOcTree.cpp:17: /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp: In member function ‘Eigen::Vector3i fast_gicp::GaussianVoxelMap::voxel_coord(const Vector4d&) const’: /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:50: error: ‘const class Eigen::CwiseUnaryOp<Eigen::internal::scalar_add_op, const Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op, const Eigen::ArrayWrapper<const Eigen::Matrix<double, 4, 1> > > >’ has no member named ‘floor’ 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^~~~~ /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:72: error: expected primary-expression before ‘int’ 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^~~ /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:72: error: expected ‘;’ before ‘int’ 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^~~ | ; /home/wyw/ROS1_PROJECT/2023/VIL_ROS_calib/src/mVIL-Fusion/lidar_mapping/include/fast_gicp/gicp/fast_vgicp_voxel.hpp:161:75: error: expected unqualified-id before ‘>’ token 161 | return (x.array() / voxelresolution - 0.5).floor().template cast().template head<3>(); | ^

af-doom commented 1 year ago

libfast_gicp.a

我编译以后并没有产生这个文件libfast_gicp.a

.so也行

我编译生成了libfast_gicp.so,我应该放到哪里,或者怎么设置路径

Stan994265 commented 1 year ago

libfast_gicp.a

我编译以后并没有产生这个文件libfast_gicp.a

.so也行

我编译生成了libfast_gicp.so,我应该放到哪里,或者怎么设置路径 修改lidar_mapping和vils_estimator下的CMakeLists,将.a改成.so,再将生成的.so放到对应路径下即可。