码农知识堂 - 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介绍

  • 相关阅读:
    Android网络请求(1)
    自动拉取和推送docker镜像到私有仓库(skopeo)
    Zig标准库:最全数据结构深度解析(1)
    SpringBoot进阶教程(七十三)整合elasticsearch
    Jenkins学习笔记1
    一文详解Redis企业版软件!
    Android学习笔记 30. Service组件
    【Linux篇】第六篇——Linux下的进程(冯若依曼体系结构+操作系统+进程相关内容)
    uniapp中unicloud接入支付宝订阅消息完整教程
    VSCode 配置 Lua 开发环境(清晰明了)
  • 原文地址:https://blog.csdn.net/qq_40528849/article/details/125524718
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号