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文件夹,就可以打断点调试,自己做二次开发了。
以上。
相关文章:
ubuntu中通过vscode编译调试ORB-SLAM3
为了在orb-slam3的基础上进行二次开发,这几天花了不少精力,终于搞懂怎么在ubuntu系统中像windows里visual studio中一样方便的打断点调试了,在这里把整个过程再重新梳理一下。 1 首先从安装ubuntu 22.04开始 因为是从实验室毕业先辈那里继承…...
阿里版 ChatGPT 突然上线!
转自:纯洁的微笑 其实早本月初,就传出过不少阿里要推出类ChatGPT的消息。 前几天率先流出的天猫精灵“鸟鸟分鸟”脱口秀版GPT,就是基于大模型的“压缩版”,已经以其惊艳表现吸引了众目光。 如今“原版大菜”上桌,自然一点即着&a…...
《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》
一、架构图 如下图所示: 二、环境信息 主机名K8S版本系统版本内核版本IP地址备注k8s-master-621.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.62master节点k8s-worker-631.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.63worker节点k8s-worker-641…...
MAZDA CX-50没现车怎么办?赶紧去VR看车啊!
爱车一族往往都有过这样的经历:听说某家品牌出了一款心仪的新车,于是一直心心念念想要先睹为快。然而这时候问题就来了:新车从发布到量产上市往往要经历一段过程。没有现车的日子里,就算每天去4S店蹲守也看不到新车。那种心里痒痒…...
结构体全解,适合初学者的一条龙深度讲解(附手绘图详解)
我们知道,C语言是允许我们自己来创造类型的,这些类型就叫做——自定义类型。 自定义类型又包括结构体类型,联合体类型还有枚举类型。 今天的文章,我们就着重讲解这其中的结构体类型。 目录 结构体的声明 1.1结构的基础知识 …...
什么是SD-WAN技术?企业网络优化的利器!
现今,企业网络架构已成为其发展不可或缺的组成部分。针对网络性能优化方面,SD-WAN是一种值得深思熟虑的选择,在企业网络中应用SD-WAN技术能够带来多重好处。 什么是SD-WAN技术以及它是如何工作的? SD-WAN是软件定义的广域网&…...
JAVA练习106- 生命游戏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-生命游戏 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 4 月12日练习…...
【案例教程】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术
【原文链接】: 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537049&idx3&sn31ef342c4808aed6fee6ac108b899a33&chksmfe6897f3c91f1ee5c4fa8e4eeea34…...
php7类型约束,严格模式
在PHP7之前,函数和类方法不需要声明变量类型 ,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。 为了解决这个问题,PHP7引入了类型声明。 目前有两类变量可以声明类型: 形参&a…...
2023-04-11 无向图的匹配问题
无向图的匹配问题 之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想 1 最大匹配和完美匹配 二分图回顾 二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多…...
国家出手管人工智能AI了
我是卢松松,点点上面的头像,欢迎关注我哦! 全球都在封杀AI,国家也出手了,人工智能AI的强监管来了!这次反应速度算是很快了。国家出手,AI必须管。 国家网信办拟针对生成式人工智能服务出台管理办法&#…...
day24—选择题
文章目录1.将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为(A)2.已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行&…...
自投递简历以来的第一次面试
投完简历之后HR小姐姐接着就安排了面试,原定时间是今天下午六点,我五点五十进的会议,结果等到六点二十(真的有点不耐烦了说实话)面试官打电话过来了说网络不是很好,所以改成电话面试了。 1、session信息保…...
【C++11】新特性 - 右值引用详解
文章目录STD容器使用右值引用场景移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。移动语义只对右值有效,对左值无效原因STD容器使用右值引用场景 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋…...
C++学习笔记
C学习笔记函数一般有返回值,构造函数有没有返回值?有返回值,返回一个对象,确定所以没写;在头文件中,防卫式声明,#ifndef…#define … #endif;pass by value或者 reference,传值是整包…...
项目1实现login登录功能方案设计第三版
需求优化点:MySQL表常用功能模块实现方案index页面home页面需求 实现一个登录功能 实现的功能 注册(邮箱注册)登录(邮箱密码)重置密码查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)登出在第2版的基础上进行优化:\ 优化点: VerificationCode(验证码储存库): 增加时间字段…...
Node【七】初识Express框架
文章目录🌟前言🌟Express框架🌟1.什么是框架🌟2.express安装🌟3.创建web服务基本遵循之前的四个步骤:🌟4.路由🌟 由 :请求方式请求路径(1)get发送…...
Android 高通Camera2 Camera Device Close
1、很多人看到这个日志第一感觉可能觉得哪里没有合理释放,于是带着这个思路去进行百度探索 2、一开始我去寻找 ImageReader.OnImageAvailableListener 这个问题 var afterBitmap: Bitmap? null/**监听拍照的图片 */private val imageAvailableListener ImageRead…...
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的…...
4、浅谈Makefile文件及其简单的使用知识
文章目录1、什么是Makefile?(1)makefile关系到了整个工程的编译规则。(2)makefile带来的好处就是——“自动化编译”(3)make是一个命令工具,是一个解释makefile中指令的命令工具2、为…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
