ROS小车(SLAM+物体追踪)

2023-05-16

属于交通运输工程设计的论文,包含SLAM与物体追踪这两个方向


ROS智能车设计


一. 系统描述

1. 车轮子

单轮平衡式结构,能量利用率高,但转弯的时候需要倾角高速运动,很难控制
单轮平衡
差速转向平衡两轮式:利用率高,上下坡的时候智能车可以保持垂直,
高速情况下转向很难控制。
差速两轮

全向三轮结构,可以全向移动原地转向,轮胎利用率不高,成本高。
全向三轮
阿克曼转向式:一般的汽车转向方式,转向摩擦力小,但转弯半径大不能原地转向。
全向四轮:比全向三轮结构多加一个轮子后动力得到增强,但能量利用率不高、成本高。
麦克纳姆四轮:可以全向移动,原地转向,摩擦小移动精度高,成本贵。
四轮的模型 图一:阿克曼转向底盘 图二:全向四轮式结构 图三:麦克纳姆四轮结构

2.硬件布局

硬件架构图
下位机:底盘运动控制系统主要组成部分有 STM32、IMU 、电机、编码器等,智能车左右轮的移动速度是通过编码器来测量,IMU 模块主要作用是采集智能车在三维空间当中移动的姿态、方向和加速度等信息,通过 STM32 进行 PID 控制。实现智能车的精准移动。
上位机:嵌入式计算系统,主要由 Raspberry Pi 3+、kinect 深度摄像头、激光雷达组成,Raspberry Pi 3B+ 搭载主频为 1.4GHz、内含 ARM Cortex-A53 核心的处理器,配备 1G 内存和多种外设。通过上层嵌入式计算系统完成外部传感器信息获取、图像处理、数据处理、运动决策、实现视觉跟踪算法和 SLAM 算法并且根据获取信息发送运动控制指令。远程的笔记电脑主要作用是可以实现智能车远程控制与监测。

3.基于ROS系统,小车的节点设计

系统软件节点
节点说明
智能车底盘(底盘运动控制节点):作为运动执行器,根据系统经过处理的数据,订阅发布的速度控制消息控制底盘运动;
视觉跟踪算法:主要是将深度相机获取的数据经过处理,发布到话题中由底盘运动控制系统订阅后控制底盘运动;
同步建图节点(SLAM):将激光雷达、底盘中 IMU 和编码器里程计等传感器的信息经过处理实时建立环境地图;
深度相机:采集外部环境中图像的 RGB 和深度信息;
激光雷达:作为环境感知的传感器同样需要在 ROS系统中安装驱动;
键盘控制:主要作用是通过笔记本电脑远程控制智能车运动。


二.小车的SLAM

1.算法整体设计

crtographer算法整体结构
激光 SLAM :使用的传感器和建立的地图类型
激光 SLAM 主要的传感器:轮式里程计、惯性测量单元(IMU)、激光雷达,其中轮式里程计主要算距离,惯性测量单元(IMU)计算角度,最终和激光数据合在一起进行 SLAM 的过程。
地图类型:覆盖栅格地图和点云地图,覆盖栅格地图的优点是他对环境进行了很鲜明的区分,可以清楚的知道什么地方是障碍物,什么地方是可以通行的区域。
SLAM拆分:一个是前端一个是后端,前端是构图的过程,包含帧间匹配和回环检测,当形成一个图后,如果地图中出现误差后地图一定是不一致的;图优化要使得这个误差最小化。里程计测量的位姿可以认为是预测位姿,回环后扫描匹配的位姿是观测的位姿,使得预测和观测之间的差最小化,得到一个位姿来解释观测值,实现了误差的去除。

