【现代机器人学】学习笔记九:运动规划

news2025/1/13 10:30:33

本节和前一节 【现代机器人学】学习笔记八:轨迹生成 不同,侧重于避障的内容。

有一些我认为的重要的基本的概念:

1.路径规划是一个纯几何问题,寻找一条无碰撞路径,不涉及动力学和时间相关内容。因此路径规划是运动规划的子问题,运动规划是要涉及到动力学、时间、运动约束等内容的。
2.控制输入的总数小于自由度数目,机器人无法跟踪多条路径。
3.如果解存在,运动规划能在有限时间找到解,并且在没有解的情况下报告错误,认为 该运动规划算法是完整的。
4. 对问题进行离散化表示,能在分辨率层级上找到解,称 算法在分辨率层级上是完整的。
5.在时间趋近于无穷大的时候,找到解的概率趋近于1,称 算法在概率上是完整的。

位形空间障碍

位形空间C可以被划分为两部分,自由空间和障碍空间。关节限位可以被当作位形空间中的障碍物处理。

其他内容可以看书中的图,内容挺简单的。

到障碍物的距离与碰撞检测

可以用不同分辨率的球体来模拟机器人和障碍物,所以机器人和障碍物之间的距离为:机器人和障碍物上最近的球体的球心的距离减去两个球体的半径。

A*算法

A*算法主要是启发式函数h和代价函数g相加得到的f值来判断节点的分数,并优先扩展f分数低的节点周围的点,并同时更新代价函数g。
实现:
python版: 利用Python实现A*算法路径规划 - 静水流深的文章 - 知乎
这个内容写的非常的好,内容直观,并且有对应的可视化代码。
C++版本:
推荐一个博主的实现,曾经在工程中用过,感觉非常好。
https://github.com/zhangpanyi/a-star-algorithm 具体来说,做了几点优化: 1.建立一个和地图一样大的二维数组,通过查询的方法快速确定节点是否在openlist和closelist中。 2.构建二叉堆,通过上滤的方式实现sort操作,快速查找f值最小的节点。 3.将1进一步优化,将二维数组更新成一维数组。 4.新增节点的时候会调用C++的new函数频繁分配内存,在这里作者摘选了box2d(一个模拟2D刚体物体的 C++物理引擎)的小对象分配器来代替C++的new函数,又将速度提升了3倍。 最终效果:1000*1000的地图中以几毫秒的速度实现路径的搜索,十分高效和快速,建议大家去学习一下。

关于A*算法的内容,有几个需要掌握:

  1. 启发式函数如果估计为0,则算法退化为迪杰斯特拉算法。而如果每条边成本都相同,则迪杰斯特拉算法退化为广度优先搜索算法。

  1. 启发函数的估计值如果小于到终点的真实值,则一定能找到最优解。

  1. 对启发式函数乘以大于1的常数因子,对启发函数进行过高估计,A*算法则慢慢偏向于贪心算法,找到解可能更快。但是这种方法不能保证找到最优解。

  1. 允许斜着走,则使用欧几里德距离。不允许斜着走,则使用曼哈顿距离。东南西北邻居成本为1,对角邻居成本是根号二。工程上可以使用近似成本5和7来用整数计算代替。

  1. A*算法路径规划器是分辨率完备的。

波前规划器(wavefront)

一言以蔽之:目标位形分数为0,用广度优先,从0开始向外扩散,扩散完地图后,从当前位置出发,按数字下坡即可。

有运动约束时的网格方法

轮式移动机器人

这个书中讲的很复杂,但其实就是考虑到了机器人的动力学约束,然后使用一个控制时间Δt,对离散的控制集合(线速度角速度)在Δt内进行积分,并且根据结果判断是否碰撞,并对应的扩展网格。

要求:

  1. Δt要小,让运动步长变小

  1. 网格尽可能大,节省计算

  1. 确保离散控制集合中的任何控制在Δt时间内,能从一个网格移动到另一个网格。

机械臂网格规划

简单总结:

根据有限关节力矩情况下可行的加速度集合,确定离散的动作集合。

根据动作集合中的动作,用Δt进行积分,确定机械臂关节位置。并通过位置判断是否发生碰撞。广度优先搜索完,确定各个时刻的加速度动作。

为分辨率提升倍数, 为时间节省的倍数, 为关节数:
完成搜索的计算时间会扩充 倍。

RRT算法(快速探索随机树)

步骤可以简单概括:地图上随机采样点,然后找树中最近的点,然后从最近的点到随机点的方向延伸一段距离,未碰撞则加入树中。直到到达终点附近。

(当然也有算法随机采样点,是有0.5的概率随机采样,有0.5的概率直接选取终点)

