【深蓝学院】移动机器人运动规划--第1章 运动规划介绍与地图构建--笔记

news2024/9/29 23:32:04

文章目录

  • 1. Course introduction
  • 2. Course Outline
    • 2.1 课程概览
    • 2.2 课程算法概览
      • 2.2.1 基于搜索的前端
      • 2.2.2 基于采样的前端
      • 2.2.3 满足动力学约束的路径搜索
      • 2.2.4 后端轨迹优化
  • 3. 地图表示
    • 3.1 Occupancy grid map占用栅格地图
    • 3.2 八叉树地图
    • 3.3 Voxel hashing(体素哈希)
    • 3.4 piint cloud点云
    • 3.5 TSDF 截断符号距离函数
    • 3.6 ESDF欧式符号距离函数
    • 3.7 More
  • 4. Occupancy grid map
    • 4.1 理论推导
    • 4.2 occupancy Grid Map小结
  • 5. Euclidean Signed Distance Field(ESDF)
    • 5.1 计算步骤
    • 5.2 ESDF代码
    • 5.3 线性插值及梯度计算
  • 6. Refernece

1. Course introduction

在这里插入图片描述
会:

  • 模块化设计(学院派)的规划pipeline
  • 希望能在实际机器上实现

不会

  • 端到端导航(据我所知,强化学习做导航比较多)
  • 详细的公式证明(可后面查阅paper)

运动规划在整个机器人技术栈中属于较为上层的部分。
在这里插入图片描述
感知-规划-控制 闭环(SLAM在感知层面)。

一些简单案例:
海陆空机器人均有
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

基础要求:

  1. 安全,不能碰撞
  2. 轨迹光滑:物理机上能源有限,轨迹要光滑,如果是拍摄则要考虑视频的流畅度,自动驾驶要考虑乘客的舒适度
  3. 动力学可行。

学院派pipeline:
planning同样也分为前后端:

  1. 前端主要生成粗略的、离散的路径,一般低维,不含具体的方向,速度大小等信息,称为path
  2. 后端根据path来进行优化,生成高维的、连续的、可执行的路径,称为trajectory

如何做机器人的研究
在这里插入图片描述
在实际机器人上进行部署是学界亘古不变的道理?

在这里插入图片描述

  1. 要求规划领域的知识面需要广,对不同的场合设计不同的策略。
  2. 不要怕动手,robotics本身就很辛苦
  3. 出色的机器人工程师要对整个系统的各个部件都要熟知(感知,定位,控制),不要求开发,但是至少得维护。

2. Course Outline

2.1 课程概览

课程分为3部分:
前端path finding,后端trajectory generation,用于机器人规划的MPC

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 课程算法概览

基于搜索。DFS,BFS
基于采样。随机采样的思想,希望用越来越多的采样来覆盖环境中没有探索过的区域,去构成一个graph。

2.2.1 基于搜索的前端

在这里插入图片描述
与搜索算法对应的就是图,图中最重要的是结点和边(有向和无向边):
在这里插入图片描述

Dijkstra和A*目的不同,前者倾向于搜索全图,最短路径的cost较大,后者有指向性,很快找到最短路径。
在这里插入图片描述

JPS跳点搜索不一定比A*更好,需要看实际应用场景。
在这里插入图片描述

2.2.2 基于采样的前端

撒一些采样点,将不在障碍物内的边连起来,去掉在障碍物内的边,得到概率路线图(PRM)。
在这里插入图片描述

RRT本身不具备渐进最优性,RRT具备,下图左,两点间最优路径是接近直线,但RRT没找到直线,RRT维护的随机扩展树很顺滑,而RRT是杂乱无章。(Ch3主要讲)
在这里插入图片描述

informed RRT* 启发式RRT*,画一个椭圆(椭球),相当于给搜索范围框定了一个先验,在搜索范围内找
在这里插入图片描述

在这里插入图片描述

2.2.3 满足动力学约束的路径搜索

