cartographer 点云数据的预处理

目录

传感器数据的走向

体素滤波与之后的处理

3D情况下的激光雷达数据的预处理

初始位姿估计

位姿推测器的优缺点分析与总结

可能有问题的点

可能的改进建议


传感器数据的走向

传感器数据从 CollatedTrajectoryBuilder类的HandleCollatedSensorData函数 传递GlobalTrajectoryBuilder类 的相应函数
从这里开始, 传感器数据才真正进入到SLAM的前端与后端部分
运动畸变去除后的点云, 点的坐标相对于local_frame, 点云依然围绕着tracking_frame
sensor::RangefinderPoint hit_in_local = range_data_poses[i] * sensor::ToRangefinderPoint(hit);
以点云的时间(也就是最后一个点的时间)预测出来的坐标做为点云的origin
accumulated_range_data_.origin = range_data_poses.back().translation()
计算从tracking_frame变换到local_frame原点并且变换后姿态为0的坐标变换
transform_to_gravity_aligned_frame = gravity_alignment.cast<float>() *
range_data_poses.back().inverse()
将点云进行平移与旋转, 点的坐标相对于local_frame, 点云围绕这local_frame坐标系原点
sensor::TransformRangeData(range_data, transform_to_gravity_aligned_frame)
进行z轴的过滤
sensor::CropRangeData(sensor::TransformRangeData(range_data,
transform_to_gravity_aligned_frame), options_.min_z(), options_.max_z())
单线雷达不能设置 大于0min_z, 因为单线雷达的z0

体素滤波与之后的处理

分别对 returns点云 与 misses点云 进行体素滤波
sensor::RangeData{ cropped.origin,
sensor::VoxelFilter(cropped.returns, options_.voxel_filter_size()),
sensor::VoxelFilter(cropped.misses, options_.voxel_filter_size())};
returns点云 进行自适应体素滤波
sensor::AdaptiveVoxelFilter(gravity_aligned_range_data.returns,
options_.adaptive_voxel_filter_options())
将 原点位于local坐标系原点处的点云 变换成 原点位于匹配后的位姿处的点云
TransformRangeData(gravity_aligned_range_data, transform::Embed3D(pose_estimate_2d-
>cast<float>()) )
将 原点位于匹配后的位姿处的点云 返回到node.cc , node.cc将这个点云发布出去, rviz中可视化

3D情况下的激光雷达数据的预处理

进行多个雷达点云数据的时间同步
对点云进行第一次体素滤波
激光雷达数据运动畸变的校正, 同时将点云的相对于tracking_frame的点坐标 转成 相对于local slam坐标系的 点坐标
分别对 returns misses 进行第二次体素滤波
将原点位于机器人当前位姿处的点云 转成 原点位于local坐标系原点处的点云
使用高分辨率进行自适应体素滤波 生成高分辨率点云
使用低分辨率进行自适应体素滤波 生成低分辨率点云
将 原点位于local坐标系原点处的点云 变换成 原点位于匹配后的位姿处的点云
将 原点位于匹配后的位姿处的点云 返回到node.cc , node.cc将这个点云发布出去, rviz中可视化

初始位姿估计

基于IMU与里程计的位姿推测器
重要成员变量说明
姿态预测相关
imu_tracker_ 只在添加位姿时更新, 用于保存添加校位姿准时的姿态
odometry_imu_tracker_ 只在添加位姿时更新, 用于根据里程计数据计算线速度时姿态的预测
extrapolation_imu_tracker_ 只在添加位姿时更新, 用于位姿预测时的姿态预测
通过里程计计算的线速度与角速度
linear_velocity_from_odometry_ 只在添加里程计数据时更新, 用于位姿预测时的平移量预测
angular_velocity_from_odometry_ 只在添加里程计数据时更新, 用于不使用imu数据时的imu_tracker_的角 速度的更新
通过pose计算的线速度与角速度
linear_velocity_from_poses_ 只在添加位姿时更新, 用于位姿预测时 不使用里程计数据时 平移量的预测
angular_velocity_from_poses_ 只在添加位姿时更新, 用于 不使用里程计数据时 imu_tracker_的角速度的更新
传感器数据队列的个数
imu_date_ 队列数据的个数最少是1
odometry_data_ 队列数据的个数最少是2, 所以, odometry_data_.size() < 2 就意味着不使用里程计
timed_pose_queue_ 队列数据的个数最少是2

位姿推测器的优缺点分析与总结

