ubuntu中通过vscode编译调试ORB-SLAM3
为了在orb-slam3的基础上进行二次开发,这几天花了不少精力,终于搞懂怎么在ubuntu系统中像windows里visual studio中一样方便的打断点调试了,在这里把整个过程再重新梳理一下。
1 首先从安装ubuntu 22.04开始
因为是从实验室毕业先辈那里继承来的电脑,电脑里装了ubuntu 16的双系统,16太久了,于是决定删掉重装最新的ubuntu。
首先在windows系统中清空ubuntu系统所在的磁盘,在开机程序中删去ubuntu的启动项。然后通过u盘重装ubuntu最新版。网上的教程都是让自己调整分区,我是按照默认与windows boot manager并存,也成功了。
2 安装ROS2
目前最新的是ROS2,这个安装没啥好说的,注意和ROS2版本要和ubuntu版本对应就好。
3 下载编译ORB-SLAM3
需要先按照官方说明,安装一系列依赖项,第一个是pangolin。
3.1 安装pangolin
首先update和upgraded已有的packages
sudo apt update && sudo apt upgrade
安装依赖项
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev libxi-dev g++ libzip-dev libpng12-dev libcurl4-gnutls-dev libfontconfig1-dev libsqlite3-dev libglew*-dev libssl-dev
sudo apt-get install glew-utils
安装cmake
sudo apt-get install cmake
下载pangolin,放在自己的用户文件夹下就可以
git clone https://github.com/stevenlovegrove/Pangolin
用cmake编译安装
# 创建编译文件夹(在Pangolin文件夹下)
mkdir build && cd build
# 配置编译选项
cmake ..
# 开始编译代码
cmake --build .
# 安装
sudo make install
测试是否成功
# 从Pangolin文件夹进入测试文件夹
cd examples/HelloPangolin
# 创建编译文件夹并编译代码
mkdir build && cd build && cmake .. && make
# 运行即可看到显示结果
./HelloPangolin
3.2 OpenCV
类似的过程,先是依赖项
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libcanberra-gtk-module
sudo apt-get install pkg-config
下载源码,解压到自己的用户文件夹下,我选择的是3.4几
在源码文件夹中创建build文件夹。打开终端cd到build文件夹使用cmake生成makefile
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
执行make
sudo make
编译完成之后
sudo make install
3.3 Eigen3
sudo apt install libeigen3-dev
测试安装是否成功
dpkg -L libeigen3-dev
DBoW2 and g2o Included in Thirdparty folder,这里不用管,python已经自带在ubuntu 22.04中,注意更新以下pip就好。
以上准备工作完成。
3.4 编译安装ORL-SLAM3
同样的下载,然后解压到用户文件夹下
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
编译
cd ORB_SLAM3
chmod +x build.sh
./build.sh
下面就可以运行了,但是坑的地方来了,官方文档写着“Open the script "euroc_examples.sh"(GitHub - electech6/ORB_SLAM3_detailed_comments: Detailed comments for ORB-SLAM3)但我就是找不到这个.sh文件。后来在网上查到,有人说是官方自己删掉了,以前的版本是有的,新版本没了。于是在github上找到这个.sh文件。
我要作的是双目相机方面的东西,所以运行的是Stereo里面的example,所以在euroc_examples.sh"中,我选择的是
#------------------------------------
# Stereo Examples
echo "Launching MH01 with Stereo sensor"
下面的那一个命令
./Examples/Stereo/stereo_euroc ./Vocabulary/ORBvoc.txt ./Examples/Stereo/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Stereo/EuRoC_TimeStamps/MH01.txt dataset-MH01_stereo
解释一下这条命令,第一部分stereo_euroc是运行stereo_euroc这个可执行文件,第二部分是orb-slam3做回环检测用的,这里不用管。第三部分yaml文件是相机内参。第四部分是euroc数据集的路径,为了运行这个example,需要在euroc官网下载Machine Hall 01这个数据集。官网的数据集解压缩以后,命名是MH_01_easy,所以要把第三部分的改成
/home/username/MH_01_easy
后面是时间戳,为了让多个相机数据,IMU数据对应起来。
把命令改好以后在terminal中运行就可以了。
4 VScode调试ORB-SLAM3
只是在终端中运行是不够的,还要调试二次开发,这里选择vscode作为开发工具,vscode本身只是个文本编辑器,需要安装一些插件扩展。安装vscode简单,不说了,然后安装以下扩展包
C/C++
C++ Intellisense
CMake
CMakeTools
在终端中进入ORB-SLAM3文件夹,用vscode打开
code .
创建c_cpp_properties.json
。ctrl + shift + P
后输入C/C++: Edit configurations
,其中内容可以先保持默认的不做修改。
创建tasks.json
。ctrl + shift + P
后输入Tasks: Configure Tasks
,选择使用模板创建tasks.json
,选择Others
。这里建议修改为如下内容:
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "./build.sh",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
要注意:修改build.sh
文件中最下面的DCMAKE_BUILD_TYPE
为Debug
tasks.json文件的作用就相当于在终端中执行./build
要安装gdb debugger,否则无法生成launch.json
快捷键Ctrl+Shift+D
,打开一个launch.json
然后add configuration
里面有两个参数要改
"program": "/home/username/ORB_SLAM3/Examples/Stereo/stereo_euroc",
"args": ["/home/username/ORB_SLAM3/Vocabulary/ORBvoc.txt",
"/home/username/ORB_SLAM3/Examples/Stereo/EuRoC.yaml",
"/home/username/MH_01_easy",
"/home/username/ORB_SLAM3/Examples/Stereo/EuRoC_TimeStamps/MH01.txt"],
这两个参数就对应着终端运行时,输入的命令的4个部分。然后点击RUN AND DEBUG旁边的绿色小三角就可以debug了,打开stereo_euroc.cc文件夹,就可以打断点调试,自己做二次开发了。
以上。