1.RDT(快速探索密集树,Rapidly-exploring Dense Tree), 不是采用随机采样的方法,而是采用确定性采样的方案, 在多分辨率的网格上逐渐密集采样。这个变种方法叫RDT。
2.RRT在“确定最近点“上可能没有那么简单,因为以汽车为例,侧方的看似离得近,因为它不能横着走,所以其实反而是不近的。
3.双向RRT:从起点和终点倒着走,交替生长,并且尝试连接两个树。(速度更快,但是缺点是可能找不到连接两个树的点)
4.RRT*:不断对节点进行重新连接,(判断各个点是否能以较低的代价到达新扩展的点)。RRT和RRT*在概率上是完备的,但RRT*找到的解更接近于最优解。

PRM算法(概率路线图Probabilistic RoadMap)

先采样N个点,然后找到每个点的k个最近的邻居,确定无碰撞的连接关系并进行连线。

在障碍物附近更密集的采样,可以提高通过狭窄通道的可能性。

虚拟势场法

  • 目标提供吸引力,障碍物提供斥力。并且限制最大力,避免在障碍物附近产生无限大的力。

  • 缺点是机器人可能会被卡在势场的局部最小值。

  • 在得到合力以后,如何控制机器人?1.应用算出的力加阻尼,减少振荡。2.把力算作速度指令,消除振荡。

  • 使用导航函数(navigation function)替换虚拟势函数。(即需要满足几点:1.在位置上两次可微,2.障碍物边界有最大值,3.目标点有最小值,4.在所有满足导航函数对位置求导为0的地方,二阶导数的海塞Hessian矩阵满秩),如果这样可以使得没有局部最小值。

  • 对于受约束的机器人,可以把得到的合力,根据动力学那节的内容【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics),用P矩阵,把用于约束的力滤掉,剩下的力用于控制。

非线性优化

和slam中的许多问题一样,非线性优化也是一个很好的方法。

在得到一个初值的情况下启动流程,并且参数化轨迹、或参数化控制,或二者都参数化(并且提供轨迹和控制之间的约束),进行非线性优化,通过优化的方式,得到最终的结果参数。

平滑

  1. 对于非线性优化问题,添加一个成本代价函数,惩罚迅速变化的控制,从而使得控制平滑。这个思路还是蛮常见的,在我之前涉及到的强化学习控制机器人上也是一个经典的思路,其实并不限于优化问题。

  1. 尝试连接较远的无碰撞点,这样近的波折点就可以被替换为一个长长的直线,避免之字形折返。

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

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

相关文章

请查收 | 2022 阿里妈妈技术文章回顾

新年伊始,万象更新!转眼,阿里妈妈技术已陪伴大家走过601天~在此,感谢每位读者朋友的支持与关注回顾2022,我们分享了60篇原创技术文章、发布了1本营销科学系列白皮书、开源了1项向量召回技术方案;阿里妈妈营…

Netty基础入门——NIO【1】

Netty基础入门——NIO【1】 1 NIO 1.1 三大组件 1.1.1 Channel && Buffer Channle channel类似于stream,是读写数据的双向通道,而stream要么是输入要么是输出 #mermaid-svg-9w1vFFYCVQmRvHja {font-family:"trebuchet ms",verdana…

YACC移进规约冲突案例分析

总结 总结: bison给出的用例是发现冲突的最便捷方法。 第一种用例:明确用例(一个Example),直接反应问题。第二种用例:混淆用例(两个Example),解析器无法区分两条语句。…

jenkins 节点部署

1、节点注册 登陆jenkins master界面 路径:首页-->系统管理--> 节点管理-->新建节点(New Node) 插曲:我在新的服务器部署master节点,显示剩余交换空间为0B 处理方式请查看:Jenkins - Free Swap…

关于MCU的BootLoader的一些理解

一、关于STM32单片机IAP升级中if(((*(__IO uint32_t*)Addr_App) & 0x2FFE0000) 0x20000000)语句的理解 参考自:https://blog.csdn.net/weixin_45394120/article/details/122732203?spm1001.2014.3001.5502 疑问: 1、为什么要用Addr_App里的数据…

Web操作系统漏洞发现——工具使用总结

目录 (一)web层面 1、信息收集 0x01 网站源码自己开发 0x02 网站源码使用开源CMS 2、可维护Poc 0x01 pocassist 0x02 afrog 3、APP渗透 0x01 在BP上添加转发端口 0x02 Xray进行监听 0x03 触发数据 4、Goby (二)操作系统层…

xss.haozi靶场通关

