当前位置: 首页 > news >正文

移动机器人路径规划(四)--- 考虑机器人模型下的运动规划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.如何选择父亲节点:

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

相关文章:

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

目录 1 动力学概念简介 2 State Lattice Planning 3 Boundary Value Problem 4 混合A*算法 Hybrid A* 5 Kinodynamic RRT* 1 动力学概念简介 一种生成机器人的运动同时受限制于运动学的约束(避障)以及动力学的约束(在速度加速度力的约束…...

服务器数据恢复—VMware虚拟化下误操作导致服务器崩溃的数据恢复案例

服务器故障&分析: VMware虚拟化,vmfs文件系统,共3块磁盘。工作人员误操作将VMware虚拟化重装系统,服务器崩溃。 正常情况下,重装系统会导致文件系统元文件被覆盖。要恢复数据须找到重装系统前的文件系统残留信息并…...

微服务实战系列之Gateway

前言 人类世界自工业革命以来,无论从金融、货币、制度,还是科技、资源、社会各个方面,都发生了翻天覆地的变化。物质极大丰富,从而也推动了科技的极速发展。当计算机问世也仅仅不到80年,而如今我们的生活处处有它的影子…...

GZ038 物联网应用开发赛题第10套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第10套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考…...

重生之我是一名程序员 35

哈喽啊大家晚上好!今天给大家带来的知识很简单啊,所以今天呢给大家带来的是C语言中的另一个库函数——strlen。 首先,让我先给大家介绍一下它,strlen函数是C语言中的一个字符串处理函数,它用于计算一个字符串的长度&a…...

计算机毕业设计选题推荐-点餐微信小程序/安卓APP-项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

分享禁止Win10更新的两种方法

深恶痛绝 Windows更新简直就是毒瘤,总是在某些不需要的时候提示更新,而且关闭服务后总有办法重启。老是关不掉。 如果每次都是正常更新,好像也没啥所谓,但是总有那么一两次会蓝屏、黑屏、开不了机…… 52出品 下面是吾爱社区找…...

SPASS-回归分析

回归分析概述 确定性关系与非确定性关系 变量与变量之间的关系分为确定性关系和非确定性关系,函数表达确定性关系。研究变量间的非确定性关系,构造变量间经验公式的数理统计方法称为回归分析。 回归分析基本概念 回归分析是指通过提供变量之间的数学表达式来定量描述变量间…...

【使用vscode在线web搭建开发环境--code-server搭建】

官方版本下载 https://github.com/coder/code-server/releases?q4.0.0&expandedtrue使用大于版本3.8.0,因为旧版本有插件市场不能访问的情况版本太高需要更新环境依赖 拉取安装包 []# wget "https://github.com/coder/code-server/releases/download/v4.0.0/code-…...

c++ list容器使用详解

list容器概念 list是一个双向链表容器,可高效地进行插入删除元素。 List 特点: list不可以随机存取元素,所以不支持at.(position)函数与[]操作符。可以对其迭代器执行,但是不能这样操作迭代器:it3使用时包含 #includ…...

【案例】可视化大屏

人狠话不多,直接上效果图 这里放的地图自己去实现吧,如果也想实现3D地球话,等笔者那天有心情写篇文章; 说明:script中methods部分代码是没用,可以直接删掉,根据个人情况去写, 内容:笔者也就对页面布局进行了设计,内容的填充就靠个人了 <template><div :sty…...

js制作动态表单

JS制作动态表单&#xff0c;可以通过以下步骤实现&#xff1a; HTML布局&#xff1a;在HTML中创建一个表单元素&#xff0c;并设置一个ID属性。 <form id"myForm"><label for"name">姓名&#xff1a;</label><input type"text…...

解决Kibana初始化失败报错: Unable to connect to Elasticsearch

现象&#xff1a; 原因&#xff1a; docker run生成容器的时候&#xff0c;指定elastic server时指向了localhost 为什么不能是localhost, 因为这个localhost指向的是容器本身的网络&#xff0c;而elastic用的是物理网络&#xff0c;两个网络是隔离的&#xff0c;所以如果kiba…...

流媒体服务器

市面上优秀的流媒体服务器解决方案有很多&#xff0c;比如SRS&#xff0c;Red5&#xff0c;EasyDarwin&#xff0c;nginx-rtmp&#xff0c;live555&#xff0c;mediasoup等等。 这些服务器框架各有优缺点&#xff0c;没有一款完美的流媒体服务器解决方案&#xff0c;在流媒体选…...

Java GUI小程序之图片浏览器

以下是一个简单的图片浏览器示例代码&#xff0c;它包含了图片放大缩小、拖拽、上一张/下一张查看等功能。你可以根据它进行扩展&#xff0c;提高用户体验。 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.e…...

Kafka-4.1-工作原理综述

1 Kafka工作原理详解 1.1 工作流程 Kafka集群将 Record 流存储在称为 Topic 的类中&#xff0c;每个记录由⼀个键、⼀个值和⼀个时间戳组成。 Kafka 中消息是以 Topic 进⾏分类的&#xff0c;⽣产者⽣产消息&#xff0c;消费者消费消息&#xff0c;⾯向的都是同⼀个Topic。Topi…...

Linux八股文

Linux八股文 第一章 Linux简介 Linux是一种多用户、多任务&#xff0c;支持多线程和多CPU的操作系统&#xff0c;具有免费、稳定、高效的优点&#xff0c;一般运行在大型服务器上。 1.1 常用目录 目录说明/根目录&#xff0c;有且仅有一个&#xff0c;一般只存放目录/home家目…...

SPASS-偏相关分析

基本概念 偏相关分析的任务就是在研究两个变量之间的线性相关关系时控制可能对其产生影响的变量,这种相关系数称为偏相关系数。偏相关系数的数值和简单相关系数的数值常常是不同的,在计算简单相关系数时,所有其他自变量不予考虑。 统计原理 控制一个变量和控制两个变量的偏…...

第二证券:今日投资前瞻:小米汽车引关注 全球风光有望持续高速发展

昨日&#xff0c;两市股指盘中轰动上扬&#xff0c;深成指、创业板指一度涨超1%。到收盘&#xff0c;沪指涨0.55%报3072.83点&#xff0c;深成指涨0.72%报10077.96点&#xff0c;创业板指涨0.53%报2015.36点&#xff0c;北证50指数涨2.64%&#xff1b;两市算计成交9900亿元&…...

Docker中的RabbitMQ已经启动运行,但是管理界面打不开

文章目录 前言一、解决方法方法一方法二 总结 前言 肯定有好多小伙伴在学习RabbitMQ的过程中&#xff0c;发现镜像运行&#xff0c;但是我的管理界面怎么进不去&#xff0c;或者说我第一天可以进去&#xff0c;怎么第二天进不去了&#xff0c;为什么每次重新打开虚拟机都进不去…...

自动化网络图软件

由于 IT 系统的发展、最近向混合劳动力的转变、不断变化的客户需求以及其他原因&#xff0c;网络监控变得更加复杂。IT 管理员需要毫不费力地可视化整个网络基础设施&#xff0c;通过获得对网络的可见性&#xff0c;可以轻松发现模式、主动排除故障、确保关键设备可用性等。 为…...

如何基于亚马逊云科技打造高性能的 SQL 向量数据库 MyScale

MyScale 是一款完全托管于亚马逊云科技&#xff0c;支持 SQL 的高效向量数据库。MyScale 的优势在于&#xff0c;它在提供与专用向量数据库相匹敌甚至优于的性能的同时&#xff0c;还支持完整的 SQL 语法。在这篇文章中&#xff0c;我们将阐述 MyScale 是如何借助亚马逊云科技的…...

《轻松入门!快速安装PyCharm,打造高效Python编程环境》

「Pycharm安装包和相关插件&#xff08;Windows 64位&#xff09;」https://www.aliyundrive.com/s/jByv6vjShVz 提取码: 1234 视频教程&#xff1a;https://www.douyin.com/video/7303106933521763596?previous_pageapp_code_link 第一步&#xff1a;找到一起下载的Pycharm安…...

Golang环境搭建Win10(简洁版)

Golang环境搭建Win10 Golang环境搭建(Win10)一、前言二、Golang下载三、配置环境变量3.1、配置GOROOT3.2、配置GOPATH3.3、配置GOPROXY代理 Golang环境搭建(Win10) 一、前言 Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken…...

【算法每日一练]-分块(保姆级教程 篇1)POJ3648