比如约束是起始和结束时的速度(大小,方向)。
1. hybrid A*
lattice search,机器人的控制方法,在某点给油或者打方向,遍历所有的可能组成一个控制组合,然后在本段控制终点继续这种组合模式。
在这里插入图片描述
但是这样做cost很高,于是hybrid A*应运而生,维护一个栅格,每个栅格里面都有一个状态,找到更好的状态之后就会把之前的状态给删掉。
在这里插入图片描述
地面无人车导航,无人机导航。

在这里插入图片描述

2. Kinodynamic RRT*
两点边界值的最优控制问题,现有边界,再计算中间的路径,和latice search相反,latice search是现有中间的路径集合,再计算最优终点。
在这里插入图片描述
在这里插入图片描述

2.2.4 后端轨迹优化

Minimun snap要保持机器人消耗能量最小
在这里插入图片描述

路标点之间生层traj,如果产生了碰撞,则在两点之间重新去一个点,再生成轨迹,尽可能逼近前端的直线path。

3. 地图表示

在这里插入图片描述
地图由数据结构和融合方法构成,二者有区别。

3.1 Occupancy grid map占用栅格地图

  • 最稠密
  • 结构化
  • 直接访问

在这里插入图片描述
稠密
结构化

直接索引(O(1)复杂度)


https://github.com/ANYbotics/grid_map
这里安装不上grid map,说找不到costmap_2d,解了一会儿没解决,先放着。


3.2 八叉树地图

  • 稀疏
  • 结构化
  • 间接访问

https://octomap.github.io/

occupancy grid map虽然快,但是占用内存极大,为了减小内存占用,牺牲一定的查询速度,引入了八叉树地图,对于有障碍物的节点可以继续展开,没有的可以无需展开,但是访问障碍物需要通过父节点进行访问,速度比occupancy grid map慢,但内存占用少。
在这里插入图片描述

3.3 Voxel hashing(体素哈希)

  • 最稀疏
  • 结构化
  • 间接访问

https://github.com/niessner/VoxelHashing
http://www.robots.ox.ac.uk/~victor/infinitam/
用在稠密重建或者3D SLAM上。
在这里插入图片描述
同样也是基于八叉树的数据结构,引入了block(图中555的大方格)和voxel(最小的方格)的概念,最终数据存放在每个voxel内,把每个block通过hash表的形式存储起来(具体为什么是最稀疏的目前还不了解)。

3.4 piint cloud点云

  • 无序的
  • 无索引查询

http://pointclouds.org/
在这里插入图片描述

3.5 TSDF 截断符号距离函数

老规矩,还是叫TSDF地图,不翻译。voxel内存储的是该小块与距其最近的物体表面的距离。(可用GPU进行并行加速)
阶段的意思即只关心它的FOV内的一定距离的观测,剩下的截断不管。(ESDF则关心所有的,不进行截断)
在这里插入图片描述

3.6 ESDF欧式符号距离函数

https://github.com/ethz-asl/voxblox
https://github.com/HKUST-Aerial-Robotics/FIESTA
https://github.com/HKUST-Aerial-Robotics/Teach-Repeat-Replan
对FOV内所有的观测都计算距离,目的是为了让生成的轨迹尽可能远离障碍物,提高安全性,思路是使用距离障碍物距离的梯度信息把轨迹往远离障碍物的地方推,如下图所示是高飞phd期间在港科大的工作:FIESTA和TRR‘s local map(teach repeat replan). 均基于ESDF
在这里插入图片描述

3.7 More

在这里插入图片描述
蓝色是障碍物,棕色是free space,用凸的多面体表示。(凸会带来很多好处,Ch4,5学完之后会了解。)

表示空间的拓扑结构,skeleton骨架,非常稀疏,速度也会很快。
在这里插入图片描述

4. Occupancy grid map

Fast-Planner和EGO-Planner(Ch8会讲)都使用了Occupancy grid map。

4.1 理论推导

