【0.66oled源码】【网站源码简单认识】【个人网页制作源码】hpp源码

时间:2024-12-22 19:03:56 分类:apicoud 商城源码 来源:币库源码

1.hdl_graph_slam|后端优化|hdl_graph_slam_nodelet.cpp|源码解读(四)
2.Cpp项目文件结构及使用CMake构建Build过程解析

hpp源码

hdl_graph_slam|后端优化|hdl_graph_slam_nodelet.cpp|源码解读(四)

       hdl_graph_slam源码解读(八):后端优化

       后端概率图构建核心:hdl_graph_slam_nodelet.cpp

       整体介绍

       这是整个系统建图的核心,综合所有信息进行优化。所有的信息都会发送到这个节点并加入概率图中。

       包含信息

       1)前端里程计传入的位姿和点云

       2)gps信息

       3)Imu信息

       4)平面拟合的参数信息

       处理信息步骤

       1)在对应的callback函数中接收信息,并放入相应的队列

       2)根据时间戳对队列中的信息进行顺序处理,加入概率图

       其他内容

       1)执行图优化,0.66oled源码这是一个定时执行的函数,闭环检测也在这个函数里

       2)生成全局地图并定时发送,即把所有关键帧拼一起,得到全局点云地图,然后在一个定时函数里发送到rviz上去

       3)在rviz中显示顶点和边,如果运行程序,会看到rviz中把概率图可视化了

       关键帧同步与优化

       cloud_callback

       cloud_callback(const nav_msgs::OdometryConstPtr& odom_msg,const sensor_msgs::PointCloud2::ConstPtr& cloud_msg)

       该函数主要是odom信息与cloud信息的同步,同步之后检查关键帧是否更新。

       关键帧判断:这里主要看关键帧设置的网站源码简单认识这两个阈值keyframe_delta_trans、keyframe_delta_angle

       变成关键帧的要求就是:/hdl_graph_slam/include/hdl_graph_slam/keyframe_updater.hpp

       优化函数

       optimization_timer_callback(const ros::TimerEvent& event)

       函数功能:将所有的位姿放在posegraph中开始优化

       loop detection 函数:主要就是将当前帧和历史帧遍历,寻找loop。

       闭环匹配与信息矩阵计算

       匹配与闭环检测

       潜在闭环完成匹配(matching 函数)

       不同loop的信息矩阵计算(hdl_graph_slam/information_matrix_calculator.cpp)

       gps对应的信息矩阵

       hdl_graph_slam/graph_slam.cpp

       添加地面约束

       使用add_se3_plane_edge函数的代码

       执行图优化

       优化函数optimization_timer_callback

       执行图优化,闭环检测检测闭环并加到了概率图中,优化前

       生成简化版关键帧,KeyFrameSnapshot用于地图拼接

       生成地图并定时发送

       生成地图:简化版关键帧拼接

       定时发送:src/hdl_graph_slam_nodelet.cpp文件中

       系统性能与扩展性

       hdl_graph_slam性能问题在于帧间匹配和闭环检测精度不足,系统代码设计好,个人网页制作源码模块化强,易于扩展多传感器数据融合。

       总结

       hdl_graph_slam后端优化是关键,涉及大量信息融合与概率图构建。系统设计清晰,扩展性强,但在性能上需改进。c 源码游戏下载

Cpp项目文件结构及使用CMake构建Build过程解析

       本文将介绍常见的cpp项目文件结构,并展示使用Cmake进行构建的全过程。

       当cpp项目规模逐渐变大时,单一目录下存放所有文件必然显得杂乱难以管理。这些文件通常会包括如项目源代码(.cpp, .hpp), 第三方库(.h, .hpp, 动态链接库等),文档,以及各种中间文件。小程序源码demo较为常见的一种文件组织方式如下:

       其中src为项目主要代码所在文件夹,可以下属包含module 1, 2, 等各个子模块。

       根据StackOverflow stackoverflow.com/quest...上的建议,尽量将源代码的.cpp 和 .hpp .h 放在一起,而不要单独设置一个include文件夹存放头文件。 另外,若无必要,尽可能避免使用include文件夹存放公共的头文件,如公用的数学库等。

       关于源文件的命名,可以采用项目名后加功能名的方式,例如

       这就是我们项目的主程序。

       使用CMake的关键步骤是编写CMakeLists.txt。一个最基本的能用来build的CMakeLists.txt需要有以下内容:

       这里为了设置g++编译器,我们使用了set(CMAKE_C_COMPILER, ) 和 set(CMAKE_CXX_COMPILER, ) 。这两行必须在project命令前。在set(EXECUTABLE_OUTPUT_PATH "${ PROJECT_SOURCE_DIR}/bin")中,设置最终生成的可执行文件在/bin目录。CMake保留了几个全局变量,如:${ PROJECT_SOURCE_DIR} 即为当前.txt文件所在的目录,一般为项目主目录。

       参数及路径可以使用“”双引号也可以不使用,后者若有空格则会被识别成多个参数。

       此时,完整的项目结构应该如下:

       其中 ../ 为读取上一个目录的CMakeLists,-G选项为指定Generator。此时在build文件夹出现生成的项目

       生成的项目内容取决于使用何种生成器。若使用Visual Studio则会生成.sln等文件。

       构建命令为在当前目录(build/) 对目标进行构建。最终生成的可执行文件会出现在bin/目录:

       运行MyStep.exe

       运行成功就可以得到 Hello cpp的输出。

       至此一个最小cpp项目构建完毕!之后的笔记会进一步加入