插讲一下分块 题目&#xff1a;&#xff08;POJ 3648&#xff09; 一个简单的整数问题 前缀和往往用于静态的不会修改的区间和。遇到经常修改的区间问题&#xff0c;就要用分块或线段树来维护了。 分块算法是优化后的暴力&#xff0c;分块算法有时可以维护一些线段树维护不了的…...

【华为OD题库-026】通过软盘拷贝文件-java

题目 有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究。但此电脑除了有一个3.5寸软盘驱动器以外&#xff0c;没有任何手段可以将文件拷贝出来&#xff0c;而且只有一张软盘可以使用。因此这一张软盘是唯一可以用来拷贝文件的载体。科学家想要尽可能多地将计算…...

定量数据和定性数据

定量数据本质上是数值&#xff0c;应该是衡量某样东西的数量。 定性数据本质上是类别&#xff0c;应该是描述某样东西的性质。 全部的数据列如下&#xff0c;其中既有定性列也有定量列&#xff1b; import pandas as pdpd.options.display.max_columns None pd.set_option(e…...

【Linux】:体系结构与进程概念

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux体系结构和进程的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入…...

react-router-dom 版本6.18.0中NavLink的api和属性介绍

React Router 是一个基于 React 的路由库&#xff0c;它可以帮助我们在 React 应用中实现页面的切换和路由的管理。而 NavLink 则是 React Router 中的一个组件&#xff0c;它可以帮助我们实现导航栏的样式设置和路由跳转。 在 React Router 版本6.18.0 中&#xff0c;NavLink…...

八叉树(Octree)和KD树区别?2d tree与3d tree区别?

一、八叉树&#xff08;Octree&#xff09;和KD树 八叉树&#xff08;Octree&#xff09; 结构&#xff1a;八叉树是一种用于三维空间数据的树状结构&#xff0c;每个分支节点恰好有八个子节点。每个节点代表空间中的一个立方体区域&#xff0c;这个立方体区域被均匀地分割成…...