slamplay:用C++实现的SLAM工具集
0. 项目简介
slamplay 是一个功能强大的工具集合,可用于开始使用 C++ 来玩和试验 SLAM。这是一项正在进行的工作。它在单个 cmake 框架中安装并提供一些最重要的功能
-
后端框架(g2o、gtsam、ceres、se-sync 等)、
-
前端工具(opencv、pcl等)、
-
代数和几何库(eigen、sophus、cholmod 等),
-
即工具(pangolin、imgui 等)、
-
闭环框架(DBOW3、iBOW 等)、
以及一些很好的示例,以便轻松快速地开始使用所有这些工具。
我为最近教授的计算机视觉课程创建了 slamplay。我在空闲时间出于兴趣开始开发它,并从网络上的一些存储库中获取灵感。




该存储库由以下主要文件夹构成(具有不言自明的名称):
- algebra_geometry
- backend
- data
- dense_mapping
- docs
- frontend
- full_slam
- io
- loop_closure
- dense_mapping
- scripts
- utils
- viz
1. 快速启动
安装基本依赖项:
$ ./install_dependencies.sh
在本地文件夹中安装 OpenCV:
$ ./install_local_opencv.sh
(如果需要,请跳过此步骤并使用本地 OpenCV 路径设置 config.sh 中的变量 OpenCV_DIR )
构建框架:
$ ./build.sh
一切构建完成后,您可以进入 build 文件夹并测试不同的示例。特别是,您可以在 full_slam 文件夹中输入:
配置文件 config/kitti.yaml (或 config/euroc.yaml )
并运行 VO 应用 app/run_kitti_stereo (或 app/run_euroc_stereo )
2. 自己的教程
请参阅很好的 ascii 快速参考。
- 快速参考
- 密集矩阵操作
- 密集线性问题和分解
- 稀疏线性代数
- 几何学
3. 后端
关于后端框架的一些注释。
3.1 GTSAM 示例
安装标签4.2a9
- https://github.com/borglab/gtsam/tree/4.2a9/examples
文档
- https://gtsam.org/docs/
- https://gtsam.org/tutorials/intro.html
请参阅 docs 文件夹以获取更多文档。
问题显然,为了避免退出时 gtsam 出现双重释放或损坏错误,我们需要在构建使用 gtsam 的应用程序时禁用编译选项 -march=native 。这可以通过修改文件夹级别的编译标志并删除 gtsam 相关文件的 March 本机优化来在本地完成。更多详细信息请参见以下链接:
- https://bitbucket.org/gtborg/gtsam/issues/414/compiling-with-march-native-results-in
- https://groups.google.com/g/gtsam-users/c/jdySXchYVQg
3.2 谷神星的例子
安装标签2.1.0
- https://ceres-solver.googlesource.com/ceres-solver/+/refs/tags/2.1.0/examples/
文档
- http://ceres-solver.org/tutorial.html
请参阅 docs 文件夹以获取更多文档。
3.3. g2o 示例
已安装标签 20230223_git。请参阅相关示例。
Issues: 问题:
-
构建的依赖于 g2o 的二进制文件链接到系统 g2o(而不是本地编译和安装的 g2o),这会导致崩溃(链接了不同的 g2o 版本)。这个问题有不同的解决方案:
-
标准一(不舒服):使用
LD_LIBRARY_PATH使构建的二进制文件正确链接到本地编译和安装的 g2o。 -
否则,我们可以在构建时使用和设置
RPATH(而不是RUNPATH)。特别是,这可以通过使用一些编译器选项来完成。这是我在 cmake 配置中设置的: set(MY_FLAGS “${MY_FLAGS} -Wl,–disable-new-dtags”) https://stackoverflow.com/questions/47117443/dynamic-linking-with-rpath-not-working-under-ubuntu-17-10 此配置由我添加的 cmake 选项标志SET_RPATH启用/禁用。
-
-
如果您在 g2o 中遇到双重释放或损坏错误(退出时),则很可能您在编译此项目时使用了
-march=native选项,但没有使用相同的选项来构建 g2o 本身。这可能会导致 g2o 和本项目之间出现一些对齐不一致的情况。然后,在这种情况下,使用-march=native构建 g2o (即使用 cmake 选项-DBUILD_WITH_MARCH_NATIVE=ON)
4. IO
4.1. chrono
https://www.modernescpp.com/index.php/the-three-clocks
三种不同时钟之间的差异?
std::chrono::sytem_clock:这是系统范围的实时时钟(挂钟)。时钟具有辅助函数 to_time_t 和 from_time_t 将时间点转换为日期。
std::chrono::steady_clock:仅作为时钟提供您无法调整它的保证。因此, std::chrono::steady_clock 是等待一段时间或直到某个时间点的首选时钟。
std::chrono::high_resolution_clock:这是精度最高的时钟,但它可以是时钟的 std::chrono::system_clock 或 std::chrono::steady_clock 的同义词。
C++ 标准不提供有关时钟精度、起始点或有效时间范围的保证。通常,std::chrono:system_clock 的起点是 1.1.1970,即所谓的 UNIX 纪元。对于 std::chrono::steady_clock,通常是 PC 的启动时间。
通俗来说,steady_clock 与 system_clock 之间有什么区别?
如果你手里拿着一个 system_clock,你会称它为手表,它会告诉你现在是什么时间。
如果你手里拿着一个 stable_clock,你会称它为秒表,它会告诉你某人跑了一圈有多快,但它不会告诉你现在是什么时间。
相关文章:
slamplay:用C++实现的SLAM工具集
0. 项目简介 slamplay 是一个功能强大的工具集合,可用于开始使用 C 来玩和试验 SLAM。这是一项正在进行的工作。它在单个 cmake 框架中安装并提供一些最重要的功能 后端框架(g2o、gtsam、ceres、se-sync 等)、 前端工具(opencv、…...
IPT2602协议-USB 快速充电端口控制器
产品描述: IPT2602是一款USB端口快速充电协议控制芯片。IPT2602智能识别多种快速充电协议,对手机等受电设备进行快速充电。IPT2602根据受电设备发送的电压请求能够精确的调整VBUS输出电压,从而实现快速充电。 IPT2602在调整5V输出电压前会自动…...
Zotero 超好用插件的下载链接及配置方法(PDF-translate/ZotFile/茉莉花/Zotero Scihub)
目录 前言插件安装方法插件一:文献翻译插件(pdf-translate)插件二:文献附件管理(ZotFile)插件三:中文文献插件(茉莉花)插件四:Sci-Hub 自动下载文献ÿ…...
Titus网关中的缓存一致性机制
API网关引入缓存可以在不影响数据一致性的前提下,有效优化接口时延。本文介绍了Netflix在Titus网关上引入缓存的实践,比较了有无缓存对访问时延的影响。原文: Consistent caching mechanism in Titus Gateway 前言 Titus是Netflix的云容器运行时…...
flutter开发实战 - inappwebview设置cookie
flutter开发实战-inappwebview设置cookie 在使用inappwebview时候,需要设置cookie,这里记录一下 一、在initialUserScripts中设置cookie 在inappwebview中有一个initialUserScripts,可以初始化设置cookie等,我们可以通过该属性…...
零基础如何自学网络安全,基于就业前景全方位讲解,包教包会
你是否对网络空间安全充满好奇?想要解开网络世界神秘的面纱?你是否对黑客技术着迷?而找不到合适的学习途径?你是否遭到过各种各样的网络攻击,却因知识的匮乏束手无策? 那么接下来将为你全面介绍,…...
Java项目防止SQL注入的几种方案
目录 一、什么是SQL注入? 二、Java项目防止SQL注入方式 1、PreparedStatement防止SQL注入 2、mybatis中#{}防止SQL注入 3、对请求参数的敏感词汇进行过滤 4、nginx反向代理防止SQL注入 一、什么是SQL注入? SQL注入即是指web应用程序对用户输入数…...
Win11 安装安卓子系统方法教程
WIN11安装安卓子系统 准备工作下载安装安装完成使用adb连接子系统结束 准备工作 开启电脑中的 控制面板>>>>程序和功能>>启用或关闭Windows功能>>>找到“Hyper-V”,把勾都勾上,确定,完成安装,并重启电…...
golang pg 数据库不存在 就创建 --chatPGT
问:linkOrCreateDatabase(addr ), 函数执行 连接 pg数据库,若数据库 不存在就创建 gpt: 要在 Go 中连接到 PostgreSQL 数据库并在数据库不存在时创建数据库,你可以使用 github.com/lib/pq 包以及 database/sql 包。以下是一个示例࿱…...
VUE3照本宣科——eslint与prettier
VUE3照本宣科——eslint与prettier VUE3照本宣科系列导航 前言一、eslint1.配置文件2.配置规则3.忽略错误 二、prettier三、总结 VUE3照本宣科系列导航 1.VUE3照本宣科——认识VUE3 2.VUE3照本宣科——应用实例API与setup 3.VUE3照本宣科——响应式与生命周期钩子 4.VUE3照本宣…...
【谷粒学院】Maven加载问题
问题 maven加载项目时候,默认不会加载src-java文件夹里面xml类型文件的 解决方案 直接赋值xml文件到target目录通过配置实现 (1)在pom.xml文件中配置 <!-- 项目打包时会将java目录中的*.xml文件也进行打包 --> <build><re…...
PostgreSQL数据库中实现字段递增
在 PostgreSQL 中,可以使用序列(sequence)来实现字段的递增。序列是一种特殊的对象,用于生成唯一的递增数字。 首先,您需要创建一个序列对象。可以使用以下命令创建一个名为 "my_sequence" 的序列ÿ…...
深度学习——深度学习计算二
深度学习——深度学习计算二 文章目录 前言三、延后初始化四、自定义层4.1. 不带参数的层4.2. 带参数的层 五、读写文件5.1. 加载和保存张量5.2. 加载和保存模型参数 六、GPU6.1. 计算设备6.2. 张量与GPU6.3. 神经网络与GPU 总结 前言 延续上一章的学习,本章继续记…...
HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Badge
可以附加在单个组件上用于信息标记的容器组件。该组件从API Version 7开始支持。 支持单个子组件。子组件类型:系统组件和自定义组件,支持渲染控制类型(if/else、ForEach和LazyForEach)。 一、接口 方法1: Badge(value…...
在Flink中集成和使用Hudi
本文介绍在Flink 中集成和使用Hudi。介绍Flink如何将Streaming引入Hudi。在Hudi上使用Flink,并学习Flink读写Hudi的不同模式: Flink SQL客户端写入:Flink SQL客户端写入(读取)Hudi。 配置:对于全局配置,通过$FLINK_HOME/conf/FLINK-conf.yaml进行设置。对于每个作业配置…...
docker搭建Jenkins及基本使用
1. 搭建 查询镜像 docker search jenkins下载镜像 docker pull jenkins/jenkins启动容器 #创建文件夹 mkdir -p /home/jenkins_home #权限 chmod 777 /home/jenkins_home #启动Jenkins docker run -d -uroot -p 9095:8080 -p 50000:50000 --name jenkins -v /home/jenkins_home…...
CSS初体验
目录 一、CSS初体验 二、CSS引入方式 三、选择器 3.1 标签选择器 3.2 类选择器 3.3 id选择器 3.4 通配符选择器 四、盒子尺寸和背景色 五、文字控制属性 5.1 字体大小 5.2 字体样式(是否倾斜) 5.3 行高 5.3.1 单行文字垂直居中 5.4 字体族 5.5 font复合属性 5.…...
python性能分析
基于cProfile统计函数级的时延,生成排序列表、火焰图,可以快速定位python代码的耗时瓶颈。参考如下博文结合实操,总结为三步: 使用 cProfile 和火焰图调优 Python 程序性能 - 知乎本来想坐下来写篇 2018 年的总结,仔细…...
苹果手机怎么备份所有数据?2023年iPhone 15数据备份常用的3种方法!
当苹果手机需要进行刷机、恢复出厂设置、降级iOS系统等操作时,我们需要将自己的iPhone数据提前进行备份。 特别是在苹果发布新iOS系统时,总有一些小伙伴因为升降级系统,而导致了重要数据的丢失。 iPhone中储存着重要的照片、通讯录、文件等数…...
【RV1103】如何新增一个新板级配置
文章目录 新建一个板级配置文件 新建一个板级配置文件 我的目标 通过./build.sh lunch 来选择我的板子配置。 在目录sdk/project/cfg目录下新建一个xxxx.mk文件,文件名字格式如下: BoardConfig-"启动介质"-"电源方案"-"硬件…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