推导参考文献[1]
在这里插入图片描述
0代表free,1代表occupied,常是障碍物。

但是传感器观测是带噪声的,在某处观测为occupied在另一处为free,如何处理?

答:计算每个栅格的后验概率。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看出方框内的递推关系了。

在这里插入图片描述
l t ( m i ) l_{t}(m_i) lt(mi)中涉及到逆传感器模型:
在这里插入图片描述
逆传感器模型使用bayes转为传感器模型:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中间的一项 l o g p ( z t ∣ m i ) p ( z t ∣ m i ‾ ) log\frac{p(z_t|m_i)}{p(z_t|\overline{m_i})} logp(ztmi)p(ztmi)即为传感器模型相关,接下来进行讨论:

在这里插入图片描述

假设传感器的观测模型不变,即a和b的值不变,则我们对 l t ( m i ) l_t(m_i) lt(mi)进行更新只需简单的加减操作

在这里插入图片描述
上面讨论的是 l t ( m i ) l_t(m_i) lt(mi)的性质,我们最开始是要讨论后验概率 p ( m i z 1 : t ) p(m_iz_{1:t}) p(miz1:t),这二者有什么关系?

实际上可以使用 l t ( m i ) l_t(m_i) lt(mi)的正负来代替后验概率来判断状态 m i m_i mi,假设我们求出了后验概率 p ( m i z 1 : t ) p(m_iz_{1:t}) p(miz1:t),那我们可以设置一个阈值0.5,

  • p ( m i z 1 : t ) > 0.5 p(m_iz_{1:t})>0.5 p(miz1:t)>0.5,我们认为 m i = 1 m_i=1 mi=1
  • 反之 m i = 0 m_i=0 mi=0

    使用 l t ( m i ) l_t(m_i) lt(mi)
  • l t ( m i ) > 0 , m i = 1 l_t(m_i)>0, m_i=1 lt(mi)>0,mi=1
  • 反之 m i = 0 m_i=0 mi=0

以上即为occupancy grid map的结论。

那么为何 l t ( m i ) l_t(m_i) lt(mi)能替代后验概率呢?需要对 l t ( m i ) l_t(m_i) lt(mi)的函数性质进行讨论,记后验概率 p ( m i z 1 : t ) = x p(m_iz_{1:t})=x p(miz1:t)=x,有以下讨论:

在这里插入图片描述

4.2 occupancy Grid Map小结

在这里插入图片描述

5. Euclidean Signed Distance Field(ESDF)

5.1 计算步骤

参考文献[2]
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

关于采样函数q,对于高维ESDF有用

在这里插入图片描述

一维ESDF的计算伪代码:

算法逻辑比较绕,此处不进行展开。
在这里插入图片描述
y与x无关,所以可以fix一项变为一维形式,求另一项
在这里插入图片描述

ESDF物理意义:

没有障碍物就认为障碍物在无穷远,距离是 ∞ \infty

  1. 只管y相关的项,计算离最近障碍物的距离的平方 d 1 d_1 d1(调用上述伪代码计算1维ESDF值)
  2. fix x,遍历x’的值,计算距离平方,加上 d 1 d_1 d1即为 D D D

只管y相关的项:
在这里插入图片描述
2. 将d1当做常量,固定x的值,eg: x = 1 x=1 x=1,变化 x ′ x^ \prime x的值,计算 ( x − x ′ ) 2 + d 1 (x-x^\prime)^2+d_1 (xx)2+d1

障碍物里面存放的值是到最近的free栅格的距离,是负值。
在这里插入图片描述

5.2 ESDF代码

在这里插入图片描述
在这里插入图片描述

5.3 线性插值及梯度计算

当不在栅格点正中间,需要对点进行插值,如下为一维和二维情况

线性插值(2点)与双线性插值(4点)
在这里插入图片描述

三维情况:三线性插值(8个点)
在这里插入图片描述