预测位姿时的4种情况 都是匀速模型
使用imu, 使用里程计
平移的预测: 通过里程计数据队列开始和末尾的2个数据计算出的线速度乘以时间
姿态的预测: 通过imu的角速度乘以时间
使用imu, 不使用里程计
平移的预测: 通过pose数据队列开始和末尾的2个数据计算出的线速度乘以时间
姿态的预测: 通过imu的角速度乘以时间
不使用imu, 使用里程计
平移的预测: 通过里程计数据队列开始和末尾的2个数据计算出的线速度乘以时间
姿态的预测: 通过里程计数据队列开始和末尾的2个数据计算出的角速度乘以时间
不使用imu, 不是用里程计
平移的预测: 通过pose数据队列开始和末尾的2个数据计算出的线速度乘以时间
姿态的预测: 通过pose数据队列开始和末尾的2个数据计算出的角速度乘以时间
总结:
预测平移时: 有里程计就用里程计的线速度, 没有里程计就用pose计算的线速度进行预测
预测姿态时: IMU就用IMU的角速度, 没有IMU, 如果有里程计就用里程计计算出的角速度, 没有里程计就用
pose计算的角速度进行预测
预测的都是相对值, 要加上最后一个pose的位姿

可能有问题的点

计算pose的线速度与角速度时, 是采用的数据队列开始和末尾的2个数据计算的
计算里程计的线速度与角速度时, 是采用的数据队列开始和末尾的2个数据计算的
使用里程计, 不使用imu, 计算里程计的线速度方向姿态的预测, 用的是里程计数据队列开始和末尾的2
数据的平均角速度计算的, 时间长了就不准
不使用里程计, 不使用imu, 用的是pose数据队列开始和末尾的2个数据的平均角速度计算的, 时间长了就不
添加位姿时, 没有用pose的姿态对imu_tracker_进行校准, 也没有对整体位姿预测器进行校准, 只计算了pose 的线速度与角速度
从代码上看, cartographer认为位姿推测器推测出来的位姿与姿态是准确的

可能的改进建议

pose的距离越小, 匀速模型越能代替机器人的线速度与角速度, 计算pose的线速度与角速度时, 可以考虑使用 最近的2个数据进行计算
里程计距离越短数据越准, 计算里程计的线速度与角速度时, 可以考虑使用最近的2个数据进行计算
使用里程计, 不使用imu, 计算里程计的线速度方向时, 可以考虑使用里程计的角度进行计算
使用里程计, 不使用imu, 进行姿态的预测时, 可以考虑使用里程计的角度进行预测
不使用里程计, 不使用imu, 可以考虑用最近的2pose计算线速度与角速度
使用poseimu_tracker_的航向角进行校准

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90992.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于数据挖掘的短视频点赞影响因素分析【LightGBM、XGBoost、随机森林、smote】

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍总结每文一语有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 随着短视频行业的高速发展&#xff0c;尤其是以抖音为代表的平台不断壮大&…

Git 从入门到精通

Git 从入门到精通 涵盖了核心概念、常用命令、协作流程和高级技巧&#xff1a; 核心理念&#xff1a; 版本控制&#xff1a; 记录文件变化历史&#xff0c;可回溯到任意版本。分布式&#xff1a; 每个开发者拥有完整的仓库副本&#xff08;包括完整历史&#xff09;&#xf…

UE5多人MOBA+GAS 30、技能升级机制

文章目录前言技能的升级修改一下按键的输入判断是否满级在ASC中升级技能由角色的输入调用ASC的升级功能技能图标的优化技能升级材质&#xff0c;可升级技能图标的闪烁刷新技能升级后的蓝耗和CD&#xff0c;以及蓝不够时技能进入灰色状态修复伤害数字特效只显示3位数的问题前言 …

笔试——Day22

文章目录第一题题目思路代码第二题题目&#xff1a;思路代码第三题题目&#xff1a;思路代码第一题 题目 添加字符 思路 枚举所有字符串a与字符串b相对应的位置 代码 第二题 题目&#xff1a; 数组变换 思路 贪心 以最大值为基准元素&#xff0c;判断其他元素能否变为最…

__getattr__和 __getattribute__ 的用法

1、__getattr__ 的用法当实例对象访问一个不存在的属性时&#xff0c;会执行 __getattr__ 方法&#xff0c;如果属性存在的话&#xff0c;就不会执行案例 class Person:def __init__(self, name, age):self.name nameself.age agedef get_info(self):return f"name: {se…

信息化项目验收测试实战指南

在当今数字化转型的大背景下&#xff0c;信息化项目验收建设已成为企业提升运营效率、优化管理流程的重要手段。然而&#xff0c;很多企业在投入大量资金建设信息系统后&#xff0c;却常常面临系统上线后无法满足实际业务需求的困境。究其原因&#xff0c;往往是由于忽视了信息…

牛顿拉夫逊法PQ分解法计算潮流MATLAB程序计算模型。

