ROS1 ORB-SLAM2_RGBD_DENSE_MAP-master运行报段错误(核心已转储)

博主遇到C++程序运行时突然闪退并报段错误的问题,尝试了删除Thirdparty下DBOW2和g20中-march=native的方法无效。最终通过特定的修改解决了问题:只删除DBOW2下的-march=native,并将pointcloudmapping.h文件中的boolloopbusy改为boolloopbusy=false。经过多次尝试,程序运行成功。

运行没几秒突然画面闪退,报段错误。本人试过删除Thirdparty下的DBOW2和g20中的CMakeLists.txt文件中 -march=native 的方法,但是对我来说无效,还是报该错误。万能的优快云啊,有没有大佬知道这怎么修改?
在这里插入图片描述后续问题解决更新:
在通过大量尝试后,针对我的情况修改方法:
1)仅将Thirdparty下的DBOW2下的CMakeLists.txt文件中 -march=native删除。
2)将include下的pointcloudmapping.h文件中bool loopbusy修改为bool loopbusy=false
修改好后,他前几次运行还是突然报段错误,但是我多试几次,就好了,很奇怪,下图是运行成功的画面。
在这里插入图片描述

### ROSORB-SLAM2-Dense集成及使用教程 ROS(Robot Operating System)是一个灵活的框架,用于开发机器人软件[^1]。ORB-SLAM2-Dense 是一种基于 ORB 特征点的视觉同时定位与建图系统,并支持稠密重建功能。将 ORB-SLAM2-Dense 集成到 ROS 中可以实现更高效的机器人导航和环境感知。 #### 一、环境准备 确保安装了以下依赖项: - Ubuntu 系统(建议版本为 20.04) - ROS Noetic 或更高版本 - OpenCV 和 Eigen 库 - PCL(Point Cloud Library) 可以通过以下命令安装依赖项: ```bash sudo apt-get install ros-noetic-* sudo apt-get install libopencv-dev libeigen3-dev ``` #### 二、ORB-SLAM2-Dense 安装 下载并编译 ORB-SLAM2-Dense 源码。首先克隆仓库: ```bash git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 cd ORB_SLAM2 mkdir build cd build cmake .. make -j4 ``` 配置完成后,确保生成可执行文件 `mono_dense` 或其他相关模块[^2]。 #### 三、ROS 集成 创建一个 ROS 包以封装 ORB-SLAM2-Dense 的功能: ```bash catkin_create_pkg orbslam2_ros std_msgs rospy roscpp ``` 在 `CMakeLists.txt` 文件中添加以下内容以链接 ORB-SLAM2-Dense 库: ```cmake find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) link_directories(/path/to/ORB_SLAM2/lib) # 替换为实际路径 add_executable(orbslam2_node src/orbslam2_node.cpp) target_link_libraries(orbslam2_node ${OpenCV_LIBS} /path/to/ORB_SLAM2/lib/libORB_SLAM2.so) ``` 编写节点代码 `src/orbslam2_node.cpp` 实现 ROSORB-SLAM2-Dense 的交互。以下是一个简单的示例: ```cpp #include <ros/ros.h> #include <cv_bridge/cv_bridge.h> #include <sensor_msgs/Image.h> #include "System.h" using namespace ORB_SLAM2; class ORBSLAMNode { public: ORBSLAMNode() : SLAM(System("VOCABULARY_PATH", "SETTINGS_PATH", System::MONOCULAR, true)) {} void ImageCallback(const sensor_msgs::ImageConstPtr& msg) { cv_bridge::CvImagePtr cv_ptr; try { cv_ptr = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::MONO8); } catch (cv_bridge::Exception& e) { ROS_ERROR("cv_bridge exception: %s", e.what()); return; } SLAM.TrackMonocular(cv_ptr->image, msg->header.stamp.toSec()); } private: System SLAM; }; int main(int argc, char** argv) { ros::init(argc, argv, "orbslam2_node"); ros::NodeHandle nh; ORBSLAMNode node; ros::Subscriber sub = nh.subscribe("/camera/image_raw", 1, &ORBSLAMNode::ImageCallback, &node); ros::spin(); return 0; } ``` #### 四、运行测试 启动 ROS 节点并发布图像数据流: ```bash roslaunch orbslam2_ros launch_file.launch rosrun image_transport republish compressed in:=/camera/image_raw out:=/camera/image_mono ``` 确保相机驱动程序正常工作,并且图像消息能够被正确订阅。 #### 五、注意事项 - 如果需要稠密重建,请确保已启用相关选项,并调整参数文件中的设置[^3]。 - 在大规模环境中使用时,注意内存占用问题,可能需要优化 ORB-SLAM2-Dense 的配置。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值