移动机器人路径规划(四)--- 考虑机器人模型下的运动规划KINODYNAMIC PATHFINDING

news2024/12/24 2:59:34

目录

1 动力学概念简介

2 State Lattice Planning

3 Boundary Value Problem

4 混合A*算法 Hybrid A*

5  Kinodynamic RRT*


1 动力学概念简介

        一种生成机器人的运动同时受限制于运动学的约束(避障)以及动力学的约束(在速度加速度力的约束),既要保证运动的安全性(避障)还要保证微分的约束(力、加速度的约束)。

        真正的机器人是无法当作质点处理的。不可能像RRT*那样走直线的。

        做运动规划时也要考虑轨迹优化,而不单单在后端。(需要过渡,有个好的初值)。

        并且很重要的,轨迹往往只能在局部被优化,看下面右面的紫色和绿色就可以。(虚线是优化过后的路径)

        这是一些经典的运动模型:

http://planning.cs.uiuc.edu/node659.htmlicon-default.png?t=N7T8http://planning.cs.uiuc.edu/node659.html        下面是简化的小车的模型:

小车模型icon-default.png?t=N7T8http://planning.cs.uiuc.edu/node658.html

2 State Lattice Planning

        We have many weapons to attack graph search.
        Assume the robot a mass point is not satisfactory any more.
        We now require a graph with feasible motion connections.

        We manually create (build) a graph with all edges executable by the robot.

        This is the basic motivation for all kinodyanmic planning.State lattice planning is the most straight-forward one.

        我们其实在第二章中已经完成了对机器人控制空间的离散:

        我们在第三章中的PRM,我们对机器人的状态空间离散化了:

        对于真正的机器人动力系统,我们要建立一个描述机器人运动的微分方程:\dot{s} = f(s,u),s为机器人的状态(坐标,高阶导数速度加速度等),u是输入。

        我们需要知道机器人的初始状态s_0以及描述机器人变化的微分方程\dot{s} = f(s,u)

        如果我们选择不同的系统输入u,保持一段时间T,系统有不同的表现:(无导向性)

         在状态空间采样,选择一个终点的状态s_f,从s_0,s_f解出u,T:(有导向性、有贪心性质)

         我们看一下在控制空间采样的实例:

        输入的是u加速度作为控制的输入,状态量s为位置以及速度,系统的方程为线性方程:

        我们模型是加速度作为输入,系统的位置在x_0,初速度为v_0,我选取八个不同的状态给定不同的加速度给系统做一个前向的驱动,我们根据给定的位置x_0、初速度为v_0,在T=1.0时在什么位置。(就是系统在不同的初始状态下达到了某个状态)。

        高阶也是一样,不过初始的状态就是速度和加速度了。

        那我怎么还原中间的运动呢?状态转移方程!!

        s(t)为随时间变化的函数,它和初始状态s_{0}和整个运动过程选取的控制量u_m(常数)关系。我们想知道t=\tau时刻时状态到底是什么?

        那什么是State Lattice呢?

        这个图就是一个Lattice Gragh,其实就是给定一个初始的状态(初始状态:位置、速度),给定不同的控制高维输入(input)(加速度)让系统到达每个位置。然后我们在下一个地方依次做这些事情,就成了这个图。左图是九份离散化的图,右图是二十五份离散化的图。

        思考?我们在search-base planing的时候,是不是一定要先给定初始状态,把所有的驱动信息都计算出来(把所有的graph建完之后),肯定不是!如果我们有一个非常好的启发式函数的话,其实可以非常有目的性的导向。(节省计算、存储成本)。

        如果我们是小车模型呢?

        我们用它的位置(x,y)和朝向\theta作为状态量来描述小汽车的模型,它的控制输入是油门和打方向盘的角度,如果我们想离散化控制输入得到一个搜索树怎么做呢?

        假设我们已经有一个搜索树了如右图,从搜索树找到一个s节点,选择一个控制输入u,固定一个时间\tau,状态向前积分,如果边有障碍物则不可以,如果没有障碍物加入边。

        我们看一下在状态空间离散化的实例:

        先举一个例子,如果我们不考虑小汽车的模型,各个地方都可以运动,那么天然就是一张栅格地图,均匀的把地图进行切分:

        如果我们考虑汽车模型,也就是图b汽车不能左右侧滑的,只能6种运动方式,我们把这六种状态提取出来进行反演,看看这六条边如何到达的。

        如图是两层的lattice graph。

        比较一下:

        1.控制空间采样没有目的性,状态空间采样(马路离散化很多份)可以保证目的性。

        2.离散化控制空间自由度很低(我们固定输入u在一段时间内只是匀速、匀加速....)会很大的受初始状态的影响。比如我们机器人前方有障碍物,如果我们离散的不均匀这次采样可能都撞车...

