1.Cartographer源码详解|(2)Cartographer_ros
2.ROS2测试源码编译安装cartographer
3.cartographer_ros定位功能位姿获取与重定位设置
4.Cartographer ROS编译安装及相关可执行文件理解
5.因子图优化 SLAM 研究方向归纳
6.ROS2机器人入门到实战Cartographer介绍与安装
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的源码流向,接下来让我们继续探讨传感器格式的逻辑转换与类型变换。这部分内容在sensor_bridge.cc文件中。源码在处理传感器的逻辑坐标变换时,我们需要运用三维空间刚体运动的源码知识,先进行简要回顾,逻辑网页源码怎么扒以助于理解代码。源码
三维空间刚体运动涉及向量内积与外积。逻辑向量内积的源码计算公式如下,表示两个向量的逻辑点乘。向量外积则是源码一个向量,其方向垂直于两个向量,逻辑大小为两向量张成四边形的源码有向面积,计算公式如下。逻辑
旋转和平移是源码欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,c语言 atoi源码便于后续计算。
Cartographer的坐标转换程序位于transform文件夹下的rigid_transform中,用于求解变换矩阵的逆。
在sensor_bridge类中,构造函数将传入配置参数,对里程计数据进行处理。首先将ros时间转换为ICU时间,然后利用tf_bridge_.LookupToTracking函数找到tracking坐标系与里程计child_frame_id之间的坐标变换。在ToOdometryData函数中,将里程计的footprint的pose转换为tracking_frame的pose,并最终将结果转换为carto::sensor::OdometryData的数据类型。
HandleOdometryMessage函数将传感器数据类型与坐标系转换完成后,调用trajectory_builder_->AddSensorData进行数据处理。对于雷达数据,首先转换为点云格式,然后对点云进行坐标变换,并调用trajectory_builder_->AddSensorData进行数据处理。
IMU数据处理中,要求平移分量小于1e-5,然后调用trajectory_builder_->AddSensorData对数据进行处理。
在雷达数据处理部分,首先将点云数据分段,然后传给HandleRangefinder处理,将点云坐标变换到tracking_frame坐标系下,调用trajectory_builder_->AddSensorData函数进行数据处理。
总结本章内容,q吧源码网我们详细解析了SensorBridge类,对传感器数据进行了转换和传输。通过Node类、MapBuilderBridge类和SensorBridge类,我们对Cartographer_ros部分的代码有了基本了解。接下来,我们将深入学习cartographer。
ROS2测试源码编译安装cartographer
Cartographer是一个跨平台、传感器配置提供实时同步定位和绘图(SLAM)的系统,具有回环检测优势,资源占用适中。
选择源码编译安装方式,以适应后期项目修改和移植需求。首先,使用Ubuntu虚拟机测试验证。
若国内访问github受限,可选择Gitee上的备份仓库进行下载。尝试多个版本,确认在Ubuntu humble版本下能够成功下载和安装。
在安装过程中,需要下载依赖项。在Ubuntu上,首先安装libabsl-dev、libceres-dev以及liblua5.3-dev等包。对于ceres-solver,需确保CUDA、微洗车2.2 源码显卡加速和TBB指令集优化选项已配置。
在开发板上,通过源码编译安装三方依赖。确保所有依赖包均正确安装,包括protobuf版本为v3.4.1分支。
完成所有依赖安装后,开始编译Cartographer源码。首先下载官方数据集,注意ROS2格式的rosbag转换,使用rosbags工具进行转换。
介绍ROSbag格式,ROS1的.rosbag文件为二进制存储格式,而ROS2使用SQLite数据库格式,支持跨平台和扩展性。两种格式转换方法,推荐使用rosbags工具,无需依赖ROS环境。
测试Cartographer时,使用ros2命令启动示例launch文件,输入特定的bag文件名以加载数据集。测试3D数据集时,使用相应的launch文件和bag文件名。
资源占用情况分析将后续进行。
cartographer_ros定位功能位姿获取与重定位设置
小白在机器人定位项目中使用cartographer进行定位,面临位姿获取频率低的问题,测试显示激光频率~hz时,手机app免费源码获取位姿频率仅为5hz。为解决此问题,尝试了以下方法:
首先,对cartographer进行源码安装。
接着,运行cartographer_rosd的demo,参考.launch运行文件和.lua配置文件,并开启pure localization功能。
尝试通过tf变换获取位姿坐标,但发现频率受限于5hz左右。为解决此问题,建立tf变换节点,发布2D位姿topic,实现高频率的位姿获取。
深入源码修改,添加::ros::Publisher _pose_pub,对 node.cc进行调整,从而获取高频率的位姿topic。
在rviz中,利用“2D Pose Estimate”功能,发布/initialpose话题,并根据机器人当前位置进行重定位设置。通过点击地图位置,发布包括x,y和theta的topic进行重定位。
总结流程,通过源码修改和rviz重定位设置,实现了高频率的位姿获取及重定位功能。若有疑问,欢迎交流,共同学习。
Cartographer ROS编译安装及相关可执行文件理解
一、编译安装Cartographer ROS
为了安装 Cartographer ROS,首先需要确保ROS版本为kinetic,操作系统为Ubuntu.,并创建一个名为catkin_ws的工作空间。
安装所需的工具和依赖项,包括wstool、rosdep、ninja。然后,通过catkin_make工具构建并安装cartographer_ros。
加载数据包进行测试,运行launch和rosbag,最终可以生成slam图。
二、编译方法
编译Cartographer ROS时,使用catkin_make命令,这简化了catkin的标准工作流程,依次调用cmake、make和make install。
编译后的工作空间内将有src、build_isolated、devel_isolated、install_isolated等文件夹,分别用于源代码、孤立编译、开发和安装。
三、install_isolated内可执行文件
在install_isolated文件夹内,有多种可执行文件,如cartographer_assets_writer、cartographer_autogenerate_ground_truth、cartographer_compute_relations_metrics、cartographer_dev_rosbag_publisher等。
cartographer_assets_writer用于保存和使用有效资源;cartographer_autogenerate_ground_truth自动生成期望的真实输出;cartographer_compute_relations_metrics计算相关指标。
cartographer_dev_rosbag_publisher发布rosbag信息,用于数据收集与分析;cartographer_dev_trajectory_comparison进行轨迹比较;cartographer_migrate_serialization_format迁移序列化格式。
cartographer_node为ROS中的核心节点,负责实时SLAM;cartographer_occupancy_grid_node构建并发布ROS的occupancy_grid地图;cartographer_offline_node进行离线SLAM。
cartographer_pbstream_map_publisher创建静态占据栅格;cartographer_pbstream_to_ros_map将pbstream格式转换为标准ROS格式地图;cartographer_rosbag_validate验证rosbag数据。
cartographer_start_trajectory用于在本地化模式中设置起始位姿。
通过这些工具和节点,Cartographer ROS提供了一个全面的SLAM解决方案,包括数据收集、处理、验证和应用。
因子图优化 SLAM 研究方向归纳
因子图优化在SLAM研究中扮演着关键角色,但选择正确的路径至关重要。经过作者近半年的探索,我们看到了他的摸索历程和教训。以下是关键点的归纳:错误的学习路径
作者起初被cartographer论文引入,尝试了平方根SAM和isam2,以及GTSAM框架,但陷入论文、教材与框架的循环,未能深入理解。错误的方法包括直接阅读源代码、依赖可视化教程而非底层原理,以及频繁切换学习材料。正确的入门路径
建议从实际应用GTSAM库开始,通过理解isam1中的因子图构建,尤其是用Matlab实现基础概念。重点在于掌握因子图的基本思想和增量优化,包括QR分解和Givens旋转。之后理解因子图转贝叶斯网的过程,并研究Bayes tree的构建和更新。研究方向与挖掘点
- 算法改进:isam1的优化策略、isam2的树转换简化,以及贝叶斯树的深度调整。
- 新应用:如LOAM的增量优化应用,可以寻找新的机器人应用场景,比如高精度实时地图需求。
避开的陷阱
- 避免陷入代码细节,保持理论核心,注意GTSAM的工程性质。
- 不要一开始就追求贝叶斯树,关键在于因子图和信息矩阵的增量优化。
作者的困惑
- 寻找实时全局优化的平衡,以及技术应用与现实需求的结合。
总的来说,因子图优化的研究方向包括算法优化和新应用的探索,同时需要明确定位,避免陷入细节,保持理论与实践的结合。希望这些建议能帮助后来者避免作者的弯路,找到自己的研究方向。
ROS2机器人入门到实战Cartographer介绍与安装
Cartographer是Google开源的实时SLAM系统,适用于2D和3D环境。在机器人领域,因其优越性被广泛采用。该系统具有多种输入选项,如深度信息、里程计信息、IMU数据等。对于有兴趣深入研究SLAM的人来说,理解其系统架构很有帮助。
安装Cartographer有两种方式:一种是通过apt安装,另一种是源码安装。小鱼推荐使用源码安装,以便于学习。首先,将源码克隆到工作空间的src目录下。接着,使用rosdepc或一键安装命令来安装依赖。之后,通过特定命令进行编译。最后,通过指令检查安装是否成功。
Cartographer提供了丰富的配置选项,包括前端和后端参数。前端参数用于轨迹构建,主要在trajectory_builder_2d.lua文件中设定。后端参数则在pose_graph.lua文件中管理地图构建过程。此外,还需要配置与ROS2的通信参数,如从哪些话题读取数据,这些参数在backpack_2d.lua文件中设定。
总结来说,通过上述步骤可以成功安装和配置Cartographer,为机器人建图工作奠定基础。接下来,将为fishbot配置Cartographer,并使用fishbot进行建图实践。希望以上内容能帮助您更好地理解并应用Cartographer。