做完xss-labs靶场后,再继续做这个靶场,感觉这个不是很难,毕竟在第一个靶场也获取了一些经验,但是这个靶场偏向技巧,所以还是以了解为主。 0x00: 分析:对我们的代码未作出限制,因此这里可以使用…

如何用 nodejs 进行 sha1 加密验证,微信公众号开发验证

如何用 nodejs 进行 sha1 加密验证,微信公众号开发验证 一、问题 今天在摆弄微信公众号的时候,遇到这样一个问题: 我的后台是 nodejs 写的,express 框架,官方开发接入的验证代码是 php 写的,其中有一个部…

C语言之蓝桥杯习题(3)☞暴力求解版(思路写在解题过程中)

第一题.1.问题:小蓝数字卡片题小蓝有很多数字卡片,每张卡片上都是数字0到9。 小蓝准备用这些卡片来拼一些数,他想从1开始拼现在小蓝手里有0到9的卡片各2021张,共20210张,请问小蓝可以从1拼到多少?2.解题过程&#xff…

【Docker】(三)使用registry远程镜像仓库管理镜像

1.前言 本系列文章记录了从0开始学习Docker的过程,Docker系列历史文章: (一)基本概念与安装使用 (二)如何使用Docker发布一个SpringBoot服务 在上一篇中留下了一个问题,使用Docker发布服务的方…

【开源代码 | MATLAB线性阵列仿真】

本文编辑:调皮哥的小助理 1、16阵元均匀线阵方向图 %8阵元均匀线阵方向图,来波方向为0度 clc; clear all; close all; element_num16;%阵元数为16 d_lamda1/2;%阵元间距d与波长lamda的关系 thetalinspace(-pi/2,pi/2,200); theta0[0.2 0.1];%来波方向 w…

systemd wsl 测试笔记

文章目录systemd 简介WSL systemdsystemctljournalctlhello serviceSleep 与 Timeout 测试Requires 测试After 测试systemd 简介 Linux 从关闭到运行, 完整的启动和启动过程有三个主要部分: 硬件启动(Hardware boot): 初始化系统硬件Linux 引导(Linux boot): 加载 Linux 内核&…

基于ERNIELayoutPDFplumber-UIEX的多方案学术论文信息抽取

本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5196032?contributionType1 0.问题描述 可以参考issue: ERNIE-Layout在(人名和邮箱)信息抽取的诸多问题阐述#4031 ERNIE-Layout因为看到功能比较强大就尝试了一…

Linux安装mongodb集群整合SpringBoot

一、Mongodb集群安装 本文介绍基于mongodb的副本机制搭建集群 192.168.139.186CentOS Linux release 7.7.1908 (Core)192.168.139.187CentOS Linux release 7.7.1908 (Core)192.168.139.188CentOS Linux release 7.7.1908 (Core) 准备工作 关闭selinux,关闭防火墙…

近场通信到2027年将达到467.81亿美元

2020年,全球近场通信市场规模为178.75亿美元,预计到2027年将达到467.81亿美元,2021年至2027年的CAGR为14.8%。这是根据Market Statsville Group (MSG)的一份新报告得出的。 近场通信(NFC)是基于无线接口的一系列协议,使得通信设备…

Linux系统的优缺点

相比 Windows 系统,Linux 系统有更好的稳定性,那么除此之外,Linux 系统还有那些优点(或者不足)呢?一、大量的可用软件及免费软件Linux 系统上有着大量的可用软件,且绝大多数是免费的&#xff0c…

2021年第十二届蓝桥杯软件类省赛python组“回路计算“问题

说明 这一题我不会做,看了官方给出的标准答案之后才明白,我把我学到的思路写下来。 题目 蓝桥学院由21栋教学楼组成,教学楼编号1到21。对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通…

CRM之线索管理的demo搭建方法

1、简介 1.1、案例简介 本文将介绍,如何搭建CRM-线索管理。 1.2、应用场景 CRM-线索管理应用完整记录所有线索资料,合理的对线索进行领取、分配、退回、跟进,实现线索管理智能化。 2、设置方法 2.1、表单搭建 1)新建主表【新…

【日常系列】LeetCode《25·贪心2》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 976 &#xff1a;三角形的最大周长 https://leetcode.cn/problems/largest-perimeter-triangle/ 提示&#xff1a; 3 < nums.length < 10^4 1 &l…

Dubbo优雅启动(附源码分析)

Dubbo优雅启动 1. 启动有什么问题 我们知道&#xff0c;应用在运行了一段时间后&#xff0c;执行速度会比刚启动的时候要快。这是因为在 Java 里面&#xff0c;在运行过程中&#xff0c;JVM 虚拟机会把高频的代码编译成机器码&#xff0c;被加载过的类也会被缓存到 JVM 缓存中…