小秋slam实战
答疑 | xiaoqiuslam
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
小秋SLAM入门实战SLAM所有文章汇总
SLAM算法中的缓冲区和队列用途和用法【ORB_SLAM2源码解读】Intel RealSense D435i 实时跑ORB_SLAM2单目 双目 RGBD【从零开始学习SLAM】两帧之间的特征点视觉里程计并用g2o优化【从零开始学习SLAM】VIZ Pangolin 可视化【从零开始学习SLAM】BA问题用g2o求解重新投影误差优化相机位姿和路标点「零基础从零开始写VO视觉里程计」匹配的3D空间点求位姿并用g2o优化【ORB_SLAM2源码解读】Intel RealSense Depth Ca原创 2023-12-29 21:57:37 · 2657 阅读 · 0 评论 -
小秋SLAM入门实战视频教程学习顺序
零基础从零开始写VO视觉里程计原创 2022-05-01 16:53:39 · 7395 阅读 · 3 评论 -
从零开始学习SLAM
这样我们可将一幅图像定义为一个二维函数 f(x,y),图像中的每个像素就可以用 (x,y) 坐标表示,而在任何一对空间坐标 (x,y) 处的幅值 f 称为图像在该点的强度或灰度,当 x,y 和灰度值 f 是有限离散数值时,便称该图像为数字图像。通过一定的速率对图像进行周期性的扫描,把图像上不同亮度的点变成不同大小的电信号,然后传送出去的方法就是图像模拟传输。模拟图像是通过某种物理量的强弱变化来表现图像上各点的颜色 信息,画稿、电视上的图像、相片、印刷品图像都是模拟图像。Zc为相机的光轴,和图像平面垂直。..原创 2022-08-13 10:10:33 · 542 阅读 · 0 评论 -
小秋SLAM入门实战ROS所有文章汇总
【关于ROS_PACKAGE_PATH的含义、理解和用法】ros::spin()、ros::spinOnce()用途用法ROS代码中的消息日志级别小秋SLAM入门实战教程汇总【launch文件中如何启动gdb调试单个节点多个节点】一个ros可执行程序可以定义几个节点?ros启动节点的launch文件你真的会写吗?【Point Cloud ROS】用一张彩色图像和深度图像生成点云图像【Point Cloud ROS】两张点云图像之间的位姿变换【ROS】创建工作空间Workspace和功能包Pac原创 2023-12-30 10:42:58 · 1070 阅读 · 0 评论 -
小秋SLAM入门实战opencv所有文章汇总
【代码】小秋SLAM入门实战opencv所有文章汇总。原创 2023-12-29 19:29:20 · 1139 阅读 · 0 评论 -
非ROS多机通信方案汇总
多机协同SLAM(Collaborative SLAM)是一种让多个机器人(如无人机、地面机器人等)同时进行定位与地图构建的算法,目的是通过协作提高单个机器人的 SLAM 性能。多个机器人之间可以共享位置信息、地图信息,甚至通过视觉、激光等传感器数据相互校准彼此的位置。原创 2024-09-27 23:59:48 · 453 阅读 · 0 评论 -
【运算你真的理解吗?】
整合所有运算的专业用语及其用途,跨越多个数学和科学领域,每个运算在不同的领域具有特定的含义和应用。原创 2024-09-14 09:52:52 · 498 阅读 · 0 评论 -
小秋SLAM入门实战C++所有文章汇总
【代码】小秋SLAM入门实战C++所有文章汇总。原创 2023-12-31 11:01:21 · 1081 阅读 · 0 评论 -
小秋SLAM入门实战ubuntu所有文章汇总
ubuntu 终端如何停止快速打印的输出以及恢复命令ubuntu 终端如何快速打开当前路径下的图形化窗口界面?killall -9用途用法ps -xu | grep这个命令的用途linux 下 top命令显示的是内存是堆内存吗?zip分割和合并关闭除当前 GNOME 终端窗口以外的所有其他 GNOME 终端窗口如何在安装系统后设置短密码【如何使用getrusage获取消耗的CPU时间和进程使用的最大物理内存】【webots安装使用教程】Linux系统下查看当前运行的进程和线程的几种方法原创 2023-12-29 19:22:58 · 1015 阅读 · 0 评论 -
小秋SLAM入门实战vscode所有文章汇总
使用Shift+Ctrl+p快捷键调用查询输入栏,输入“cursor”,列表中会出现“切换多行修改键”这个选项。选择这个选项就可以在两种模式下切换。版权声明:本文为CSDN博主「小秋SLAM入门实战」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。这种模式下只可以选择竖列,不可以随意插入光标。这种模式下不仅可以选择竖列,同时还可以在多个地方插入光标。VScode对多行编辑有两种模式。Alt+Shift 竖列选择。Shift+Ctrl 竖列选择。原创 2023-12-30 22:49:38 · 1031 阅读 · 0 评论 -
小秋SLAM入门实战pcl所有文章汇总
【PCL 保存点云数据为 PCD 文件的方法汇总】【pcl::IterativeClosestPoint参数用法用途汇总】【PCL (Point Cloud Library)可视化点云的工具汇总】原创 2023-12-31 00:13:55 · 836 阅读 · 0 评论 -
小秋SLAM入门实战深度学习所有文章汇总
如何直观的理解机器学习过拟合和欠拟合?如何直观的理解机器学习PR曲线和ROC曲线?深度学习开源网络RPN算法解析源码解读numpy下hstack()和vstack()的用法python下class self的用法python计算时间差divmod() datetime str()的用法如何理解深度学习中Batch Normalization中Batch所代表具体含义?Python下numpy多维数组axis = 0、1、2 计算的详细过程扩展tensor维度和这个原理类似如何理解深度学习tens原创 2023-12-29 19:24:35 · 721 阅读 · 0 评论 -
【ORB_SLAM3源码解读】Ubuntu 16.04、18.04、20.04系统下编译ORB_SLAM3
补充一下,这篇教程编译的是最开始ORB_SLAM3开源的代码版本,现在直接下载的是最新的版本,所以报错会不太一样,不过还是有参考价值的。官方代码地址开始编译DBow2编译成功,但是g2o编译不成功根据报错信息分析问题出在了哪里寻找一下在哪里打开看看意思就是这个.cmake文件会找到第三方库的头文件,库文件,Eigen没有库文件我们再看看OpenCV的打开g2o下面的CMakeLists.txt发现这里有这个路径然后实际上下载的代码是没有的所以可以把ORB_SLAM2的拷贝过来或者是给出。原创 2020-07-25 19:31:50 · 6541 阅读 · 8 评论 -
【ORB_SLAM2源码解读】Ubuntu 20.04系统下编译ORB_SLAM2
零基础从零开始写VO视觉里程计代码实战原创 2022-04-13 16:37:10 · 5999 阅读 · 1 评论 -
【ORB_SLAM2源码解读】EuRoC双目数据集跑通ORB_SLAM2
Tracking-跟踪Local Mapping-地图Loop Closing-回环ORB_SLAM2与传感器之间是相互独立,提取特征之后,图像不需要被保存而是直接丢弃。ORB_SLAM2将编译出libORB_SLAM2 . so安装在lib目录中并且生成可执行的数据集测试样例。原创 2022-04-08 18:55:21 · 3756 阅读 · 1 评论 -
【ORB_SLAM2源码解读】TUM、EuRoC单目数据集跑通ORB_SLAM2
文章目录TUM Dataset实验结果mono_tum运行视频EuRoC Dataset实验结果TUM DatasetTUM Dataset 数据集下载地址TUM1.yaml 是数据集 freiburg1 的相机参数TUM2.yaml 是数据集 freiburg2 的相机参数TUM3.yaml 是数据集 freiburg3 的相机参数mono_tum 是单目的可执行程序ORBvoc.txt 是回环检测要用到的词典mono_tum运行命令cd /ORB_SLAM2./Examples/M原创 2022-04-12 09:52:24 · 1763 阅读 · 0 评论 -
【ORB_SLAM2源码解读】TUM RGBD 数据集跑通ORB_SLAM2
文章目录下载Tum RGBD数据集生成关联文件clion运行命令rgbd_tum终端运运行命令实验结果保存rgbd_tum数据集关键帧轨迹rgbd_tum轨迹可视化rgbd_tum参数文件TUM1.yaml解析下载Tum RGBD数据集TUM Dataset 数据集下载地址也可以添加微信"slamshizhanjiaocheng"获取fr2/pioneer_360生成关联文件生成深度图和彩色图时间戳对其的文件associate.py 下载地址也可以添加微信"slamshizhanjiaoc原创 2022-04-11 18:16:00 · 1736 阅读 · 0 评论 -
【从零开始学习SLAM】扫地机器人工作原理 传感器原理 结构 工作流程 路径规划技术
文章目录扫地机器人的关键技术扫地机器人传感器系统超声波传感器红外测距传感器接触式传感器红外光电传感器防碰撞传感器防跌落传感器防过热传感器床底深度清扫灰尘盒防满传感器低电量自动返回充电功能边缘检测传感器光电编码器电子罗盘陀螺仪扫地机器人路径规划技术对未知区域的边沿学习全区域覆盖路径规划方案扫地机器人构成与原理吸尘器部分行走驱动部分清扫路线传感器部分扫地机器人的关键技术扫地机器人系统通常由四个部分组成:移动机构、感知系统、控制系统和吸尘系统。移动机构是扫地机器人的主体,决定了机器人的运动空间,一般采用轮式原创 2020-03-28 11:49:05 · 17726 阅读 · 2 评论 -
C++用法汇总
在C++中,函数指针是指向函数的指针变量,它存储函数的地址。可以通过定义函数指针来访问和调用函数,这在某些情况下非常有用。函数指针的定义方式与指向变量的指针变量的定义方式略有不同。int* ptr;这个定义表示 funcPtr 是一个指向返回类型为 int,带有两个 int 类型参数的函数的指针变量。// 调用 add 函数,返回 3需要注意的是,在使用函数指针时,需要确保函数指针指向的函数存在,并且参数和返回类型与函数指针的定义匹配。原创 2020-08-26 10:47:21 · 12922 阅读 · 1 评论 -
Ubuntu系统搭建SLAM开发环境
本课程结合实战讲解SLAM理论适合零基础想要入门SLAM的初学者。RGBD 两张张图像计算位姿并生成点云7-2。Eigen中旋转矩阵和变换矩阵的用法4-3。RGBD单张图像和多张图像生成点云7-1。发布图像话题并在rviz中显示2-2上。发布图像话题并在rviz中显示2-2下。发布图像话题并在rviz中显示2-2。创建点云并发布ROS点云话题3-1。Eigen中向量和矩阵的用法4-1。接收对点云并进行位姿态变换3-2。图像数据Mat的属性2-1。创建、保存、显示点云3-3。位置姿态的表示和变换4-2。原创 2022-12-10 09:01:17 · 671 阅读 · 0 评论 -
在 C 或 C++ 编程中,#ifdef DEBUG_INFO 这类的预处理指令通常被顶格写(即在代码行的最开始处,没有缩进)出于以下几个原因
尽管大多数现代编译器可以处理带有缩进的预处理指令,但在一些旧的或特定的编译环境中,预处理指令的缩进可能导致编译器解析错误。顶格写预处理指令可以确保在不同的编译环境中保持一致的行为。:将预处理指令顶格写可以帮助开发者快速识别这些行是预处理指令,而不是普通的代码。综上所述,虽然这种风格主要是基于传统和可读性考虑,但它有助于保持代码的清晰度和一致性,尤其是在团队协作和代码共享的环境中。:将预处理指令与普通代码视觉上区分开来,有助于维护时快速定位和理解代码的不同部分,尤其是在涉及条件编译的复杂代码中。原创 2024-01-17 11:37:17 · 574 阅读 · 0 评论 -
如何使用 CMake 来构建一个包含子目录的 C++ 项目
在这个示例中,我们展示了如何使用 CMake 在包含子目录的项目中构建 C++ 程序。通过将源代码和可执行文件分别放在src和bin子目录中,项目的结构更加清晰和组织化。这种方法对于管理大型项目特别有用,因为它允许将项目分解成更小、更易于管理的部分。原创 2024-01-07 17:32:16 · 1290 阅读 · 0 评论 -
将当前分支推送到远程仓库,并在远程仓库中创建一个不同名的新分支
默认情况下,当你从远程仓库克隆代码时,该远程仓库会被命名为。:指向你当前分支的最新提交的指针。在这个命令中,它代表你想要推送的本地分支。的分支(如果不存在的话),并且将你当前分支上的更改推送到这个新分支。上工作,而你想要将这些更改推送到远程仓库的一个新分支。为你想要创建的远程分支的名称。:Git 命令,用于将本地更改推送到远程仓库。:这是你想要在远程仓库中创建的新分支的名称。这将会在远程仓库中创建一个名为。例如,如果你当前在本地分支。原创 2024-01-09 14:52:50 · 678 阅读 · 0 评论 -
条件编译是一种在预处理阶段根据特定条件控制代码是否被编译的技术
条件编译提供了一种强大的机制,可以根据编译时确定的条件来包含或排除代码部分,从而使得程序可以适应不同的编译环境和配置需求。正确使用条件编译可以增强代码的可移植性和灵活性。让我们通过一个实际的示例来演示 C/C++ 中条件编译的使用。在这个例子中,我们将创建一个小程序,它根据编译时的不同条件输出不同的信息。这个程序将演示如何使用条件编译来处理不同的操作系统和编译配置。这个简单的示例展示了如何使用条件编译指令来根据编译时的不同条件执行不同的代码段。通过定义或不定义特定的宏(可以在编译命令中使用-D。原创 2024-01-07 13:53:20 · 978 阅读 · 0 评论 -
常见的序列化数据结构方法及其优缺点汇总
将常见的序列化数据结构方法及其优缺点进行汇总,可以帮助在不同的应用场景中选择合适的序列化格式。每种序列化格式都有其特定的应用场景,选择时应考虑数据的复杂性、应用的性能要求、开发和维护的便利性以及生态系统的支持度。原创 2024-02-23 10:30:19 · 1199 阅读 · 1 评论 -
typedef用法汇总和代码实战
可以为基本数据类型定义一个更易于理解的别名。假设你正在编写一个简单的图形处理库,可以使用typedef来简化结构体和函数指针的声明。// 定义点结构体float x, y;} Point;// 定义回调函数指针类型// 示例函数,接受点和回调函数// 回调实现// 调用 drawPoint 函数return 0;在这个例子中,typedef用于定义了一个Point结构体和一个函数指针类型。这使得函数drawPoint的声明更加清晰,同时也方便了函数指针printPoint。原创 2024-01-07 15:14:09 · 980 阅读 · 0 评论 -
C++语法中宏的用法汇总和代码实战
宏可以用来定义常量。这种用法的一个缺点是它不提供类型安全。#define PI3.14159100宏和函数在 C++ 中服务于不同的目的。宏主要用于编译时的简单文本替换,而函数则提供了更强大的特性,如类型安全、封装和易于维护。正确地选择使用宏或函数对于写出高质量的 C++ 代码至关重要。原创 2024-01-07 15:06:54 · 1179 阅读 · 0 评论 -
std::unique_lock 是 C++ 标准库中的一个实用工具,用于提供对互斥体(mutex)的灵活控制。与 std::lock_guard 相比,std::unique_lock 提供了更多
提供了更多的功能,如可以在某个时间点解锁互斥体,可以延迟锁定,以及可以移动锁等。是 C++ 标准库中的一个实用工具,用于提供对互斥体(mutex)的灵活控制。不要立即锁定互斥体。这样,你就可以控制何时锁定和解锁互斥体。由于其灵活性,在需要对锁的控制更为精细的场景中非常有用。被销毁(例如,当离开作用域时)时,它会自动释放锁。通常与条件变量一起使用,因为它可以在条件变量的。一起使用,以等待某个条件变为真。允许延迟锁定互斥体,这意味着可以在声明。对象被创建时,它会自动锁定。会被自动解锁,并在条件满足、原创 2024-01-13 16:26:26 · 525 阅读 · 0 评论 -
std::vector 常用用法汇总和代码用例
代码首先展示了如何添加、访问和删除元素,然后展示了如何遍历。最后,代码展示了如何使用。方法访问最后一个元素,并如何使用。在这段代码中,我演示了。,包括使用范围基于的。时会经常遇到的操作。原创 2024-01-11 16:06:12 · 1760 阅读 · 0 评论 -
C++中的三元运算符(也称为条件运算符)是一种简洁的语法,用于基于一个布尔条件表达式选择两个值中的一个。
C++中的三元运算符(也称为条件运算符)是一种简洁的语法,用于基于一个布尔条件表达式选择两个值中的一个。假设您有一个程序,需要根据用户的年龄决定他们是否成年。在这个例子中,使用了嵌套的三元运算符来选择适当的等级。为真(即非零),表达式的结果是。大于等于 80 但小于 90,原创 2024-01-17 16:14:00 · 583 阅读 · 0 评论 -
C++标准模板库(Standard Template Library, STL)中容器类的成员函数resize()用法汇总
等)和一些其他类型的容器,其用法和目的是为了确保容器具有适当的大小来存储元素。下面是一些常见容器和。是处理动态数组和其他序列容器时非常有用的工具,它提供了灵活的方式来管理容器的大小和内容。这个函数主要关联于序列容器(如。原创 2024-02-23 09:52:24 · 532 阅读 · 0 评论 -
如何理解链接(Linking)这一编译过程中的步骤
静态链接是在链接阶段将所有必需的库函数的代码直接拷贝到最终的可执行文件中。这意味着程序在运行时不需要外部的库文件,因为所有必需的代码都已经包含在内。原创 2024-01-07 10:45:52 · 474 阅读 · 0 评论 -
git stash 是一个在Git中用于保存当前工作目录和暂存区的临时状态的命令
但是,您的工作目录中有一些未提交的修改,而您不想将这些修改直接提交到当前分支。,您可以在不提交未完成的工作的情况下切换分支,然后在需要的时候再回到原分支并继续工作。这样可以避免创建不完整或不稳定的提交,并确保您的分支历史保持整洁。这个命令将当前的工作目录和暂存区的状态保存为一个临时的储藏项,并将工作目录和暂存区恢复到干净的状态,以便您可以切换到其他分支。主要用于保存未提交的工作,而不是提交的工作。在需要的时候,您可以重新应用之前储藏的变更到当前分支。您已经成功修复了紧急的bug,并切回到了原来的分支。原创 2024-03-05 10:49:07 · 644 阅读 · 0 评论 -
解决git文件中没有代码改动但是显示一大堆改动
文件用于配置 Git 仓库的行为。原创 2024-01-19 09:35:26 · 2810 阅读 · 0 评论 -
如何将 Git 的默认编辑器从nano迷你编辑器更改为vi 的升级版vim编辑器
通过这样的配置更改,您可以使用 Vim 的强大功能来编辑 Git 提交信息和进行其他文本编辑操作,这对于习惯使用 Vim 的用户来说更为方便。这个命令用于在基于 Debian 的系统(如 Ubuntu)上安装 Vim 编辑器。如果 Vim 尚未安装,此命令会从软件仓库下载并安装它。这个设置会告诉 Git 对于所有需要文本编辑的操作(如提交信息编写、交互式变基等)使用 Vim 编辑器。您提供的这个命令是用 Visual Studio Code 编辑器打开当前 Git 仓库的配置文件。原创 2024-01-29 14:56:23 · 1425 阅读 · 0 评论 -
C++中的lambda表达式用法
通过上面的例子,你可以看到lambda表达式是如何提供一个简洁、灵活的方式来定义匿名函数的。它们可以让你现场定义函数功能,无需事先声明一个完整的函数,特别适合用作回调函数或在算法中直接定义操作逻辑。原创 2024-02-20 17:15:10 · 479 阅读 · 0 评论 -
C++中的迭代器是一种访问容器(如数组、向量、列表等)中元素的对象,类似于指针。
迭代器提供了一种通用的、容器无关的访问容器元素的方法,使得无需知道容器的内部结构就可以遍历容器。在使用迭代器遍历容器的同时删除元素时,需要特别注意保持迭代器的有效性。由于删除元素会使指向被删除元素的迭代器及其之后元素的迭代器失效,正确的做法是使用。这是安全删除容器中元素的关键,避免了迭代器失效导致的未定义行为。迭代器是C++ STL的核心概念之一,熟练掌握迭代器的使用对于高效地使用C++ STL容器至关重要。和其他容器,这种删除元素的模式是类似的,但是要记住,不同类型的容器在删除元素时性能表现不同。原创 2024-02-21 10:52:16 · 748 阅读 · 0 评论 -
C/C++ 中的预处理器提供了多种预处理指令,用于在编译之前对源代码进行处理。
作用:定义宏,它们是预处理器的简单替换。指令#define:定义宏。#undef:取消宏定义。示例(a) : (b))作用:检查一个宏是否被定义。操作:通常与#if或#elif指令结合使用。示例预处理指令是 C/C++ 编程中一个强大的工具,允许程序员在编译之前对源代码进行条件编译、宏替换、文件包含等操作。这些指令在提高代码的可配置性、平台适应性和可重用性方面发挥着重要作用。原创 2024-01-07 12:13:07 · 746 阅读 · 1 评论 -
C++ 程序在当前执行目录下创建一个以数字命名的子目录
这个程序可以用于在特定父目录下创建一系列数字命名的子目录,例如用于保存不同的输出文件或数据。在这个例子中,由于父目录被设置为当前执行程序的目录,因此程序将在其被运行的同一位置创建新目录。函数创建新目录,设置权限为 0777(即对所有用户开放的读、写和执行权限)。如果创建成功,程序打印出目录已创建的消息;的函数,该函数接受一个路径字符串作为参数,并使用。:如果新目录已经存在,程序将打印一条消息说明这一点。函数中,程序设定父目录路径为当前执行程序的目录(:接着,程序构建了新目录的路径,这是通过将。原创 2024-01-26 10:38:43 · 426 阅读 · 0 评论 -
CMake管理构建C++代码的一般过程
CMake是一个跨平台的构建系统,用于管理软件构建过程,特别是在复杂项目中,它可以简化和标准化构建过程。以下是CMake管理构建C++代码的一般过程:在CMakeLists.txt中,你可以:指定CMake的最低版本:定义项目名称:设置C++标准:添加可执行文件和源文件:添加库文件:如果项目中有库文件,可以使用指令,并使用将库链接到可执行文件。包含子目录:对于大型项目,可以将源代码分散在多个子目录中,并在每个子目录中创建自己的CMakeLists.txt文件。使用指令来包含这些子原创 2024-01-07 10:19:54 · 603 阅读 · 0 评论