移动机器人路径规划(七)--- 基于MDP的路径规划MDP-Based Planning

目录

1 什么是MDP-Based Planning

2  worst-case analysis for nondeterministic model

3 Expected Cost Planning

4  Real Time Dynamic Programming(RTDP)


1 什么是MDP-Based Planning

        之前我们从起点到终点存在很多可执行路径,我们可以通过执行的时候根据环境的变化去选择最优的路径。

        到目前为止,我们假设机器人是在理想情况下进行的planning(机器人的执行是完美的、机器人的估计是完美的)。

        用上面两幅图说,我们规划一个地点到另一个地点的路线,我们假设让机器人走一个格子它就走一个格子。右图的话我们假设精准的反映环境的情况,估计好位姿以后,假设机器人精准的到了终点的位姿不存在意外情况。

        实际并非如此:

        当在实际应用中,执行和状态估计都不是完美的。

         • 执行不确定性:打滑、崎岖地形、风、空气阻力、控制误差等。

         • 状态估计不确定性:传感器噪声、校准误差、不完美估计、部分可观测性等。

        不确定性可以从机器人的视角分为两类,这表明机器人可以利用多少信息。

        不确定性模型

        • 非确定性:机器人不知道会有什么类型的不确定性或干扰被添加到其行为(下一步动作)中。(偏移目标点非常远受自然环境影响)

         • 概率性:机器人通过观察和收集统计数据对不确定性有一定估计。(运行一部分后直到自己受干扰程度)

        为了正式描述这个概念,我们首先引入两个决策者来模拟不确定性的产生,然后是带有不确定性的规划类型。

        决策者(游戏参与者):

         • 机器人是主要的决策者,根据完全已知的状态和完美执行进行规划。

         • 自然界向机器人制定的计划添加不确定性,这对机器人来说是不可预测的。

        Formalization-7.1:与自然界的博弈(独立博弈)
• 非空集合 U 称为机器人行动空间(robot action space)。每个 u ∈ U 被称为机器人行动。
• 非空集合 Θ 称为自然界行动空间(nature action space)。每个 θ ∈ Θ 被称为自然界行动。
• 函数 L:U × Θ → R ∪ {∞},称为成本函数(cost function)或负奖励函数。

        Formalization-7.2:自然界了解机器人行动(依赖博弈)
        • 非空集合 U 称为机器人行动空间。每个 u ∈ U 被称为机器人行动。
        • 对于每个 u ∈ U,有一个非空集合 Θ(u) 称为自然界行动空间。
        • 函数 L:U × Θ → R ∪ {∞},称为成本函数或负奖励函数。
        在机器人与自然界进行博弈时,对机器人来说什么是最佳决策?

        一步最坏情况分析(One-step Worst-Case Analysis)
        • 在非确定性(Nondeterministic)模型下,独立博弈中的 P(θ) 和依赖博弈中的 P(θ|u_k) 是未知的;
        • 机器人无法预测自然界的行为,并假设它恶意地选择会使成本尽可能高的行动;
        • 因此,假设最坏情况下做出决策是合理的。

        我们穷举所有的nature action space,从中筛选出最不利的这种情况让机器人执行这个动作将最不利降到最低。

        • 在概率模型下,独立博弈中的 P(θ) 和依赖博弈中的 P(θ|u_k) 是已知的;
        • 假设已经观察到了应用的自然界行动,并且自然界在选择行动时采用了随机化策略。
        • 因此,我们优化获得平均成本(average cost to be received)。

        机器人每执行一个动作,环境会对齐施加各种影响,我们去求一下各种影响的期望选择让期望值最小的一个动作。

        多步的情况下呢?

        Formalization-7.2:带有自然界的离散规划
1. 具有初始状态 x_s 和目标集合 X_F ⊂ X 的非空状态空间 X。
2. 对于每个状态 x ∈ X,有一个有限且非空的机器人行动空间 U(x)。对于每个 x ∈ X 和 u ∈ U(x),有一个有限且非空的自然界行动空间 Θ(x, u)。

 3.状态转移函数 f (x, u, θ) 对于每个 x ∈ X, u ∈ U,和 θ ∈ Θ(x, u):

4.一组阶段(机器人不由但一阶段表示),每个阶段用 k 表示,从 k = 1 开始并无限持续,或者在最大阶段 k = K + 1 = F 结束。

