1.OpenSfM的快速编译说明及0.5.1源码含子模块库提供
2.ROS2测试源码编译安装cartographer
3.ubuntu18.04 OAK-D kalibr 双目+imu联合标定
4.ubuntuä¸G2Oåºçå®è£
5.非线性优化(三):g2o源代码
OpenSfM的快速编译说明及0.5.1源码含子模块库提供
为了快速编译 OpenSfM 并获取其 0.5.1 版本的源码,首先,确保在 Windows 平台上能顺利安装所需的依赖和进行编译,因为针对其他版本的操作系统,可能存在安装依赖和编译过程中的问题。
接下来,聚类算法 python源码下载 OpenSfM 源码库,如果已有库,只需在根目录下执行相关命令下载子模块库,总大小预计为 MB。
对于 Windows 用户,通过 vcpkg 库快速编译所需库,需将 vcpkg 库安装至 OpenSfM 根目录下。在安装过程中,使用 vcpkg 安装对应依赖,以 x-windows 架构为例。如果网络存在障碍,可直接下载预编译的 vcpkg 包。完成 vcpkg 安装后,安装特定的 pip 依赖。
针对 MacOS 用户,需安装 OpenCV、Ceres solver、HYBBS仿阁楼源码libomp,可通过 brew 指令进行安装。确保 pip 安装时,PYTHONPATH 环境变量包含 python3.7 的包路径:/usr/local/lib/python3.7/site-packages,并设置相关环境变量以确保其他 brew 安装的第三方库被 CMake 正确识别。最后,安装对应的 python 依赖库。
一旦所有依赖安装完成,用户可切换至主目录并执行编译应用指令。
如需构建 SfM 最新文档,执行相应指令后,通过浏览器访问 localhost:/ 即可查看最新文档。
参考主要教程以确保过程顺利进行。
ROS2测试源码编译安装cartographer
Cartographer是一个跨平台、传感器配置提供实时同步定位和绘图(SLAM)的系统,具有回环检测优势,资源占用适中。
选择源码编译安装方式,以适应后期项目修改和移植需求。首先,使用Ubuntu虚拟机测试验证。
若国内访问github受限,转子初始位置 源码可选择Gitee上的备份仓库进行下载。尝试多个版本,确认在Ubuntu humble版本下能够成功下载和安装。
在安装过程中,需要下载依赖项。在Ubuntu上,首先安装libabsl-dev、libceres-dev以及liblua5.3-dev等包。对于ceres-solver,需确保CUDA、显卡加速和TBB指令集优化选项已配置。
在开发板上,通过源码编译安装三方依赖。确保所有依赖包均正确安装,包括protobuf版本为v3.4.1分支。
完成所有依赖安装后,开始编译Cartographer源码。首先下载官方数据集,注意ROS2格式的rosbag转换,使用rosbags工具进行转换。
介绍ROSbag格式,ROS1的社保小程序源码.rosbag文件为二进制存储格式,而ROS2使用SQLite数据库格式,支持跨平台和扩展性。两种格式转换方法,推荐使用rosbags工具,无需依赖ROS环境。
测试Cartographer时,使用ros2命令启动示例launch文件,输入特定的bag文件名以加载数据集。测试3D数据集时,使用相应的launch文件和bag文件名。
资源占用情况分析将后续进行。
ubuntu. OAK-D kalibr 双目+imu联合标定
将OAK相机接入ROS系统,进行SLAM定位建图导航等算法时,确保双目相机与IMU的标定参数准确,对于提升定位建图的精度和算法的鲁棒性至关重要。原厂提供的OAK相机仅包含双目的标定数据,因此,本教程使用第三方标定工具Kalibr,在ROS系统中完成双目标定、IMU标定以及IMU+双目的联合标定,以满足算法需求。
在执行标定过程前,菲洛嘉银色源码首先确保已安装ROS melodic和depthai_ros环境,参考教程链接进行安装配置。接着,利用源码地址克隆Kalibr,使用catkin_make命令编译相关依赖,如Ceres Solver和code_utils,并根据教程调整code_utils文件中的代码引用。
标定过程中,需采集数据,具体分为双目、IMU以及双目+IMU三个部分。双目数据需在白色背景下录制,确保场景清晰。IMU数据录制时,保持相机静止状态,并确保时间超过2个小时。双目+IMU数据采集时,使用特定的配置文件路径进行标定,输出cam_chain.yaml、imu_param.yaml文件,以及生成camchain-imucam.yaml结果文件。
通过Kalibr工具,完成双目和IMU的单独标定及联合标定,输出关键参数文件。完成整个标定流程后,可参阅OAK中国官网获取最新教程和更新信息。如有技术咨询或项目合作需求,请通过指定链接与OAK官方联系,加入OAK官方微信群,获取最新资讯和社区支持。
感谢您对OAK中国和Kalibr标定工具的关注与支持,如您喜欢本教程,欢迎分享或点赞,您的鼓励是我们持续改进的动力。
ubuntuä¸G2Oåºçå®è£
ä¸ãä»ä¹æ¯G2Oåºï¼æä»ä¹ç¨ï¼
g2o æ¯ä¸ä¸ªå¾ä¼ååºã常常å¨SLAM ä¸è¢«ä½¿ç¨ã
å¾ä¼åæ¬è´¨ä¸ä»ç¶æ¯é线æ§ä¼åãåªä¸è¿å©ç¨å¾çæ¹å¼è¡¨ç°åºæ¥ï¼ä½¿é®é¢ å¯è§å ï¼ç¶åå¯ä»¥æ ¹æ®å¯è§åçç»ææ¥æ´å¥½çè°æ´ä¼åè¿ç¨ã
å¾ æ¯ä¸ç§æ°æ®ç»æãå¨å¾ä¼åä¸ï¼ç¨ é¡¶ç¹ (vertex) 表示 ä¼ååé ï¼ç¨ è¾¹ (edge) 表示 误差项 ãäºæ¯ï¼å¯¹äºä»»æä¸ä¸ªä¸è¿°å½¢å¼çé线æ§æå°äºä¹é®é¢ï¼é½å¯ä»¥æ建ä¸ä¸ªä¸ä¹å¯¹åºçå¾ã
å¨è§è§SLAM åå讲ä¸ï¼å¸¸ç¨çå端ä¼ååºæ两个ï¼g2o åceresãceres æ¯google çä¸ä¸ªä¼ååºï¼æ档详尽ä¸å好ï¼å°±ä¸åèµè¿°äºãä½å¯¹äºg2oï¼é¤äºæºç ï¼å®æ¹ç¨doxygen çæç帮å©ææ¡£ï¼å°±åªæ论æ g2o: A general framework for graph optimization åè¿ç¯github ç ææ¡£ ã
äºãå¦ä½å®è£ G2Oåºï¼æåªäºä¾èµé¡¹ï¼å¨å®è£ å使ç¨çè¿ç¨ä¸ï¼ä¼éå°åªäºé®é¢ï¼ä»¥åå¦ä½è§£å³ï¼
1å®è£ æ¥éª¤
git clone .archive.ubuntu.com/ubuntu bionic/universe amd freeglut3 amd 2.8.1-3
connetciton failed [IP:... ]
Err:2 .archive.ubuntu.com/ubuntu bionic/universe amd freeglut3-dev amd 2.8.1-3
connetciton failed [IP:... ]
E:Failed to fetch .archive.ubuntu.com/ubuntu/pool/universe/f/freeglut/freeglut3_2.8.1-3_amd.deb connection failed [IP:... ]
E:Failed to fetch .archive.ubuntu.com/ubuntu/pool/universe/f/freeglut/freeglut3-dev_2.8.1-3_amd.deb connection failed [IP:... ]
E:Unable to fetch some archives, maybe run apt-get install libglut-dev
æç» è§£å³æ¹æ¡ ï¼ æ´æ¢ sources.list é¿éæº æ¸ åéåã
apt-get update
apt-get upgrade
3å¨ä½¿ç¨g2oæ¶ï¼ç¼è¯ç¨å°äºg2oåºçprojectï¼éå°æ¥éerror: âindex_sequenceâ is not a member of 'std'
解å³æ¹æ¡ ï¼ä¿®æ¹projectçCMakeLists.txtæ·»å :set(CMAKE_CXX_STANDARD )
åèé¾æ¥ï¼
Ubuntu. æ´æ¢ sources.list é¿éæº æ¸ åéå â å°åºä»¶ (atmcu.com)
(æ¡æ¶æ¯) è§è§SLAMåå讲 æ¥é error: âindex_sequenceâ is not a member of âstdâ_CSSDCCçå客-CSDNå客
(æ¡æ¶æ¯) è§è§SLAMåå讲 æ¥é error: âindex_sequenceâ is not a member of âstdâ_CSSDCCçå客-CSDNå客
非线性优化(三):g2o源代码
新年伊始,让我们探讨一下g2o(通用图优化)在SLAM(Simultaneous Localization and Mapping)中的后端优化库应用。在《十四讲》中,我们对g2o有了初步的了解,并总结了其在SLAM中的使用情况。与ceres相比,g2o的文档较为简略,主要依赖于两篇论文进行参考。本文将深入探讨g2o的源代码,特别是核心文件夹中的部分,以揭示这个在SLAM领域广为人知的后端优化库的内在机理。
首先,让我们通过一张类关系图来直观理解g2o的架构。整个g2o系统分为三层:HyperGraph、OptimizableGraph、以及SparseOptimizer。HyperGraph作为最高层,提供了一个高度抽象的框架,其内部通过内类的方式实现了Vertex和Edge的结构。Vertex和Edge相互关联,Vertex存储与节点相关联的边的集合,而Edge则记录了与之链接的节点信息。HyperGraph提供了基本的节点和边的操作,如获取、设置等,同时也包含了更复杂的功能,如节点和边的合并、删除等。
OptimizableGraph继承自HyperGraph,进一步丰富了Vertex和Edge的实现,为图优化提供了更具体的接口。OptimizableGraph引入了海塞矩阵和b向量的概念,以及与之相关的操作,如获取海塞矩阵元素、设置参数位置等。此外,它还支持通过栈操作(pop、push)来管理节点信息。
在OptimizableGraph之上,SparseOptimizer作为优化操作的对象,实现了优化的接口,并提供了初始化、辅助函数以及优化的核心函数。SparseOptimizer通过内部类实现了Vertex和Edge的实例化,为具体的优化算法提供了操作图的接口。
在实现细节方面,BaseVertex和BaseEdge类继承了OptimizableGraph中的相应类,实现了节点和边的基本功能。BaseVertex类负责记录节点的海塞矩阵、b向量和估计值,并提供了数值求导的备份和恢复功能。BaseEdge类则负责处理测量信息和信息矩阵的计算,包括计算误差、构造二次形式等。此外,不同类型的边(BaseUnaryEdge、BaseBinaryEdge、BaseMultiEdge)通过继承BaseEdge类,实现了不同链接节点数量的边的特殊操作。
鲁棒核函数的实现是g2o优化框架中一个关键部分,它在处理非线性优化问题时提供了鲁棒性,确保了优化过程的稳定性。g2o通过RobustKernel虚基类提供了设置和获取核函数参数的接口,并在具体实现中使用了简化版本的计算公式,以保证信息矩阵的正定性。
最后,OptimizationAlgorithm类定义了优化器的一系列接口,如初始化、计算边际值和求解等。g2o的优化算法包括GN、LM和dog-leg,它们分别实现了不同的求解策略,而具体的矩阵求解任务则通过Solver类及其派生类(如BlockSolver)完成。BlockSolver类提供了一个通用框架,允许用户自定义线性求解器,如直接求解、迭代求解等。
综上所述,g2o通过层次化的类结构,提供了从抽象到具体、从基础到进阶的图优化解决方案,其设计旨在高效、鲁棒地解决SLAM中的后端优化问题。深入理解g2o的源代码,对于开发者和研究者来说,不仅能够提高优化算法的实现效率,还能深刻理解SLAM系统中的优化机制。