3 Boundary Value Problem

        我们来看最简单的Boundary Value Problem。

        假设一个一维的无人机系统,只考虑起点、终点的状态x(0),x(T)

        一个简单的做法是将x的运动轨迹用多项式参数化:

        这个其实就是把t=0时刻带入,x(0)=c_0=a,求导,{x}'(t=0) = 5c_5t^4 + 4c_4t^3+3c_3t^2+2c_2t+c_1 = 0 = c_1,同样在T点,求多阶导数也是一样,我们可以得到很多解,但是如何最好解呢?

        我们的问题:
        我希望我们无人机系统从一个状态到另一个状态,无人机系统在这段时间的jerk积分是最小的?!从OBVP解决(Optimal Boundary Value Problem (OBVP))

        K表示在某个轴(我们简化问题,在某个轴独立运行),系统的状态量s_k包含三个量:(p_k,v_k,a_k),选取的输入为u_k=j_k加速度的导数。那么系统的模型\dot{s_k}s_k求导,p_k就不存在了。因此\dot{s_k} = f_s(s_k,u_k) = (v_k,a_k,j_k)

        如何解决:极小值原理

        我们需要定义问题的三个协态costate,\lambda = (\lambda_1, \lambda_2 ,\lambda_3 ),System model有多少个变量,就有多少个costate,我们接着定义Hamiltonian function,它的获得方法如下:

        通常来说,最优控制的问题目标函数由两项定义:

        终末状态的惩罚项(T时刻的状态有没有到一个状态)、系统在运行过程中的能量的损耗。

        首先要写出汉末雅顿方程把协态应用进去:

        它是关于系统的变量s,输入u以及协变量\lambda的方程。我们要求解的是最优的s^*(t)以及最优的控制输入u^{*}。它用下列的微分方程来解决:

        太抽象了....

        这里的j^2就是

        \lambda的导数:H对\lambda _k的求导(p、v、a)

        解微分方程,其实是一组解:

        我们先求u^*,使得汉末雅顿方程最小的解,我们把\lambdas^*(t)带入:

        因为s^*(t)已经是最好的了,因此v^*,a^*也出来了,我们只需要考虑H的第一项和第四项:其实就是求\frac{1}{T}j^2 + \lambda _3j的极值。那么就对j求导让其等于0即\frac{2}{T}j + \lambda _3=0。j的最优解我们可以求出。带入可以求出:

        那么s^*(t)怎么求呢?直接积分就可以了。

        我们就解出来啦~,记得把初始条件T=0时刻的边界条件代进去。

        现在还有\alpha ,\beta ,\gamma没确定,我们用末尾边界条件来确定。

        J只和T有关!

        因此我们做的就是给定一个初始的state,给定一个末尾的state怎么求出一个最优解。

        启发式函数:假设不存在障碍物、假设不考虑动力学。

        具体的形式如下:
 

