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

目录

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.如何选择父亲节点:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建自定义ChatGPT,微软推出Copilot Studio

11月16日,微软在美国西雅图举办“Microsoft Ignite 2023”全球开发者大会。本次人工智能成为重要主题,微软几乎把所有产品都集成了生成式AI功能并发布了一系列全新产品。 其中,微软重磅推出了Copilot Studio(预览版)&…

IO流-打印流

一,打印流 二,常用方法 三,案例 package Print.sd;import java.io.FileNotFoundException; import java.io.PrintStream; import java.nio.charset.Charset;public class Main {public static void main(String[] args) throws FileNotFound…

RasberryPi 3B+ 树莓派 初识

关于香橙派的学习暂时告一段落,从本节开始学习树莓派3B! 我在亚马逊官网购买了3b和壳子,安装完成后大概长这样: (感觉的确像一台小型电脑主机了) 树莓派的引脚功能图 图参:树莓派3B 引脚图说明…

SELF-RAG: 让LLM集检索,生成跟评判等多种能力于一身

SELF-RAG: 让LLM集检索,生成跟评判等多种能力于一身 提纲 1 简介 2 SELF-RAG 3 实验结论 4 讨论 参考文献 1 简介 尽管基础能力出众,但是大模型只能依赖于被压缩到模型参数中的知识,所以经常会生成不符合事实的回复。针对这种事实性错…

Devart dotConnect ADO.NET Data Providers Crack

开发数据相关 .NET 应用程序的终极解决方案:快速、灵活、全面、功能丰富、支持 ORM 的 ADO.NET 提供程序 概述 实体框架 连接字符串 博客 高性能 ADO.NET 数据提供程序 dotConnect 是基于 ADO.NET 架构和采用多项创新技术的开发框架构建的增强型数据连接解决方​​…

C++初阶-内存管理

内存管理 一、C/C内存分布二、C语言中动态内存管理方式:malloc/calloc/realloc/free三、C内存管理方式new/delete操作内置类型new和delete操作自定义类型 四、operator new与operator delete函数operator new与operator delete函数 五、new和delete的实现原理内置类…

数据同步策略解读

前言 我们都知道在大多数情况下,通过浏览器查询到的数据都是缓存数据,如果缓存数据与数据库的数据存在较大差异的话,可能会产生比较严重的后果的。对此,我们应该也必须保证数据库数据、缓存数据的一致性,也就是就是缓…

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

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

【Hello Go】Go语言工程管理

工程管理 工作区工作区介绍GOPATH设置 包自定义包main包main函数和init函数导入包点操作别名操作_操作 测试案例GOPATH配置go install使用 在我们实际的工作中 直接运用到编译器进行编译链接的场景少之又少 这是因为 在工程中不会只有一个源文件 并且源文件之间也有着相互依赖…

调试/抓包工具

一、Fiddler【推荐window使用】 介绍:个人认为是 Windows 平台最好用的抓包工具; 下载:Fiddler | Web Debugging Proxy and Troubleshooting Solutions 使用方式:这一篇文章写的很全,认真看完就够用了 Fiddler 抓包工…

FL Studio21.2最新版本支持终身免费更新

你是否体验过Tomorrowland现场万人蹦迪的的激情?又是否加入过“死墙(Mosh pit:一种Bass音乐节常有的娱乐方式)”的狂欢盛宴?随着时代发展,以电子音乐为代表的数字音乐已然象征着时尚与潮流。在这股风靡全球…

YB203H系列是一组CMOS技术实现的三端低功耗高电压稳压器

概述: YB203H系列是一组CMOS技术实现的三端低功耗高电压稳压器。输出电流为200mA且允许的输入电压可高达80V。具有几个固定的输出电压,范围从2.1V到12.0V.CMOS技术可确保其具有低压降和低静态电流的特性。最高耐压100W.尽管主要为固定电压调节器而设计,…

Mysql -常见函数

目录 字符串函数 数值函数 日期函数 流程函数 字符串函数 -- 拼接 SELECT CONCAT(Hello, World); -- 小写 SELECT LOWER(Hello); -- 大写 SELECT UPPER(Hello); -- 左填充 SELECT LPAD(01, 5, -); -- 右填充 SELECT RPAD(01, 5, -); -- 去除空格 SELECT TRIM( Hello World )…

群晖邮件设置,错误535 Authenticate failed问题

设置邮件通知或者报警很方便,群晖内部内置这个功能。在设置的时候遇到错误535 Error:authentication failed。 原因是:这个错误就是认证失败! 但是相信很多的同学明明用户名和密码填的是对的,就是说认证失败&#xf…

MATLAB中plotmatrix函数用法

目录 语法 说明 示例 使用两个矩阵输入创建散点图矩阵 使用一个矩阵输入创建散点图矩阵 指定标记类型和颜色 创建并修改散点图矩阵 plotmatrix函数的功能是创建散点图矩阵。 语法 plotmatrix(X,Y) plotmatrix(X) plotmatrix(___,LineSpec) plotmatrix(ax,___) [S,AX,B…

如何啟用 BitLocker來加密硬盤

概述 什麼是 BitLocker: BitLocker 磁碟機加密是一項本機安全性功能,可對安裝 Windows 的磁碟機上的所有內容進行加密。設備加密透過加密來幫助保護您的資料。只有擁有正確加密金鑰(例如個人識別碼)的人才能解密它。 它是如何運…

2.认识中台

1.数字化中台初步认识与建设策略 中台的定义 阿里对中台的定义: 中台是一个基础的理念和架构,我们要用中台的思想建设、联通所有基础服务,共同支持上端的业务。业务中台更多的是支持在线业务,数据中台则提供基础数据处理能力和很多的数据产…

C语言百钱买百鸡(ZZULIOJ1074:百钱买百鸡)

题目描述 百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只? 本程序要求解的问题是:给定一个正整数n,用n文钱买n只鸡&…

跨境电商与文化多样性:市场中的机遇

在数字时代,跨境电商已经成为全球贸易的主要驱动力之一。随着互联网的普及和物流的改善,企业有机会将产品和服务推向全球市场。 然而,随着全球市场的扩大,文化多样性也成为了一个重要的考虑因素。本文将深入探讨跨境电商与文化多…

Wireshark 截取指定端口海量包分析

有个应用要分析一下协议,但是8939,8940传输一下子几个G的数据,但是要分析的端口8939实际上只有几个MB最多,如果用wireshark有界面的程序一截取就会卡死,于是使用命令行方式,截取指定端口的 tshark -i &quo…