前面讲到ESDF可以使用梯度来使得轨迹更远离障碍物,更安全,如果不在栅格中心,梯度的计算也依赖于线性插值,以下为3维情况:
在这里插入图片描述

课程着重于算法原理的讲解,如果要想了解实现,强烈建议看Fast planner的源码,跑通他们的例程,有条件的可以使用传感器采集bag包,跑他们的建图程序。

6. Refernece

[1] https://www.cs.cmu.edu/~16831-f14/notes/F14/16831_lecture06_agiri_dmcconac_kumarsha_nbhakta.pdf
[2] Felzenszwalb, Pedro F., and Daniel P. Huttenlocher. “Distance transforms of sampled functions.” Theory of computing 8.1 (2012): 415-428.

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

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

相关文章

虾皮开通:如何在虾皮(Shopee)平台上开通店铺详细步骤

在全球电商市场的竞争中,越来越多的卖家选择在虾皮(Shopee)平台上开设店铺。作为东南亚地区最大的电子商务平台之一,虾皮提供了一个便捷的销售渠道,吸引了数百万的买家和卖家。如果您想在虾皮上开设自己的店铺&#xf…

写一个判断鼠标进入方向切换图片的效果

直接看代码&#xff1a; <template><div class"mainrouter centerWindi"><div ref"mouse" class"mouse" mouseenter"handleMouse"></div></div> </template> <script setup> import { onMo…

#AIGC##VDB# 【一篇入门VDB】矢量数据库-从技术介绍到选型方向

文章概览&#xff1a; 这篇文章深入探讨了矢量数据库的基本概念、工作原理以及在人工智能领域的广泛应用。 首先&#xff0c;文章解释了矢量的数学和物理学概念&#xff0c;然后引入了矢量在数据科学和机器学习中的应用。随后&#xff0c;详细介绍了什么是矢量数据库&#xff0…

【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II

作者推荐 【矩阵快速幂】封装类及测试用例及样例 本文涉及的基础知识点 二分查找算法合集 LeetCode100207. 找出数组中的美丽下标 II 给你一个下标从 0 开始的字符串 s 、字符串 a 、字符串 b 和一个整数 k 。 如果下标 i 满足以下条件&#xff0c;则认为它是一个 美丽下标…

建设企业微电网能效系统浅谈

1 综合智慧零碳电厂前景广阔 2022年8月国家电投提出“雪炭N行动”&#xff0c;重点是打造综合智慧零碳电厂&#xff0c;这是国家电投创新打造的一种能源保供新模式。利用电力网连接&#xff0c;通过协调控制、智能计量以及信息通信等关键技术&#xff0c;将相对分散的源、网、…

Centos 更换内核

文章目录 一、查看/更换系统内核1.1 查看当前运行环境的内核1.2 查看系统上所有可用内核1.3 切换内核方法一&#xff1a;通过启动菜单更换内核方法二&#xff1a;更换默认启动内核 二、安装内核参考资料 查看有哪些内核内核包的区别如何下载安装 一、查看/更换系统内核 1.1 查…

总结微机原理8255芯片常考题型

正文开始啦! 实验一&#xff1a; 分析&#xff1a; 这是一个数码管图示 数码管 最上面是a&#xff0c;逆时针依次是bcdef中间的扛是g 右下角的点是dp 看题图灯是共阳极 灯是0亮&#xff0c;1是不亮。 要看到数字0 只有g和dp不亮 不亮为1 PA7(dp) PA6(g) PA5(f) PA4(e) PA3(…

02.部署LVS-DR群集

技能展示&#xff1a; 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR&#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一种工作模式。 2.1.1&#xff0e;LVS-DR 工作原理 LVS-DR 模式&…

GitHub 上传超过 100M 文件方法

GitHub 上传超过 100M 文件方法 报错信息报错原因解决办法 报错信息 remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. remote: error: Trace: a703cdcc9fade51f2a131142249cb422 rem…

Lunule: An Agile and Judicious Metadata Load Balancer for CephFS——论文泛读