5.一个阶段叠加的成本函数 L。让 x̃ F,ũ k,θ̃ K 表示截止到第 K 阶段的状态历史、机器人行动和自然界行动:

        马尔可夫决策过程(MDP)
        在学习领域,MDP 是一个 4 元组 (S, A, P, R),在规划领域则是 (X, U, P, L):
        • S 或 X 是状态空间,
        • A 或 U 是(机器人)动作空间,
        • P(x_k+1 |x_k, u_k) 是概率模型下的状态转移函数,在非确定性模型下退化为一个集合 X_k+1 (x_k, u_k),
        • R(x_k, x_k+1) 是即时奖励,或者是由于 u、θ 从 x_k 过渡到 x_k+1 的负一步成本 −l(x_k, u_k, θ_k)。
        面对不确定性进行规划的第一个难题在于用 MDP 模型适当地形式化我们的问题。

        机器人从x_I移动到x_G,状态空间就是布满黑点的区域。动作空间就是五种(停留在原地、上下左右)。

        nature的动作空间:

        1.我们假定机器人在x_k这个位置执行了u_k动作含一个随机的高斯误差。(连续)

        2.对nature的动作空间进行离散化的定义,机器人在x_k这个位置执行了u_k动作加上一个额外的动作。(离散)

        代价函数l:下一个状态与当前状态的距离差。

        我们希望找一个路径(以最小的代价移动到目标位置)。

        \pi是状态空间到动作空间的一个映射,它规定了在什么状态下我应该执行一个什么样的动作,是一个离散集合的形式。

        定义衡量policy好坏的变量:

33

2  worst-case analysis for nondeterministic model

        我们拿一个具体的例子:

        第K+1步最优的cost to go已经知道了,我们现在在当前状态x_k机器人执行了特征的动作u_k,机器人能从这个x_k转移到具体的哪个x_{k+1}是由\theta _k决定的。我们找一个\theta _k使得单步的cost加上K+1的cost to go和最大的\theta _k,我们再去选择cost最小的u_k

        我们假设终点处的cost to go是0,其他地方未知。S3来说,cost to go为0+1。s1来说,只有一个u,但是有两个\theta,一个是单步2 + 终点0,另一个分支的话 2 + s2的cost to go(还未计算)。

        从终点到起点迭代求解。

        举一个例子:

        首先我们将G(x_F) \leftarrow 0,其他的设置为无穷,将openlist初始化为S_g

        下一次待扩展状态为S_g。下一步找其前继节点。

        对于s_3,计算G(x_k = s_3) = 1 + G(x_{k+1} = s_g),openlist添加s_3

        对于s_1G^{*}_{k}(x_k=s_1) = min \{max \{2+0,2+inf \} \}(inf.....不能更新,无法放入openlist),G^{*}_{k}(x_k=s_3) = min\{ 1+0 \}

        对于s4,相同的。

        对于s2,也是相同的。不过它有两个前继节点S_s,s_1。先对S1进行处理:

        最后更新Ss:

        优点、缺点:

 

3 Expected Cost Planning

        那么问题来了?

        我们来看算法描述:

        举个例子把:

        首先我们把G \ value初始化为0。选择一个迭代顺序s_1 -> s_2 ->s_3->s_4->s_5。       

        先来看s_1的更新:

        在来看s_2的更新:

        在来看s_3的更新:

        在来看s_4的更新:

        最后对s_s的更新:

        经过一轮之后我们有了G。我们接着进行第二轮迭代:

        。。。。第三次迭代

        如何判断收敛?边界条件??如何改进??迭代次序怎么来改进??

        优点&缺点:

        1.反映的是平均的水平

        2.不一定是最优

4  Real Time Dynamic Programming(RTDP)

        看看实际例子吧:

        根据每个节点到s_g的数量进行更新。

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

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

相关文章

Python实现一箭穿心

文章目录 🎄效果🏳️‍🌈Turtle模块🌹代码🌺代码讲解 🎄效果 🏳️‍🌈Turtle模块 Turtle是一个绘图工具,是Python标准库中的一个模块。它提供了一种简单而直观的方式来创…

【C++】内存管理(new与delete)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 本篇文章我们一起来学习C的内存管理方式&…

最新yolov8环境搭建、推理训练一站式超详细教学

1、获取yolov8源码 访问yolov8_github官网,网络不稳定时可能需要加速器。yolov8源码地址 获取方式:直接下载或者git工具克隆 我使用git操作进行演示,复制github上的地址(需提前关闭加速器)。 git clone https://github.com/ultralytics/ul…

UI自动化(selenium+python)之元素定位的三种等待方式!

前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况。这种情况下,需要用等待wait。 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverWait 一、固定等待(sleep) 导入time模块,设定固定的等待时间 缺…

计数问题+约瑟夫问题(map)

目录 一、计数问题 二、约瑟夫问题 一、计数问题 #include<iostream> #include<map> using namespace std; int main() {int n,x;cin>>n>>x;map<int,int>m;for(int i1;i<n;i){if(i>1 && i<10){m[i];}else{int temp i;while (…

解决github无法访问的办法

