SLAM实战项目(2) — ROS下运行ORB-SLAM2稠密地图重建

news2024/12/24 10:24:08

目录

1 运行步骤

(1) 创建工作空间

(2) 修改CmakeList.txt

(3) 编译

(4) 下载bag文件

(4) 编写roslaunch文件

2 运行报错

报错1:

报错2:

报错3:

报错4:


ROS学习文档:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

1 运行步骤

(1) 创建工作空间

mkdir -p /orbslam2_ws/src
cd /orbslam2_ws/src
cd ..
catkin_make
source ./devel/setup.bash
cd /orbslam2_ws/src
//将稠密建图的代码复制到/src目录下
cd ..
catkin_make
source ./devel/setup.bash

(2) 修改CmakeList.txt

修改在/Examples/ROS/ORB-SLAM2下的CmakeList.txt
 

find_package(PCL 1.10 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
set(LIBS ${PCL_LIBRARIES})

(3) 编译

到你的ORB-SLAM2文件夹下打开终端

chmod +x ./build_ros.sh
./build_ros.sh

(4) 下载bag文件

下载地址:Computer Vision Group - Dataset Download

(4) 编写roslaunch文件

在./orbslam2_ws/src/ORB_SLAM2想创建launch文件夹,创建orbslam.launch文件

<launch>
    <!--添加被执行的节点-->
    <node name = "ORB_SLAM2" pkg="ORB_SLAM2" type="RGBD" args="/home/qinlong/studydata/orbslam2_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/qinlong/studydata/orbslam2_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml" output="screen"/>
    <!--添加rosbag play-->
    <node pkg="rosbag" type="play" name="bag_play" args="/home/qinlong/bagfiles/rgbd_dataset_freiburg3_long_office_household.bag "/> 
</launch>

(5) 运行

在./orbslam2_ws下source ./devel/setup.bash,然后运行roslaunch ORB_SLAM2 orbslam2.launch可以得到相同的效果。

2 运行报错

报错1:

/usr/bin/ld: warning: libboost_filesystem.so.1.71.0, needed by /opt/ros/noetic/lib/libroscpp.so, may conflict with libboost_filesystem.so.1.80.0
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.3.4
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4
/usr/bin/ld: ../../../../lib/libORB_SLAM2.so: undefined reference to `g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(g2o::Solver*)'
/usr/bin/ld: warning: libboost_filesystem.so.1.71.0, needed by /opt/ros/noetic/lib/libroscpp.so, may conflict with libboost_filesystem.so.1.80.0
/usr/bin/ld: warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, maycollect2: error: ld returned 1 exit status
 conflict with libopencv_imgcodecs.so.3.4
/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4
/usr/bin/ld: ../../../../lib/libORB_SLAM2.so: undefined reference to `g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(g2o::Solver*)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/RGBD.dir/build.make:254:../RGBD] 错误 1
make[2]: *** [CMakeFiles/Mono.dir/build.make:254:../Mono] 错误 1
make[1]: *** [CMakeFiles/Makefile2:157:CMakeFiles/RGBD.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
make[1]: *** [CMakeFiles/Makefile2:184:CMakeFiles/Mono.dir/all] 错误 2
make: *** [Makefile:130:all] 错误 2

解决办法:这可能是由于在编译 libORB_SLAM2.so 时没有正确链接 g2o 库或者 g2o 库的版本不兼容导致的。使当前项目重新链接到g2o,可以更改CMakeists.txt文件里的内容,增加如下代码

target_link_libraries(project_name g2o -Wl,-rpath=${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o
)

报错2:

/usr/bin/ld: warning: libopencv_core.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4

(十一)ORBSLAM2在ROS下运行_小C酱油兵的博客-CSDN博客

解决办法:报错原因是ROS和自己安装的opencv版本不一致,没有报错的情况下可以忽略警告,报错时根据提示注释掉VR相关代码。

报错3:

在rosrun和rosbag后,bag的信息传不进去

rosrun ORB_SLAM3 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml
rosbag play rgbd_dataset_freiburg3_long_office_household.bag

解决办法:

查看话题:rostopic list

/cam0/image_raw
/cam1/image_raw
/camera/depth/camera_info
/camera/depth/image
/camera/depth_registered/image_raw
/camera/left/image_raw
/camera/rgb/camera_info
/camera/rgb/image_color
/camera/rgb/image_raw
/camera/right/image_raw
/clock
/cortex_marker_array
/imu0
/leica/position
/rosout
/rosout_agg
/tf

查看ros_rgbd.cc下的话题名称

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_raw", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "camera/depth_registered/image_raw", 1);

将ros_rgbd.cc下的话题名称修改

message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_color", 1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/depth/image", 1);

报错4:

经过上一步后发现能传入数据,但是生成的点云异常,

解决办法1: ROS中使用OpenCV读取深度图时,深度图中的0值会被解析为无效(NaN)值,从而未能成功获取深度信息的像素点,可以将深度值赋值为0,在PointCloudMapping::GeneratePointCloud修改如下代码:

void PointCloudMapping::GeneratePointCloud(KeyFrame* kf, cv::Mat &color_img, cv::Mat &depth_img)
    {
        PointCloud::Ptr tmp (new PointCloud());
        for ( int m=0; m<depth_img.rows; m+=3 )
        {
            for ( int n=0; n<depth_img.cols; n+=3 )
            {
                float d = depth_img.ptr<float>(m)[n];

                //修改部分
                if(std::isnan(d))
                {
                    d = 0.0;
                }
                ...
            }
        }
    }

解决办法2:如果进行了滤波处理,可以修改double resolution = 0.00000001,修改后颜色显示正常,但存在明显的漂移,但效果较以前好很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Bert模型精讲

1.Autoregressive语言模型与Autoencoder语言模型 1.1 语言模型概念介绍 Autoregressice语言模型&#xff1a;指的是依据前面(或后面)出现的单词来预测当前时刻的单词&#xff0c;代表有ElMo, GPT等。 Autoencoder语言模型&#xff1a;通过上下文信息来预测被mask的单词&…

Linux GCC,GDB,Shell脚本,Vim的简单使用

这里写目录标题 GCC命令GDB命令Shell脚本VIM指令 GCC命令 GCC&#xff08;GNU Compiler Collection&#xff0c;GNU编译器套件&#xff09;是由GNU开发的编程语言译器 编译一个简单的.c程序&#xff1a; 四步分开写&#xff1a; gcc -E -o hello.i hello.c // 预处理 gcc -…

chatgpt赋能python:Python怎么绕过登录爬取数据

Python怎么绕过登录爬取数据 在进行网站爬取时&#xff0c;经常会发现需要登录才能访问所需要的数据&#xff0c;这给我们的爬虫程序带来了一定的难度。本文就介绍一些Python绕过登录的方法&#xff0c;让你获取到所需的数据。 1. Session维持登录状态 当我们登录一个网站时…

运维实践 | 运维打工人必备 CentOS-Linux/Stream-8 服务器系统基础安装与配置实践...

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

【LeetCode】python 主要元素 摩根投票法

目录 题目&#xff1a; 题解&#xff1a; 1.纯暴力&#xff08;字典&#xff09; 2. 摩根投票法 题目&#xff1a; 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组&#xff0c;找出其中的主要元素。若没有&#xff0c;返回 -1 。请设计时间复杂度为 O(N) 、空…

电脑中的个人私密视频该怎么加密?

因为电脑内存空间较大&#xff0c;所以很多人喜欢将拍摄的视频存放在电脑中&#xff0c;这其中就会有一些比较私密&#xff0c;不适合被其他人看到的视频。为了保护这些视频的安全&#xff0c;我们需要合适的方法对其进行加密保护。下面我们就一起来了解一下电脑中的个人私密视…

GAMES101笔记 Lecture 01

目录 Overview of Computer Graphics图形学的应用场景Video GamesMoviesAnimationsDesignVisualizationVirtual RealityDigital IllustrationSimulationGraphical User InterfacesTypography 为什么要学习计算机图形学&#xff1f;Fundamental Intellectual Challenges(图形学很…

Opencv-C++笔记 (5) : opencv-形态学

文章目录 1、形态学运算与结构2、腐蚀膨胀运算3、膨胀4、自定义结构元素5、开闭运算开运算闭运算 6、形态学梯度7、其他形态学-顶帽、黑帽、击中不击中8、核函数矩形核十字形核椭圆核 1、形态学运算与结构 形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集…

Prefix-Tuning: Optimizing Continuous Prompts for Generation

《Prefix-Tuning: Optimizing Continuous Prompts for Generation》阅读笔记 论文题目&#xff1a;Prefix-Tuning: Optimizing Continuous Prompts for Generation论文链接&#xff1a;https://arxiv.org/pdf/2101.00190论文来源&#xff1a;Arxiv &#xff08;2021&#xff0…

CentOS 7安装 Postgre

零、前置条件 系统CentOS 7&#xff0c;并已联网&#xff0c;已安装gcc或者g编译器&#xff0c;GNU make版本3.80或以上&#xff0c;系统有至少一个除root之外的普通用户user gcc安装-参考链接查看make命令的版本——make --version更新make版本-参考链接postgresql的使用一般…

【nginx】网页上传文件报错413 Request Entity Too Lange

前言 413 Request Entity Too Lange&#xff0c;由于您的请求实体太长&#xff0c;服务器无法处理。请尝试缩短请求体的内容或者采取其他方式进行操作。如果问题仍然存在&#xff0c;请检查您的请求是否符合服务器的限制和要求&#xff0c;并尝试联系服务器管理员寻求帮助 可以…

轻松掌握 Postman Newman API 测试技巧

目录 前言&#xff1a; Postman Newman 是什么&#xff1f; Postman Newman 的作用 如何使用 Postman Newman&#xff1f; 第一步&#xff1a;安装 Node.js 第二步&#xff1a;全局安装 Newman 第三步&#xff1a;导出集合或环境变量为 JSON 格式 第四步&#xff1a;使…

Python-Selenium-定位详解

目录 前言&#xff1a; 一、id定位 二、name定位 三、class_name定位 四、xpath定位 五、css_selector定位 六、tag_name定位 七、link_text 定位 八、Xpath&Css定位方法速查表 九、By定位 十、elements复数定位 十一、JS的定位 前言&#xff1a; Python是一种…

Jetpack Compose中的LaunchedEffect与rememberCoroutineScope

Jetpack Compose中的LaunchedEffect与rememberCoroutineScope 深入了解Compose副作用API LaunchedEffect和rememberCoroutineScope。 探索使用LaunchedEffect和rememberCoroutineScope的区别和使用场景。 什么是副作用&#xff1f; 副作用是指在可组合函数范围之外发生的任何…

2024考研408-计算机组成原理第三章-存储系统

文章目录 前言一、存储器概述1.1、层次结构1.2、存储器分类1.2.1、层次分类1.2.2、存储介质分类1.2.3、存取方式1.2.4、按照信息的可更改性&#xff08;读写、只读区别&#xff09; 1.3、存储器性能指标知识回顾 二、主存储器2.1、主存储器的基本组成&#xff08;介绍DRAM&…

Axios和Spring MVC[前端和后端的请求和响应处理]

在前后端交互中&#xff0c;Axios和Spring MVC扮演着不同的角色&#xff0c;分别负责前端和后端的请求和响应处理。它们之间的作用如下&#xff1a; Axios&#xff08;前端&#xff09;&#xff1a; 发送HTTP请求&#xff1a;前端使用Axios库发送HTTP请求到后端。可以使用Axi…

HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!

原文&#xff1a;HarmonyOS 极客马拉松2023 正式启动&#xff0c;诚邀极客们用键盘码出无限可能&#xff01;&#xff0c;点击链接查看原文进入报名通道。 2023年6月15日&#xff0c; HarmonyOS极客马拉松2023开赛&#xff01;期待各位开发者极客朋友一起&#xff0c;探索移动应…

IT自动化运维工具优势与劣势分析-行云管家

随着自动化技术的进步&#xff0c;目前市面上出现了不少IT自动化运维工具。但很多人对于IT自动化运维工具优劣势不是很清楚&#xff0c;这里我们就来一起简单分析分析。 IT自动化运维工具优势 1、提高IT运维工作人员工作效率&#xff0c;提升整体项目效率&#xff1b; 2、提…

HQChart使用教程30-K线图如何对接第3方数据37-如何绘制圆点

HQChart使用教程30-K线图如何对接第3方数据37-如何绘制圆点 效果图步骤json格式nametypeDrawDraw.DrawTypeDraw.DrawData[] HQChart代码地址 效果图 步骤 步骤和第3方指标替换一样&#xff0c; 通过网络协议回调&#xff0c;知道需要执行的指标&#xff0c; 替换自己的数据。这…

chatgpt赋能python:Python中的整数筛选与小数筛选

Python中的整数筛选与小数筛选 Python是一种高级编程语言&#xff0c;常见于各种领域的编程工作中。在Python中&#xff0c;我们可以很方便地筛选整数和小数&#xff0c;用于数据分析、算法计算、图像处理等多个方向。本文将从Python中的整数筛选和小数筛选两个方面进行介绍和…