SC 2021 Paper 元数据论文阅读汇总 问题 CephFS采用动态子树分区方法&#xff0c;将分层命名空间划分并将子树分布到多个元数据服务器上。然而&#xff0c;这种方法存在严重的不平衡问题&#xff0c;由于其不准确的不平衡预测、对工作负载特性的忽视以及不必要/无效的迁移活动…

2024年,文旅行业如何抓住流量密码

去年的“进淄赶烤”&#xff0c;今年哈尔滨的“讨好型市格”&#xff0c;回顾2023&#xff0c;大家都去了哪里玩呢&#xff1f;随着人们生活水平的提高&#xff0c;文旅消费需求也发生了升级&#xff0c;人们更加注重文化体验、参与感和个性化服务。那么在2024年&#xff0c;文…

冯诺依曼体系结构和操作系统

文章目录 冯诺依曼体系结构对冯诺依曼体系结构的理解——用QQ和朋友聊天时数据的流动过程操作系统是什么操作系统的作用操作系统 冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据…

数据资产入表背后:中国To B数字化驶入“数据时代”

数据资产“入表”&#xff0c;更像是一剂通过颠覆旧的生产关系&#xff0c;从根上医治数字化转型的“良方”。 那么&#xff0c;数据资产到底是什么&#xff1f;以及在愈发被规范的数据市场大背景下&#xff0c;对中国的To B企业和To B服务商而言&#xff0c;正在或者即将发生…

WaitForSingleObject 函数的诸多用途与使用场景总结

目录 1、WaitForSingleObject函数详细说明 2、在线程函数中调用WaitForSingleObject实现Sleep&#xff0c;可立即退出Sleep状态 3、调用WaitForSingleObject函数监测线程或进程是否已经退出 3.1、子进程实时监测主进程是否已经退出&#xff0c;主进程退出了&#xff0c;则子…

高级分布式系统-第15讲 分布式机器学习--神经网络理论

神经网络理论 模糊控制在处理数值数据、自学习能力等方面还远没有达到人脑的境界。人工神经网络从另一个角度出发&#xff0c;即从人脑的生理学和心理学着手&#xff0c;通过人工模拟人脑的工作机理来实现机器的部分智能行为。 人工神经网络&#xff08;简称神经网络&#xf…

【嘉立创EDA】原理图显示/隐藏引脚标识

文章路标👉 文章解决问题主题内容be end..文章解决问题 1️⃣ 嘉立创EDA专业版,操作版本是V2.1.17客户端半离线版本。 本文基于嘉立创EDA专业版讲述如何将原理图中已建立的器件的引脚标识进行显示或隐藏。本文将此过程记录,以供有需要的读者参考。 主题内容 2️⃣ 对目…

html5+css3+bootstrap+js 新闻网页

新闻网页练习打卡&#xff01; 一、首页 二、社会 三、财经 四、视频展示 简易新闻网站&#xff08;期末作业&#xff09;

无纸化革新:纸质文件转在线存储和检索 | 开源日报 No.141

paperless-ngx/paperless-ngx Stars: 13.9k License: GPL-3.0 Paperless-ngx 是一个文档管理系统&#xff0c;将您的纸质文件转换为可搜索的在线存档&#xff0c;以便您可以保留更少的纸张。 完整功能列表和截图可在文档中找到通过 docker compose 最简单地部署 paperless可以…

Linux驱动学习—IIC总线之FT5X06触摸驱动实验

1、实现触摸坐标值上报 流程图&#xff1a; 设备树如下&#xff1a; 触摸设备对应的设备树节点是&#xff1a; 读取坐标的寄存器&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/i2c.h> #include <linux/gpio.h> #i…

HTML---JAVAscript对向和原型链

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一.JavaSceipt对象概述 JavaScript是一种基于对象的编程语言&#xff0c;每个值都是一个对象。JavaScript中的对象是一种无序的键值对集合&#xff0c;其中每个键都是唯一的。 JavaScript的…