方法/步骤 1.问题描述&#xff1a;能联网但不能访问github.com 2.找到hosts文件。地址&#xff1a;C:\Windows\System32\drivers\etc &#xff08;一般是在这的&#xff09; 3.不要直接在这修改hosts文件&#xff0c;需要将hosts文件复制粘贴到桌面&#xff08;或其它地方自…

【仿写实现move函数】

仿写实现move函数 一、值的类型 1.左值 描述&#xff1a;能够取地址的值成为左值 int a 10; const int b 15; int *pa &a; const int *pb &b;2.纯右值 描述&#xff1a;赤裸裸的字面值 eg(false , 3 , 12.23等) int a 13; int *p &a; //取a的地址 int …

Datax安装部署及读取MYSQL写入HDFS

一.DataX简介 1.DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/Data…

leaflet对线设置渐变色

效果展示&#xff1a; 引用leaflet-polycolor组件 npm install leaflet-polycolor .vue文件中使用 import leafletPolycolor from leaflet-polycolor; leafletPolycolor(L); const latLngs [[37.03, 111.92], [37.53444, 111.98555], [36.88, 112.12], [37.53444, 112.24], […

MT6893_天玑 1200芯片规格参数介绍_datasheet规格书

天玑 1200(MT6893)是一款专为旗舰级全新5G芯片&#xff0c;它融合了先进的AI、相机和多媒体技术&#xff0c;为用户带来令人惊叹的体验。采用先进的6纳米制程设计&#xff0c;内置各种先进技术。该芯片采用旗舰级的八核CPU架构设计&#xff0c;支持16GB强大的四通道内存以及双通…

每日一练:“打家劫舍“(House Robber)问题 II

有想要了解打家劫舍初级问题的&#xff0c;可以点击下面链接查看&#xff01; 每日一练&#xff1a;“打家劫舍“&#xff08;House Robber&#xff09;问题 I 1. 问题 假设有房屋形成一个环形&#xff0c;即第一个房屋和最后一个房屋也相邻&#xff0c;每个房屋里都存放着一定…

Leetcode—83.删除排序链表中的重复元素【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—83.删除排序链表中的重复元素 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* deleteDuplicates(struct ListNode* head) {i…

【Docker】Docker 仓库管理和Docker Dockerfile

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

MybatisPlus集成baomidou-dynamic,多数据源配置使用、MybatisPlus分页分组等操作示例

文章目录 pom配置示例代码 pom <dependencies><!--mybatisPlus集成SpringBoot起步依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version>&l…

【DP】mobiusp正在创作乐曲

输入样例1&#xff1a; 5 2 1 7 7 1 3 输出样例1&#xff1a; 2 输入样例2&#xff1a; 10 3 2 5 6 4 4 5 7 3 5 6 输出样例2&#xff1a; 1 #include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; typede…

SpringCloud实用-OpenFeign整合okHttp

文章目录 前言正文一、OkHttpFeignConfiguration 的启用1.1 分析配置类1.2 得出结论&#xff0c;需要增加配置1.3 调试 二、OkHttpFeignLoadBalancerConfiguration 的启用2.1 分析配置类2.2 得出结论2.3 测试 附录附1&#xff1a;本系列文章链接附2&#xff1a;OkHttpClient 增…

10.打印楼梯图案和笑脸【2023.11.25】

1.问题描述 打印楼梯图案和笑脸 2.解决思路 3.代码实现 #include<stdio.h> int main(){printf("11\n");for(int i0;i<10;i){for(int j0;j<i;j){printf("FF"); }printf("\n");} return 0; }4.运行结果

《微信小程序开发从入门到实战》学习二十九

3.4 开发参与投票页面 3.4.4 使用label组件扩大单击区域 radio组件的单击区域很小&#xff0c;只有文字左侧的圆圈可以点击&#xff0c;实际使用者一般会期望点击文字也可以选中选项&#xff0c;用label组件包含radio组件&#xff0c;就可以实现点击文字也可以选项。 label组…

MySQL 基于成本的优化

其实在MySQL中⼀条查询语句的执⾏成本是由下边这两个⽅⾯组成的&#xff1a; I/O成本 我们的表经常使⽤的MyISAM、InnoDB存储引擎都是将数据和索引都存储到磁盘上的&#xff0c;当我们想查询表中的记录时&#xff0c;需要先把数据或者索引加载到内存中 然后再操作。这个从磁盘…

Linux的基本指令(二)

目录 前言 学前补充 touch指令 mkdir指令 rmdir指令 rm指令 通配符* man指令 cp指令 mv指令(重要) 补充内容&#xff1a; 1、如何快速在Linux中写出代码 2、如何看待如此多的Linux指令 cat指令 前言 关于Linux的基本指令我们会分三到四篇文章进行分析&#xff0c…