【ORB_SLAM3】Ubuntu20.04 ros运行并保存PCD地图文件


ORB_SLAM3是第一个能够使用针孔和鱼眼镜头模型使用单目、立体和 RGB-D 相机执行视觉、视觉惯性和多地图 SLAM 的实时 SLAM 库。

链接: github.com/UZ-SLAMLab/ORB_SLAM3


虽然但是,笔者使用了以下这个纯使用ros的版本:

  • A ROS implementation of ORB-SLAM3 V1.0 that focuses on the ROS part.

链接: github.com/thien94/orb_slam3_ros


1. 环境配置

1.1 Eigen3

sudo apt install libeigen3-dev

1.2 Pangolin

cd ~
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build
cmake ..
make
sudo make install

1.3 OpenCV

OpenCV(要求>3.0), ubuntu20.04自带OpenCV 4.2.0
使用以下指令查看OpenCV版本

pkg-config --modversion opencv4

1.4 boost

安装ros会自动安装,也可以使用apt安装:

sudo apt-get update
sudo apt-get install libboost-all-dev

2. 编译 orb_slam3_ros

cd ~/catkin_ws/src
git clone https://github.com/thien94/orb_slam3_ros.git
cd ../
catkin_make

3. 运行 orb_slam3

  • 以单目-IMU为例:

3.1 下载MH_01_easy.bag

3.2 修改配置文件

在 config/Monocular-Inertial/EuRoC.yaml 开头添加:

System.SaveAtlasToFile: "MH01_stereo_inertial"

启用保存文件的功能

3.3 运行

# 新终端
roslaunch orb_slam3_ros euroc_mono_inertial.launch
# 新终端
rosbag play MH_01_easy.bag

3.4 文件保存

ctrl^C 结束运行后自动保存地图文件,保存的地图文件在 /.ros

文件格式为.osa


4. 保存为PCD文件

4.1 安装PCL库

sudo apt-get install libpcl-dev pcl-tools

4.2 修改 MapDrawer.cc

在文件夹 /orb_slam3/src

4.2.1 添加头文件
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
4.2.2 找到 DrawMapPoints 函数中的如下代码:
for(set<MapPoint*>::iterator sit=spRefMPs.begin(), send=spRefMPs.end(); sit!=send; sit++)
{
    if((*sit)->isBad())
        continue;
    Eigen::Matrix<float,3,1> pos = (*sit)->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
 
}

修改为如下代码:

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_saved(new pcl::PointCloud<pcl::PointXYZ>());
for(set<MapPoint*>::iterator sit=spRefMPs.begin(), send=spRefMPs.end(); sit!=send; sit++)
{
    if((*sit)->isBad())
        continue;
    Eigen::Matrix<float,3,1> pos = (*sit)->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
 
    //modified by Awei
    pcl::PointXYZ p;
    p.x = pos(0);
    p.y = pos(1);
    p.z = pos(2);
    cloud_saved->points.push_back(p);
}
if (cloud_saved->points.size())
    pcl::io::savePCDFileBinary("map.pcd", *cloud_saved);
4.2.3 找到以下代码段
for(size_t i=0, iend=vpMPs.size(); i<iend;i++)
{
    if(vpMPs[i]->isBad() || spRefMPs.count(vpMPs[i]))
        continue;
    Eigen::Matrix<float,3,1> pos = vpMPs[i]->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
}

修改为以下代码:

for(size_t i=0, iend=vpMPs.size(); i<iend;i++)
{
    if(vpMPs[i]->isBad() || spRefMPs.count(vpMPs[i]))
        continue;
    Eigen::Matrix<float,3,1> pos = vpMPs[i]->GetWorldPos();
    glVertex3f(pos(0),pos(1),pos(2));
        
    //modified by Awei
    pcl::PointXYZ p;
    p.x = pos(0);
    p.y = pos(1);
    p.z = pos(2);
    cloud_saved->points.push_back(p);
}
if (cloud_saved->points.size() > pre_num)
{
    pcl::io::savePCDFileBinary("map.pcd", *cloud_saved);
    pre_num = cloud_saved->points.size();
}
4.2.4 在 MapDrawer.cc 开头加入全局变量 pre_num
extern int pre_num = 0;

4.3 在 CMakeLists.txt 中添加 PCL 库:

find_package(PCL REQUIRED)
 
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/include/CameraModels
${PROJECT_SOURCE_DIR}/Thirdparty/Sophus
${EIGEN3_INCLUDE_DIR}
${Pangolin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)
 
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PCL_LIBRARIES}
${PROJECT_SOURCE_DIR}/Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/Thirdparty/g2o/lib/libg2o.so
-lboost_serialization
-lcrypto
)

4.4 重新编译 orb_slam3_ros 并运行launch

保存的pcd文件在 /.ros
文件名为 map.pcd
在这里插入图片描述使用PCDviewer查看:

在这里插入图片描述


5. 使用自己录制的数据

5.1 修改launch文件

笔者使用的是工业相机flir录制的数据,使用 euroc_mono.launch
先查看录制数据bag的话题名称:

rosbag info YOURBAG.bag

在这里插入图片描述

5.1.1 修改话题名
<remap from="/camera/image_raw"  to="/flir_adk/image_raw"/>
5.1.2 修改配置文件 (建议保存为一个新的yaml文件)

修改 /config/Monocular/EuRoC.yaml
修改 相机内参 fx fy cx cy 畸变参数k1 k2 p1 p2 图片像素 width height

在这里插入图片描述

5.2 运行

# 新终端
roslaunch orb_slam3_ros euroc_mono.launch
# 新终端
rosbag play YOURBAG.bag
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Ubuntu 20.04上安装ORB_SLAM3的步骤如下: 1. 打开终端,并执行以下指令来安装依赖项: ``` sudo apt-get install libglew-dev doxygen sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev sudo apt-get install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev sudo apt-get install libpng-dev ``` 2. 从ORB_SLAM3官网下载稳定版本V0.6(请避免使用master版本,因为它可能与其他库发生冲突)。 3. 解压缩下载的文件,进入解压后的目录: ``` cd Orb_SLAM3 ``` 4. 在终端中执行以下指令编译ORB_SLAM3: ``` chmod +x build.sh ./build.sh ``` 5. 安装realsense2库(可选): ``` # 注册public key sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE # 添加apt源 sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u # 安装 sudo apt install librealsense2-dkms librealsense2-utils librealsense2-dev ``` 完成以上步骤后,ORB_SLAM3将成功安装在Ubuntu 20.04上。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ubuntu20.04安装并运行ORB_SLAM3(一路顺风版)](https://blog.csdn.net/weixin_56566649/article/details/125280841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Ubuntu 20.04 安装 ORB_SLAM3(包含ROS版)](https://blog.csdn.net/zhuxiaoyang2000/article/details/120716609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值