1.cartographer_ros定位功能位姿获取与重定位设置
2.因子图优化 SLAM 研究方向归纳
3.ROS2测试源码编译安装cartographer
4.Cartographer ROS编译安装及相关可执行文件理解
5.PX4 视觉定位设置及多种定位数据获取方法(T265为例)
6.Cartographer源码详解|(2)Cartographer_ros
cartographer_ros定位功能位姿获取与重定位设置
小白在机器人定位项目中使用cartographer进行定位,源码面临位姿获取频率低的安装问题,测试显示激光频率~hz时,源码获取位姿频率仅为5hz。安装为解决此问题,源码尝试了以下方法:
首先,安装ds文库源码下载对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重定位设置,实现了高频率的位姿获取及重定位功能。若有疑问,欢迎交流,共同学习。
因子图优化 SLAM 研究方向归纳
因子图优化在SLAM研究中扮演着关键角色,但选择正确的路径至关重要。经过作者近半年的探索,我们看到了他的摸索历程和教训。以下是关键点的归纳:错误的学习路径
作者起初被cartographer论文引入,尝试了平方根SAM和isam2,以及GTSAM框架,但陷入论文、教材与框架的循环,未能深入理解。错误的方法包括直接阅读源代码、依赖可视化教程而非底层原理,以及频繁切换学习材料。正确的入门路径
建议从实际应用GTSAM库开始,通过理解isam1中的因子图构建,尤其是用Matlab实现基础概念。重点在于掌握因子图的基本思想和增量优化,包括QR分解和Givens旋转。之后理解因子图转贝叶斯网的过程,并研究Bayes tree的紫奕邮箱源码构建和更新。研究方向与挖掘点
- 算法改进:isam1的优化策略、isam2的树转换简化,以及贝叶斯树的深度调整。
- 新应用:如LOAM的增量优化应用,可以寻找新的机器人应用场景,比如高精度实时地图需求。
避开的陷阱
- 避免陷入代码细节,保持理论核心,注意GTSAM的工程性质。
- 不要一开始就追求贝叶斯树,关键在于因子图和信息矩阵的增量优化。
作者的困惑
- 寻找实时全局优化的平衡,以及技术应用与现实需求的结合。
总的来说,因子图优化的研究方向包括算法优化和新应用的探索,同时需要明确定位,避免陷入细节,保持理论与实践的结合。希望这些建议能帮助后来者避免作者的弯路,找到自己的研究方向。
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文件名。
资源占用情况分析将后续进行。
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解决方案,包括数据收集、处理、验证和应用。
PX4 视觉定位设置及多种定位数据获取方法(T为例)
本文详细介绍了将视觉定位数据传递给PX4飞控的方法,并以T为例演示了视觉定位的相关设置及效果。主要有三种方法:通过向指定的mavros话题发送定位数据;将定位数据发布为tf变换,使px4订阅该tf变换;以及修改px4_config.yaml文件,将listen设置为true。T是四旋翼视觉定位常用的定位方案,然而关于其原理的讲解较少。本文包括详细的视频讲解,总计时长超过分钟。通过本文,读者可以轻松学习如何将T应用在PX4实机上。
目前已知的将视觉定位数据传递给PX4飞控的方法包括:通过向“/mavros/odometry/out”话题发送T数据;通过向“/mavros/vision_pose/pose”话题发送数据;以及修改px4_config.yaml文件,将listen设置为true,以实现tf变换的订阅。其中,修改px4_config.yaml文件的方法会导致通过topic发送定位数据的两种方法失效,而frame_id和child_frame_id之间的tf变换即为定位数据。对于cartographer而言,通过修改frame_id就可以将cartgrapher发布的tf定位数据传输给PX4飞控。
在使用EKF2进行融合定位时,需要设置相关的参数。常用的参数包括EKF2_AID_MASK的数值设置,以及EKF2_EV_DELAY参数的设置,后者对高度估计和转向的影响尤为重要(当前为作者的个人猜测)。参数设置完成后,系统需要重启才能生效。
在使用Realsense驱动时,可能遇到的疑难杂症包括:AGX Orin配置时的问题,T插着开机需要插拔,电脑无法检测T,以及Dxx相机深度点云频率低等。关于Realsense驱动的安装步骤,以Ubuntu.为例,通常有两种方式:源码安装或二进制包安装。在具体的系统环境下,读者应根据实际情况选择合适的安装方式。
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,便于后续计算。
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函数进行数据处理。
总结本章内容,我们详细解析了SensorBridge类,对传感器数据进行了转换和传输。通过Node类、MapBuilderBridge类和SensorBridge类,我们对Cartographer_ros部分的代码有了基本了解。接下来,我们将深入学习cartographer。