cjw_wecaht 2024-10-16 22:45 采纳率: 0%
浏览 100

运行VINS_fusion时出现段错误(核心转储)

我在按照下面的顺序进行复现代码的时候
1 roscore
2 roslaunch vins vins_rviz.launch
3 rosrun vins vins_node /home/cjw/ws1/src/D_VINS-main/config/euroc/euroc_mono_imu_config.yaml 4 rosrun loop_fusion loop_fusion_node /home/cjw/ws1/src/D_VINS-main/config/euroc/euroc_mono_imu_config.yaml
5 rosbag play ~/SLAM/MH_04_difficult.bag

在输入回车rosbag后,第四个窗口正常运行,但等待一段时间将导致以下错误:

(base) cjw@c:~/ws1$ rosrun loop_fusion loop_fusion_node /home/cjw/ws1/src/D_VINS-main/config/euroc/euroc_mono_imu_config.yaml 
config_file: /home/cjw/ws1/src/D_VINS-main/config/euroc/euroc_mono_imu_config.yaml
vocabulary_file/home/cjw/ws1/src/D_VINS-main/loop_fusion/../support_files/brief_k10L6.bin
loop start load vocabulary
BRIEF_PATTERN_FILE/home/cjw/ws1/src/D_VINS-main/loop_fusion/../support_files/brief_pattern.yml
cam calib path: /home/cjw/ws1/src/D_VINS-main/config/euroc/cam0_mei.yaml
VIO input, perfrom 4 DoF (x, y, z, yaw) pose graph optimization
no previous pose graph
Stack trace (most recent call last) in thread 113307:
#6    Object "[0xffffffffffffffff]", at 0xffffffffffffffff, in 
#5    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f19c79f9352, in clone
#4    Object "/lib/x86_64-linux-gnu/libpthread.so.0", at 0x7f19cd07c608, in 
#3    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7f19c7d0edf3, in 
#2    Object "/home/cjw/ws1/devel/lib/loop_fusion/loop_fusion_node", at 0x55625289f97f, in process()
#1    Object "/home/cjw/ws1/devel/lib/loop_fusion/loop_fusion_node", at 0x5562528deade, in KeyFrame::KeyFrame(double, int, Eigen::Matrix<double, 3, 1, 0, 3, 1>&, Eigen::Matrix<double, 3, 3, 0, 3, 3>&, cv::Mat&, std::vector<cv::Point3_<float>, std::allocator<cv::Point3_<float> > >&, std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >&, std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >&, std::vector<double, std::allocator<double> >&, int)
#0    Object "/home/cjw/ws1/devel/lib/loop_fusion/loop_fusion_node", at 0x5562528dc63a, in KeyFrame::computeWindowSuperpoint()
Segmentation fault (Address not mapped to object [0x70])
段错误 (核心已转储)

希望各位进行指导一二,万分感谢!!

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-16 22:47
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从给出的错误信息来看,你的程序在运行时遇到了段错误(Segmentation fault),这通常是由于访问了非法内存地址导致的。在这种情况下,问题可能出现在loop_fusion_node的某个部分,特别是与KeyFrame::computeWindowSuperpoint()函数相关的部分。

    为了解决这个问题,你可以尝试以下几个步骤:

    1. 检查配置文件和路径:确保所有配置文件和路径都是正确的,并且所有必要的文件都在正确的位置。错误信息中提到了几个文件路径,如euroc_mono_imu_config.yamlbrief_k10L6.bin等,需要确认这些文件是否存在并可被程序正确访问。
    2. 调试代码:如果配置没有问题,你可能需要进一步调试你的代码来找到问题所在。可以使用GDB等调试工具来逐步执行代码,查看在哪一步出现了问题。特别是关注与图像处理和特征匹配相关的部分,因为这些部分容易出现内存访问错误。
    3. 检查内存分配:确保程序中所有的内存分配都是正确的。如果你在代码中手动分配了内存(例如使用newmalloc),请确保在使用完这些内存后正确释放(使用deletefree)。另外,也要避免访问已经释放的内存或越界访问等问题。
    4. 检查依赖库和版本:确保你使用的所有依赖库都是正确的版本,并且与你的代码兼容。有时候,不同版本的库之间可能存在不兼容的问题,导致程序出现错误。
    5. 参考官方文档和社区支持:如果上述步骤无法解决问题,你可以参考VINS-Fusion的官方文档或社区支持。可能有人遇到过类似的问题并提供了解决方案。

    最后,建议你备份你的代码和数据,以防在调试过程中发生意外情况导致数据丢失。

    希望这些建议能帮助你解决问题!如果还有其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月16日