图优化 SLAM 算法 Cartographer 由数据获取(Input Sensor Data)、局部建图(Local SLAM)、全局优化(Gloab SLAM)三部分组成。传感器输入数据包含激光雷达数据、底盘里程计数据、IMU 数据。激光雷达原生数据经过体素滤波器降采样后,减少了数据数量并且保证了障碍物特征,再经过自适应体素滤波器后进行下一步的扫描匹配,作为观测位姿。上一次前端匹配完成的位姿、里程计数据和经过预处理后的 IMU数据输入到姿势外推器中,通过里程计增量得到线速度和角速度,对 IMU 经过预积分后得到线速度和角速度,通过位姿变化增量得到线速度和角速度。对下一次前端匹配的初始位姿估算方法为,对位移位姿的变化如果有里程计的数据就选择里程计的数据,如果没有里程计的数据就选择位姿变化增量,对于角度姿态变化如果有 IMU 的数据就选择 IMU 的数据。根据传感器特性,在短时间内 IMU 的角度增量更准,里程计的位移增量更准。在局部建图部分,外推器初始位姿经过扫描匹配得到最优位姿,扫描匹配就是非线性优化问题,通过建立最小二乘问题计算出当前时刻相对于之前一段时间存在的最优位姿。得到最优位姿后经过运动滤波器后插入子图中,运动滤波器的作用是为了防止每个子图中插入太多扫描帧数据。一旦扫描匹配器生成了新的位姿后,比较位姿和上次位姿的变化量,调用运动滤波器,如果变化很小则删除本次的扫描。当变化大于某个距离、角度或时间阈值后,才会将扫描帧插入到当前的子图中。每当获得一次扫描帧的数据后,便与当前最近建立的子图进行扫描匹配,使这一帧的扫描帧数据插入到子图中的最优位置。在不断插入新数据帧的同时该子图也得到了更新。一定量的数据组合成为一个子图,当不再有新的数据帧插入到子图时,就认为这个子图已经创建完成,接着会去创建下一个子图。Cartographer 理论认为连续的多帧扫描具有很小的累积误差,因此这样构建子图作为地图的一个小单元。通过扫描匹配得到的位姿估计在短时间内是可靠的,但是时经过很长时间后会有累积误差。因此 Cartographer 应用了回环检测对累积误差进行全局优化。插入子图的扫描帧与之前已创建完成的子图中所有扫描帧都会用来做回环检测的匹配,如果当前的扫描帧和所有已创建完成的子图在距离上足够近,那么通过某种匹配策略就会找到该闭环。如果得到一个足够好的匹配,则表示回环检测已经结束了。接下来要根据当前扫描帧的位姿和匹配到得最接近的子图中的某一个位姿,对所有的子图中的位姿进行优化,最终得到地图。

2.本车SLAM:cartographer的结构

cartographer
Cartographer 由数据获取(Input Sensor Data)、局部建图(LocalSLAM)、全局优化(Gloab SLAM)三部分组成。
传感器输入:激光雷达数据、底盘里程计数据、IMU 数据。
激光雷达原生数据经过体素滤波器降采样后,减少了数据数量并且保证了障碍物特征,再经过自适应体素滤波器后进行下一步的扫描匹配,作为观测位姿。
上一次前端匹配完成的位姿、里程计数据和经过预处理后的 IMU数据输入到姿势外推器中,通过里程计增量得到线速度和角速度,对 IMU 经过预积分后得到线速度和角速度,通过位姿变化增量得到线速度和角速度。
对下一次前端匹配的初始位姿估算方法为,对位移位姿的变化如果有里程计的数据就选择里程计的数据,如果没有里程计的数据就选择位姿变化增量,对于角度姿态变化如果有 IMU 的数据就选择 IMU 的数据。根据传感器特性,在短时间内 IMU 的角度增量更准,里程计的位移增量更准。
局部建图部分,外推器初始位姿经过扫描匹配得到最优位姿,扫描匹配就是非线性优化问题,通过建立最小二乘问题计算出当前时刻相对于之前一段时间存在的最优位姿。得到最优位姿后经过运动滤波器后插入子图中,运动滤波器的作用是为了防止每个子图中插入太多扫描帧数据。一旦扫描匹配器生成了新的位姿后,计算这次位姿和上次位姿的变化量,调用运动滤波器,如果变化很小则删除本次的扫描。当变化
大于某个距离、角度或时间阈值后,才会将扫描帧插入到当前的子图中。每当获得一次扫描帧的数据后,便与当前最近建立的子图进行扫描匹配,使这一帧的扫描帧数据插入到子图中的最优位置。在不断插入新数据帧的同时该子图也得到了更新。一定量的数据组合成为一个子图,当不再有新的数据帧插入到子图时,就认为这个子图已经创建完成,接着会去创建下一个子图。Cartographer 理论认为连续的多帧扫描具有很小的累积误差,因此这样构建子图作为地图的一个小单元。
通过扫描匹配得到的位姿估计在短时间内是可靠的,但是时经过很长时间后会有累积误差。因此 Cartographer 应用了回环检测对累积误差进行全局优化。插入子图的扫描帧与之前已创建完成的子图中所有扫描帧都会用来做回环检测的匹配,如果当前的扫描帧和所有已创建完成的子图在距离上足够近,那么通过某种匹配策略就会找到该闭环。如果得到一个足够好的匹配,则表示回环检测已经结束了。接下来要根据当前扫描帧的位姿和匹配到得最接近的子图中的某一个位姿,对所有的子图中的位姿进行优化,最终得到地图。
图优化算法框架