4 混合A*算法 Hybrid A*

        流程如何呢?我们前面说过了在栅格地图上进行A*算法就是在栅格地图找一条path,Lattice Planning是自己构建一个搜索图或者搜索树(这里我们要给定一个机器人模型将控制空间离散化),比如说我们取控制空间为u\epsilon [-u_{max},+u_{max}],在可行控制空间中我们把控制空间做多等分,用每一个控制空间把系统做前向的推移。会得到一个非常稠密的Lattice Planning。(能不能结合栅格地图进行剪枝使控制空间更鲁棒性,不会出现前面的问题)。

        其实就是在搜索过程中我选取不同的control input驱动系统不同向前积分,积分出来的系统的机器人的state在栅格地图的每一个节点只记录一个机器人可行的state。如图三。

        看一下代码:

        对比普通A*:

        启发式函数:选择动力学相关的启发式函数

        扩展节点:A*找左右上下邻居,JPS找左右斜对角跳点的邻居,Hybrid A*寻找控制输入的驱动下去找系统的state邻接的state的过程。

        记录state、g值更新(更好路径的赋予)也不一样。.

        

        如何设计更好的启发式函数呢?

        1.二维欧式距离

        2.不考虑障碍物考虑动力学的启发式函数

        3.不考虑障碍物考虑动力学的启发式函数可能在碰见死胡同的时候出现问题

        4.不考虑障碍物考虑动力学 + 考虑障碍物不考虑车辆动力学最短路径 (MAX)

        Analytic Expansions(trick):在树的生长过程中(搜索树)以一定的概率去解和终点为解的路径。

5  Kinodynamic RRT*

        回顾一下RRT*的流程:

        Kinodynamic RRT* VS RRT*:

        不同点:采样了新的节点以后进行局部连接,在RRT*中不考虑机器人的运动直接连接直线就可以,但现在机器人用微分方程去描述了,就要解两点边界值问题。

        我们从头看:

        如何采样:现在的状态空间已经扩展了,比如说是个线性系统。我们就要在它全部的运动空间采样。

        如何定义邻近节点:

        用optimal control的知识把新采样的state和邻近节点的state进行OBVP连接。

        3.如何选择父亲节点:

        如何构造球呢?用控制方法!

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

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

相关文章

wpf devexpress 创建布局

模板解决方案 例子是一个演示连接数据库连接程序。打开RegistrationForm.BaseProject项目和如下步骤 RegistrationForm.Lesson1 项目包含结果 审查Form设计 使用LayoutControl套件创建混合控件和布局 LayoutControl套件包含三个主控件: LayoutControl - 根布局…

若依启动步骤

1.创建数据库 2.启动redis 3.改后端的数据库连接配置 4.配置redis redis的地址:cmd中ipconfig命令查看 6.启动后端:如下 7.启动前端ruoyi-ui中 先运行npm install,再npm run dev。项目就启动成功了。 用户名:admin 密码&#x…

Springboot更新用户头像

人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且浪费带宽。 于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新&#…

11.5MyBatis(进阶)

一.${}和#{} 1.$是直接替换,#是预处理(使用占位符,替换成?).前者不安全(SQL注入), 后者安全. 2.$的使用场景: 如果传递的值是sql的关键字,只能使用$,不能使用#(asc,desc). 二.SQL注入 注意: 如果使用${}进行传参,一定要是可以穷举的,并且要进行安全性验证(例如排序,只能传a…

戴姆勒——从豪华私家车到无人驾驶飞机

戴姆勒(DaimlerAG)是梅赛德斯-奔驰和精灵(Smart)汽车的德国母公司。自1926年其前身公司合并为戴姆勒-奔驰公司以来,戴姆勒在生产豪华和消费型汽车、卡车和公共汽车方面有着悠久的历史。 如今,除了以其精密设计的汽车闻名外,该公司还在设计、…

PACS医学影像信息化数字平台源码

PACS系统对医院影像科意义重大,将业务量巨大的影像检验流程依托于信息化技术,对于进行信息化建设的医院而言,是十分必要的。 PACS系统源码,集成三维影像后处理功能,包括三维多平面重建、三维容积重建、三维表面重建、三…

Redis(哈希Hash和发布订阅模式)

哈希是一个字符类型字段和值的映射表。 在Redis中,哈希是一种数据结构,用于存储键值对的集合。哈希可以理解为一个键值对的集合,其中每个键都对应一个值。哈希在Redis中的作用主要有以下几点: 1. 存储对象:哈希可以用…

计算机视觉:驾驶员疲劳检测

