码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 激光slam学习


    ----------------------------------------------学习资料来源---深蓝学院--------------------------------------------------

    目录

    1、激光SLAM简要介绍

    2、传感器数据处理I:里程计运动模型及标定

    3、传感器数据处理II:激光雷达数学模型和运动畸变去除

    4、激光SLAM的前端配准方法

    5、gmapping——基于滤波器的激光SLAM方法(Grid-based)

    6、cartographer——基于图优化的激光SLAM方法(Grid-based)

    7、基于已知定位的建图

    8、3D激光SLAM介绍


    1、激光SLAM简要介绍

    1.1 tf树

    1.1.1map --> odom --> base_footprint --> base_link --> laser_link的tf树关系

    1、世界坐标(map)

            该map坐标系是一个世界固定坐标系,其Z轴指向上方。典型的设置中,定位模块(轮式里程计等传感器)不断的重新计算世界坐标中机器人的位姿,从而消除偏差,但是当新的传感器信息到达时可能会跳变。

    2、里程计坐标系(odom)

            odom 坐标系是基于测距源来计算的,如车轮里程计,视觉里程计或惯性测量单元。

    3、基座标(base_footprint)

            默认Z坐标为0,即紧贴地面。但是实际情况一般不是这样。

            base_footprint表示机器人base_link原点在地面上的投影,区别base_link之处是其“z”坐标不同。一般为了模型不陷入地面,base_footprint的“z”坐标比base_link高。其中蓝色箭头所指的绿色框框就是base_footprint。

    4、基座标(base_link)

            base_link是固定在机器人本体上的坐标系,通常选择机器人腰部;一般设置为机器人的旋转中心,也就是两个轮子之间的中轴处。

            这里有一个重要默认:move_base默认base_link的z坐标为0。即机器人的在地图中的位置由base_link。因此一般默认将base_link设置为定位用的机器人本体坐标系。

            base_link区别base_footprint 之处是其“z”坐标不同,前者比后者高。

    5、雷达坐标系(laser_link)

            根据实际安装位置进行测量,修改tf的发布参数。

    1.1.2 odom的作用和理解

    “odom和map坐标系在机器人运动开始是重合的。但是,随着时间的推移是不重合的,而出现的偏差就是里程计的累积误差。那map-->odom的tf就是在一些校正传感器合作校正的package比如gmapping会给出一个位置估计(localization),这可以得到map-->base_link的tf,所以估计位置和里程计位置的偏差也就是odom与map的坐标系偏差。所以,如果你的odom计算没有错误,那么map–->odom的tf就是“ 如下图关系:

    9676334-9e9be0202177671a

     1.1.3 为什么不能直接从map --> base_link发布信息?

    导航堆栈必须有map到base_link的变换,有的本地规划器还要求提供/odom


     参考博客:

    map odom base_link三者关系的通俗理解_TYINY的博客-CSDN博客_base_link

    ROS中map、odom、base_link等坐标系关系的理解_网络通杀108的博客-CSDN博客_map odom

    ROS、base_footprint和base_link的区别及Gazebo差速小车建模遇到的坑汇总_yjj1227033506的博客-CSDN博客_base_footprint


    1.2 slam常用函数

    1.1.1 Eigen::Vector3d 和 Eigen::Matrix3dA

    首先Eigen是一个开源的基于c++的矩阵运算库。

    Eigen::Ref< Eigen::Matrix3d >中“Matrix3d”代表一个33的类型为double的矩阵,Ref<>代表引用类型,所以这条语句表示对3*3矩阵的引用对象;同理,Vector3d表示长度为3的类型为double的向量。
    boolcompute_C(Eigen::Ref<Eigen::Matrix3d>A_,Eigen::Ref<Eigen::Vector3d>B_)。应该是声明了一个函数,其中有两个参量,第一个是名为A的矩阵,第二个是名为B的向量。为了避免产生拷贝和临时值,所以用了Ref<>。Ref的用法可以理解为 按引用传递。

    2、传感器数据处理I:里程计运动模型及标定

    3、传感器数据处理II:激光雷达数学模型和运动畸变去除

    3.1激光雷达传感器原理介绍

     

     

     3.2运动畸变

     解决方法:ICP、VICP等等

    3.3运动畸变去除——传感器辅助

     IMU和轮式里程计优缺点

    4、激光SLAM的前端配准方法

    5、gmapping——基于滤波器的激光SLAM方法(Grid-based)

    6、cartographer——基于图优化的激光SLAM方法(Grid-based)

    7、基于已知定位的建图

    8、3D激光SLAM介绍

  • 相关阅读:
    【大型电商项目开发】线程池-异步(CompletableFuture)-48
    03 统计量
    前端——git操作
    mac 备忘录
    机器学习模型的集成方法总结:Bagging, Boosting, Stacking, Voting, Blending
    Mpeg-Mesylate/Metronidazole/Niacin 甲氧基聚乙二醇-甲磺酸酯/甲硝唑/烟酸
    SQL之exists、not exists
    小明OJ——字符串移位包含问题
    第十二周学习总结 Progress & Lack
    cxf反向根据.net wsdl内容生成服务器端代码
  • 原文地址:https://blog.csdn.net/qq_40528849/article/details/125524718
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号