ORB_SLAM2 ROS-RGBD实时模式段错误

我在用开源的ORB_SLAM2进行视觉SLAM搭建的时候遇到一个段错误的问题。我跑的是ROS下用RGBD相机进行实时运行,而不是用下载的或者现有的ROSBAG。

官方教程什么都很好懂,步骤也没错。但是跑起来之后遇到段错误。我用GDB已经确认了位置在

cv::getTextSize()

这个函数, 这个函数在整个工程中只出现一次,我忘了具体的文件名了,你可以很轻松的找到它。我装的是cv4.0。官方原来装的是3.0或者更旧的版本。但是我检查过该函数在3和4中的用法,并且CmakeList也做过相应修改,确认链接到的库是我装的4.0的.so。
请问有谁遇到过类似的问题,怎么解决。

按照以下步骤可以尝试解决一下:

  1. 将ORB_SLAM2重新编译一遍,确保所有依赖都已经正确安装;
  2. 使用GDB确认具体段错误的出现位置,以及错误出现的原因;
  3. 检查CmakeList文件是否正确,确保已经正确链接到cv4.0的库文件;
  4. 根据GDB调试的结果,进行代码调整;
  5. 重新编译并运行ORB_SLAM2,看看是否可以解决段错误问题。

如果上述步骤都做完了还是无法解决问题的话,可以尝试使用一些调试工具来进一步分析和解决问题。比如Valgrind之类的工具可以帮助你追踪和分析整个软件的运行情况,帮助你更快的定位和解决问题。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
段错误(Segmentation fault)通常是由访问无效内存区域引起的,可能是因为指针未初始化、指针越界、访问已经被释放的内存等原因导致。在你的情况下,可能是因为cv::getTextSize函数访问了无效内存导致的。

以下是一些可能有用的建议来解决这个问题:

  1. 确认代码是否正确。请确保你的代码正确,特别是与cv::getTextSize函数有关的部分。你可以尝试将函数注释掉,然后重新编译和运行代码,看看是否还会出现段错误。
  2. 检查ROS环境变量是否正确。请检查ROS环境变量是否正确设置,以及是否与你的代码和CMakeList文件一致。ROS的环境变量设置错误可能会导致程序崩溃或段错误。
  3. 检查依赖库是否正确。请确保你的代码使用的依赖库与你的代码和CMakeList文件一致,并且正确链接到你的代码中。特别是与cv::getTextSize函数有关的依赖库,如OpenCV。
  4. 尝试使用其他版本的OpenCV。虽然你已经尝试将代码升级到OpenCV 4.0,但是可能会有其他版本的OpenCV与你的代码兼容更好。你可以尝试使用其他版本的OpenCV来解决这个问题。
  5. 使用GDB调试代码。你已经使用了GDB来确认问题出现在cv::getTextSize函数中,但是你可以继续使用GDB来进一步调试你的代码,以查找问题的根本原因。使用GDB时,你可以查看堆栈跟踪、变量值等信息,以帮助你确定段错误的具体原因。

希望这些建议能够帮助你解决问题。

首先,你需要确认函数参数的正确性。查看cv::getTextSize()是否正确地被传入了参数,如第一个参数string text必须是字符串类型,fontFace 必须是适当的字体样式,以及fontScale其值应该合理等。其次,你可以尝试将opencv版本降低到3.0,再重新安装并运行ORB_SLAM2看看是否可以正常工作。最后,你也可以考虑把ORB_SLAM2的代码重新编译成动态库,用valgrind工具进行内存检测,以找出函数参数中可能存在的错误。

此外,你可以考虑尝试更改ORB_SLAM2的makefile文件,以修正函数参数中可能存在的错误。如果上述都不能解决问题,你可以提交你遇到的问题到ORB_SLAM2的Github Issues页面,并尽量详细描述你的问题。

参考GPT和自己的思路,段错误通常是由于访问非法内存引起的。在你的情况下,问题似乎与cv::getTextSize()函数有关。

以下是一些可能的解决方案:

检查输入参数是否正确:cv::getTextSize()需要提供字符串、字体、字体比例和线宽等参数,如果这些参数不正确,会导致段错误。确保你传递的参数都是正确的。

检查OpenCV库的版本:在使用OpenCV库时,确保你使用的是与ORB_SLAM2相兼容的版本。如果你安装的是OpenCV 4.0,但ORB_SLAM2需要的是OpenCV 3.0或更早版本,则可能会导致段错误。你可以尝试将OpenCV降级到3.0版本,然后重新编译ORB_SLAM2。

检查代码逻辑:除了cv::getTextSize()函数外,还有可能是其他代码逻辑导致了段错误。你可以使用gdb或其他调试工具来找到段错误发生的位置,并进行逐步调试。

检查硬件资源:在运行ORB_SLAM2时,确保你的计算机硬件资源足够。如果你的计算机内存或CPU不足,也可能会导致段错误。

希望这些解决方案对你有所帮助!

这种段错误应该是内存访问错误引起的,可能与库的版本不兼容有关。确认一下OpenCV的版本与ORB_SLAM2的版本是否兼容。建议使用ORB_SLAM2官方推荐的OpenCV版本,并且确保OpenCV库和ORB_SLAM2库都已经正确编译和安装。