目录 前言 关键点讲解 代码详解 结果展示 改进方向(打哈欠检测疲劳方法) 改进方向(点头检测疲劳) GUI界面设计展示 前言 上次博客我们讲到了如何定位人脸,并且在人脸上进行关键点定位。其中包括5点定位和68点定…

《洛谷深入浅出基础篇》——P3405 citis and state ——哈希表

上链接:P3405 [USACO16DEC] Cities and States S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3405 上题干: 题目描述 Farmer John 有若干头奶牛。为了训练奶牛们的智力,Farmer John 在谷仓的墙上放了一…

UE5 - ArchvizExplorer - 数字孪生城市模板 -学习笔记

1、学习资料 https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://karldetroit.com/archviz-explorer-documentation/ 官网下载的是一个简单版,需要下载扩展,并拷贝到项目录下,才有完整版 https://drive.googl…

Vatee万腾的科技征程:Vatee数字化创新的前沿探讨

在Vatee万腾的科技征程中,我们目睹了一场数字化创新的引领之旅,探讨了Vatee在科技前沿的独到见解。Vatee万腾不仅仅是一家科技公司,更是一支前行不辍的冒险队伍,通过不断突破自我,探索未知领域,引领着数字化…

TableUtilCache:针对CSV表格进行的缓存

TableUtilCache:针对CSV表格进行的缓存 文件结构 首先来看下CSV文件的结构,如下图: 第一行是字段类型,第二行是字段名字;再往下是数据。每个元素之间都是使用逗号分隔。 看一下缓存里面存储所有表数据的字段 如下图&#xff…

《向量数据库指南》——TruLens + Milvus Cloud构建RAG深入了解性能

深入了解性能 索引类型 本例中,索引类型对查询速度、token 用量或评估没有明显影响。这可能是因为数据量较小的关系。索引类型对较大语料库可能更重要。 Embedding 模型 text-embedding-ada-002 在准确性(0.72,平均 0.60)和答案相关度(0.82,平均0.62)上优于 MiniLM Embeddin…

wpf devexpress 开始点

此教程示范如何创建registration form和DevExpress WPF Data Editors 开始点 此项目源码 这个解决方案包含几个项目-每一个项目对应一个教程 RegistrationForm.BaseProject项目是基于工作的解决方案。项目包含三个视图:MainView,RegistraionView&…

正版软件|Kaspersky 杀毒软件 - 全方位安全软件

卡巴斯基 全方位安全软件 一款产品满足 您的全部安全需求, 通过屡获殊荣的保护产品抵御黑客、病毒和恶意软件,获得无与伦比的安全感。此外还有支付保护和隐私保护工具,为您提供全方位保护。包含高级版功能: 免费 Kaspersky Safe …

Git企业开发级讲解(三)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、版本回退1、内容2、演示 二、撤销修改1、情况⼀:对于⼯作区的代码&#xff0c…

GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain

简介 gem5中的 NoC部分是Garnet实现的,但是Garnet并没有单独的时钟域,而是保持ruby一致,要做noc的DVFS,便是要改ruby的 改电压 #这里只是生成一个随便变量名,存一下值。改是和频率一起的 userssaved_voltage_domain…

【MyBatis】写了 10 年的代码,我最怕写 MyBatis 这些配置,现在有详解了

在使用 mybatis 过程中,当手写 JavaBean和XML 写的越来越多的时候,就越来越容意出错。这种重复性的工作,我们当然不希望做那么多。 还好, mybatis 为我们提供了强大的代码生成--MybatisGenerator。 通过简单的配置,我们…

新版JetBrains ToolBox【Windows】修改应用安装位置

WIndows下新版的JetBrainse ToolBox 无法修改应用安装路径 关闭 ToolBox 应用修改配置文件.settings.json 路径:C:\Users\用户名\AppData\Local\JetBrains\Toolbox "install_location": "xxx",

早晨暖心的早安问候语,祝好心情从清晨开始,愿你享受美好生活每一天!

1、冬天里,重调理;多锻炼,日光浴;早安睡,晚游历;勤开窗,通空气;暖腹背,寒不欺;适滋补,强体力;心乐观,无忧虑;温…