3.SLAM解决的技术问题

1.前提:非线性最小二乘的原理

f(x)=z
给定系统,描述系统的状态方程, x 是该系统的状态向量表示智能车的位姿,z 是一个非线性函数, 是系统的观测值可以通过传感器直接观测,可以通过函数得到一个预测值,在得到预测值和观测值后最小化他们之间的差。给定系统中 n 个混有噪声的传感器真实的观测
值,估计状态向量 x,使得其经过非线性函数,映射后的预测值与观测值的误差最小。

2. 里程计的标定

里程计存在系统误差和随机误差。
随机误差无法消除
系统误差可以通过标定进行消除。
系统误差是确定的误差,比如当设计智能车的时候,根据智能车的图纸进行装配后,轮子的间距和轴距会存在装配误差,智能车的车轮理论上的设计值与实际值存在误差,所以需要对系统误差进行标定。(里程计的标定,对于可以消除的误差进行处理)
在标定的时候采用比较通用的线性最小二乘法,线性最小二乘标定不需要关心底层的细节就可以进行标定。线性方程组 Ax=b。

3.运动去畸变

4.激光的前端配准

SLAM前端感知技术对比


三 、导航模块设计

导航模块设计

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS小车(SLAM+物体追踪) 的相关文章

随机推荐

  • strcpy、strncpy与memcpy的区别与使用方法

    strcpy strncpy 与memcpy 的区别与使用方法 strcpy strncpy memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到 xff0c 但是三个函数的区别 使用时该注意什么还是有必要说下的 本文参考 C
  • C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别

    一直以为这两个是没有什么区别的 xff0c 可以相互替换 xff0c 今天又翻了一下 C语言核心技术 xff0c 明白了其中的奥妙 相同点 xff1a 两个都是二元操作符 xff0c 其右操作符是成员的名称 不同点 xff1a 点操作符左边
  • DB2 命令行中如何执行sql脚本

    原文链接 xff1a http space itpub net 8231934 viewspace 584635 db2 61 gt connect to dbName user xxx using password db2 61 gt s
  • 性能测试知多少 --并发用户数与TPS之间的关系

    1 背景 在做性能测试的时候 xff0c 很多人都用并发用户数来衡量系统的性能 xff0c 觉得系统能支撑的并发用户数越多 xff0c 系统的性能就越好 xff1b 对TPS不是非常理解 xff0c 也根本不知道它们之间的关系 xff0c
  • ubuntu编译 opencv undefined referece to `cv::imread()`

    Ubuntu下编译一个C 43 43 文件 xff0c C 43 43 源程序中使用了opencv xff0c opencv的安装没有问题 xff0c 但是在编译的过程中出现如下错误 xff1a undefined reference to
  • 基于深度学习的3D pose estimation总结(包括几篇2D pose estimation)

    一 任务描述 给定一幅图或者是一段视频 xff0c 人体姿态估计就是恢复出其中的人体关节点位置的过程 二 挑战和难点 1 人体肢体运动较为灵活 xff1b 2 视角的变化 xff1b 3 附着物的变化 xff08 比如遮挡 xff0c 衣物
  • STM32的空闲中断

    最近发现了STM32的USART的空闲中断非常的舒爽 xff0c 但是在前期配置的时候会出现一些小问题导致没有办法进入终中断或者是一直空闲中断 xff0c 现将它记下来 xff0c 给各位和自己留一个参考 xff1a 1 不进入中断 我是这
  • Github上最受欢迎的7个开源AI机器学习框架

    在过去的几年中 xff0c 人工智能正在占领技术的许多领域 来自不同背景的开发人员最终意识到了AI为他们带来的机遇 xff0c 而不管他们的需求如何 在今天的文章中 xff0c 我们列出了7种最佳的开源AI 机器学习系统和框架 1 Tens
  • ubuntu更换shell

    ubuntu更换shell zsh配置 span class token comment 安装zsh span span class token function sudo span span class token function ap
  • 网络调试助手NetAssist的使用

    一 使用场景 xff1a 项目定制需求 xff1a 前端的车载终端把gps 报警信息 报警图片 其他检测数据发往约定的第三方服务器 xff0c 车载终端通过公网 xff08 SIM拨号或者有线网 xff09 以udp或者tcp连接服务器 x
  • vlc代码分析(4)——mpgv的demux

    Mpgv c 是对mpeg vedio的解码部分 xff0c 从demux开始 xff0c 到sample到输出 其中 xff0c 核心部分是函数ParseMPEGBlock 两种数据格式 xff1a video format 是video
  • 关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

    首先请看 xff0c CMT2300A 是什么产品 xff0c 或者说是 模组吗 xff1f 请看介绍 xff1a https blog csdn net sishuihuahua article details 105095994 以及R
  • 不合理超时设置带来的“坑”

    在后台服务的实现中 xff0c 我们通过基于TCP UDP协议封装起来的RPC机制实现了跟不同系统的通信 xff0c 进而协同各个系统完成一系列业务流程和功能的执行 xff0c 在这个过程中 xff0c 每个参与合作的子系统都有自己的能力描
  • 以太坊的三种同步模式

    全同步 xff1a 获取区块链所有区块的header和body xff0c 并校验其中的每一笔交易 xff0c 需要下载所有的区块数据信息 xff0c 同步速度最慢 xff0c 但是数据最全 xff1b 快速同步 xff1a 获取区块链所有
  • 基于订单号可重入的交易系统接口设计探讨

    基于订单号可重入的交易系统接口设计探讨 在交易系统的设计和实现中 xff0c 接口的可重入性设计是及其关键的 xff0c 可重入性也叫接口操作的冥等性保障 xff0c 那么什么叫冥等性呢 xff1f 在交易系统中 xff0c 为什么需要这个
  • 什么是手机的IMEI?

    一 xff0c IMEI是什么 xff1f IMEI xff08 International Mobile Equipment Identity xff09 是移动设备国际身份码的缩写 是由15位数字组成的 电子串号 xff0c 该码是全球
  • PBOC2.0安全系列之—脱机认证之静态数据认证(SDA)

    PBOC2 0安全系列之 脱机认证之静态数据认证 SDA 一 xff0c 什么是PBOC2 0 2005年3月13日 xff0c 人民银行发布第55号文 xff0c 正式颁发了 中国金融集成电路 xff08 IC xff09 卡规范 简称P
  • 第三方支付架构设计之—帐户体系

    第三方支付架构设计之 帐户体系 一 xff0c 什么是第三方支付 xff1f 什么是第三方支付 xff1f 相信很多人对这个名字很熟悉 xff0c 不管是从各种媒体等都经常听到 xff0c 可以说是耳熟能熟 但 xff0c 如果非得给这个名
  • ELF文件格式详解

    ARM的可执行文件的格式是ELF格式文件 xff0c 下文对ELF格式做个详细的介绍 序言 1 OBJECT文件 导言 ELF头 ELF Header Sections String表 String Table Symbol表 Symbol
  • ROS小车(SLAM+物体追踪)

    属于交通运输工程设计的论文 xff0c 包含SLAM与物体追踪这两个方向 ROS智能车设计 一 系统描述 1 车轮子 单轮平衡式结构 xff0c 能量利用率高 xff0c 但转弯的时候需要倾角高速运动 xff0c 很难控制 差速转向平衡两轮