牛顿拉夫逊法&PQ分解法计算潮流MATLAB程序计算模型。本程序模型基于MATLAB进行潮流计算&#xff0c;建议先安装matpower插件&#xff08;MATLAB中非常重要的潮流计算的插件&#xff09;。本程序可进行牛拉法和PQ分解法潮流计算的切换&#xff0c;对比潮流计算的结果。很适合…

Go语言实战案例-计算字符串编辑距离

在自然语言处理、拼写纠错、模糊搜索等场景中,我们经常需要衡量两个字符串之间的相似度。编辑距离(Edit Distance) 就是一个经典的衡量方式,它描述了将一个字符串转换为另一个字符串所需的最少操作次数。 一、问题定义:什么是编辑距离? 编辑距离,也称为 Levenshtein Di…

Java时间与日期常用方法

DateDate date new Date(); //获取当前时间 System.out.println(date.getYear() 1900); // 必须加上1900 System.out.println(date.getMonth() 1); // 0~11&#xff0c;必须加上1 System.out.println(date.getDate()); // 1~31&#xff0c;不能加1Ca…

【MySQL】从连接数据库开始:JDBC 编程入门指南

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 &#x1f31f;一、什么是JDBC&#xff1f; &#x1f31f;二、JDBC编程的步骤 ✨使用步骤 ✨DriverManger &#x1f4ab;定义 &#x1f4ab;DriverManger的主要功能 …

重生之我在暑假学习微服务第一天《MybatisPlus-上篇》

本系列参考黑马程序员微服务课程&#xff0c;有兴趣的可以去查看相关视频&#xff0c;本系列内容采用渐进式方式讲解微服务核心概念与实践方法&#xff0c;每日更新确保知识点的连贯性。通过系统化学习路径帮助开发者掌握分布式系统构建的关键技术。读者可通过平台订阅功能获取…

odoo-060 git版本:发布/生产版本落后开发版本部署

文章目录问题起源目前解决问题起源 周五提交了一个版本&#xff0c;本来打算使用这个版本的&#xff0c;周末更新。 下一个功能比较复杂&#xff0c;周一提交&#xff0c;结果周末没有更新&#xff0c;导致现在还有没测试过的不能发布的。 说明&#xff1a; 原来只有一个mast…

YotoR模型:Transformer与YOLO新结合,打造“又快又准”的目标检测模型

【导读】在目标检测领域&#xff0c;YOLO系列以其高效的推理速度广受欢迎&#xff0c;而Transformer结构则在精度上展现出强大潜力。如何兼顾二者优势&#xff0c;打造一个“又快又准”的模型&#xff0c;是近年来研究热点之一。本文介绍的一项新研究——YotoR&#xff08;You …

白杨SEO:流量的本质是打开率?搞用户搜索流量的玩法怎么做?

大家好&#xff0c;我是白杨SEO&#xff0c;专注研究SEO十年以上&#xff0c;全网SEO流量实战派&#xff0c;AI搜索优化研究者。上周六参加了生财航海家在杭州举行的私域运营大会&#xff0c;主题是围绕私域获客&#xff0c;私域IP&#xff0c;AI私域&#xff0c;精细化管理。白…

Java优雅使用Spring Boot+MQTT推送与订阅

在物联网&#xff08;IoT&#xff09;和智能设备横行的今天&#xff0c;你有没有遇到这样的问题&#xff1a;服务端需要实时把报警、状态更新、控制指令推送给客户端&#xff1b;安卓 App、嵌入式设备、网页等终端&#xff0c;需要轻量且稳定的连接方式&#xff1b;HTTP 太“重…

多目标粒子群优化(MOPSO)解决ZDT1问题

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

Coze Studio概览(三)--智能体管理

本文简要分析了Coze Studio中智能体管理功能&#xff0c;包括功能、架构以及核心流程。Coze Studio 智能体管理功能分析 1. 智能体管理架构概览 Coze Studio的智能体管理系统基于DDD架构&#xff0c;主要包含以下核心模块&#xff1a; 后端架构层次&#xff1a; API层 (coze): …

idea运行tomcat日志乱码问题

原因在于idea和tomcat文件编码格式不一样。可以把idea编码改成UTF-8 File | Settings | Editor | File Encodings 里面把GBK都改成UTF-8help里面 Edit Custom VM Options 添加一行-Dfile.encodingUTF-8重启idea

Javaweb - 13 - AJAX

发送请求的几种方式1. 浏览器的地址框中输入地址&#xff0c;回车2. html --> head --> scrip / linkimg 自动发送请求&#xff0c;无需手动触发3. a 标签&#xff0c;form 表单标签需要手动控制提交产生&#xff0c;且往往需要在新的页面上获得响应信息4. 运行 JS 代码…

qt常用控件-06

文章目录qt常用控件-06spinBox/doubleSpinBoxdateTimeEditdialSliderlistWIdgettableWidgettreeWidget结语很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 今天我们进一步c11中常见的新增表达 作者&#…