一、反应式导航

机器人可以在没有任何地图信息且不清楚自身所在位置的情况下完成复杂的工作任务,比如机器人寻找光源前行,这样的导航方式称为反应式导航。

1.1Braitenberg 车

Braitenberg车是一种非常简单的目标达成机器人,其特点是传感器与电机之间直接连接。小车自身既没有其作业环境的信息,也没有任何路径规划可言,其工作方式是寻求一个标量场的最大值,如光强或化学物质浓度。
执行这行代码可以看到Braitenberg车例程的simulink仿真

sl_braitenberg


传感器函数:

function sensor = sensorfield(x, y)xc = 60; yc = 90;sensor = 200 ./ ((x-xc).^2 + (y-yc).^2 + 200);

该函数返回传感器值s(x,y)∈[0,1]s(x,y)\in\lbrack0,1\rbracks(x,y)∈[0,1],它是一个平面上传感器位置的函数。当传感器越接近标量场场源时,s越大。当到达目标点时,sR=sL=1s_R=s_L=1sR​=sL​=1
小车的速度:v=2−sR−sLv\;=\;2-s_R-s_Lv=2−sR​−sL​。当到达目标点时,小车的速度为0。
转向角:γ=k(sL−sR)\gamma\;=\;k(s_L-s_R)γ=k(sL​−sR​)
开始仿真:


1.2简单自动机

这类机器人具备感知和避开障碍物的能力,感知和驱动之间加了状态机,如遇到障碍物后逆时针绕行,具备一定的记忆能力。
在此处,重点讨论bug2算法。
首先给出一些假设:

  1. 机器人只在网格中活动,且只占一格
  2. 机器人不具有任何非完整约束,可以移向任意相邻网格
  3. 机器人可以确定自己在平面上的位置
  4. 机器人仅可以感知它的下一个位置及目标位置。
    创建一个bug2类:
load map1
bug = Bug2(map);
start = [20,10];%起始点(20,10)
goal = [50,35];%目标点是(50,35)
path = bug.query(start,goal);
bug.plot(path)


bug2算法的路径显然不是最佳,因为沿着障碍绕行至最初路线上耗费时间很多。而且本例中机器人如果顺时针绕行障碍物可能要快很多。bug算法还衍生出很多变种,但它们都是针对某种环境提升了其性能,而对于其他环境则性能会下降。归根结底,不依赖地图使得这种算法的功能受到很大局限。没有全局意识就只能在局部生成最佳路径,但局部的最佳往往不是整体的最佳。

二、基于地图的路径规划

基于对地图的分析,我们可以得到最佳的规划路径,规划的最佳路径不一定最短,要同时考虑可通过性,如路面拥堵性、平整性等。
首先确定地图的表示方法。一个简单且于计算机操作的方式是网格占用法。它是把整个区域划分成若干网格,把每个网格分为占用或非占用。用0表示非占用网格,即机器人的可通行区域,1表示占用网格,即不可通行区域或者说是障碍。即建立一个矩阵,矩阵中0元素代表机器人可以自由移动的空间,矩阵中1元素代表此处有障碍物。
为了简化创建带有障碍物地图的步骤,可以使用“工具箱”中的地图编辑器makemap来创建复杂的地图,它使用了一个简单的交互式编辑

map=makemap(100)
>>makemap:left button, click and drag to create a rectangleor type the following letters in the figure window:p - draw polygonc - draw circlee - erase mapu - undo last actionq - leave editing mode
click a sequence of points, <enter> when done

再对机器人做出一些假设:

  1. 机器人只占一个网格
  2. 机器人不含有任何非完整约束,可自由移动到相邻单元格
  3. 机器人可以确定他在平面上的位置(定位)
  4. 机器人可以利用地图规划路径

2.1距离变换

考虑只有一个代表目标的非零元素的矩阵。此矩阵通过距离变换得到另一个大小相同的矩阵,但其中每个元素的值是它到最初非零目标元素的距离。在机器人路径规划中,我们使用默认的欧氏距离。距离变换的原理是:机器人沿着距离小的方向前进,类似寻找光源强度。

注:(x1,y1),(x2,y2)两点的欧氏距离可以用Δx2+Δy2\sqrt{\Delta x^2+\Delta y^2}Δx2+Δy2​表示。

goal = [50,30];
start = [20,10];
load map1
dx = DXform(map);
dx.plan(goal)
dx.plot()

我们可以看见红色的障碍物区域被叠加到距离地图上,其中任何一点的灰度等级表示了它到目标点的距离(颜色越深代表离目标越近),从而为障碍物绕行提供了依据。

p = dx.query(start);
dx.plot(p);
numrows(p)%查看路径点数

背景材料:超级类Navigation。本章中所给例子使用的类都是从超级类Navigation衍生而出的,这个类是专为基于2D网格的导航设计的。每个例子基本上都包括以下模式。首先,通过调用类构造函数来创建一个基于类Navigation的对象实例。
》nav=MyNavClass(world)
它被传递给占用网格。然后,计算出到达目标的一种规划:
》nav.plan(goal)
该规划可以通过一下命令看到:
》nav.plot()
然后计算从起始位置到目标的一条路径:
》p=nav.query(start)
》p=nav.path()
其中,p是路径,即从起点到目标的一系列点,一行代表一个点,每一行包括点的x和y坐标。如果未指定start(如第二个例子),用户会被提示以交互方式点击选择起点。如果没有输出参数,则会显示机器人运动的动画。

这种方法的缺点是:距离变换对于较大地图计算量较大。

  • 距离变换法是如何计算各点到目标点的距离的?

2.2D∗D^\astD∗

Dijkstra算法:看这里
要想了解D算法,首先需要学习什么是A∗A^\astA∗算法:看这里
D
是A*的扩展,在图中从目标规划一条到初始点的路径,使得总成本最低。从目标点出发,根据单元成本,逐步扩散计算每个单元的距离值,保存到密集有向图中,节点包含

  1. 单元成本
  2. 到目标的距离
  3. 与最靠近目标的相邻单元的链接
%D*算法
ds = Dstar(map);    % create navigation object
ds.plan(goal)       % create plan for specified goal
ds.plot();
p = ds.query(start);% animate path from this start location
ds.plot(p);

ds.plan(goal)将产生一个密集的有向图。每个单元是一个顶点,它具有成本,到达目标的距离,以及与最靠近目标的相邻单元的一个链接。每个单元还有一个状态{NEW,OPEN,CLOSED}。起初每个单元都处于NEW状态,只有目标单元的成本是0,状态是OPEN。我们可以将所有的处于OPEN状态的单元看作从目标向外传播的一个波前,计算与OPEN态相邻的即将到达的单元的成本,然后这些单元依次被设定为OPEN状态,最初的单元则从OPEN态移除改为CLOSED态。在MATLAB中这个最初的规划阶段是非常慢的,需要花费几十秒的时间

ds.niterans=10558%以上指令显示了规划循环迭代的次数。


D星算法的真正威力在于它能在任务中有效地更改成本地图。这种能力在机器人领域非常需要,这是因为实际的机器人传感器量程有限,而且机器人在行进过程中会发现更多不可预知的情况。我们可以采用modify-cost方法告诉D"所要做的修改,例如:

这给的函数有点问题
  • 我还是没搞懂啥是D∗D^\astD∗算法,呜呜呜~

2.3沃罗诺伊路线图法

2.4概率路线图法

2.5RRT

(未完待续)

机器人学——机器人导航相关推荐

  1. 「 机器人学 」“Human-aware机器人导航技术”浅谈

    一.前言 Human-aware机器人导航是人机交互和运动规划的交叉研究方向,它同时考虑机器人导航问题和导航时与环境中的行人交互问题. 二.Human-aware机器人导航应用领域 机器人引导问题.机 ...

  2. 《动手学ROS2》第十章章节介绍 机器人导航NAV2

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 第十章 机器人导航NAV2 千 ...

  3. 机器人导航两篇顶级会议论文解析

    机器人导航两篇顶级会议论文解析 一.一种用于四旋翼无人机室内自主导航的卷积神经网络特征检测算法 标题:A Convolutional Neural Network Feature Detection ...

  4. 机器人导航答辩记录半成品-60分模板-

    <机器人技术创新与实践>答辩记录表 姓名 学号 专业 班级 题目 机器人导航实践 地点 时间 完成项目时间和答辩内容:(围绕使用镜像/仿真/导航机器人遇到的问题和解决思路) 1. 为何学习 ...

  5. ros学习之多机器人导航(仿真)

    系列文章目录 (一).从solidworks转urdf文件,在gazebo中添加小车模型 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 系列文章目录 目录 前言 一.插件 二 ...

  6. 【ROS2】【机器人导航navigation2】参数调整分析

    一.概述 在之前的笔记分析了nav2的启动文件,发现所有实际控制机器人的节点都需要params_file文件,也就是/opt/ros/humble/share/nav2_bringup/params/ ...

  7. 机器人导航(仿真)(三)——路径规划(更新中)

    参考视频:[奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程_哔哩哔哩_bilibili 参考文档:http://www.autolabor.com.cn/book/ROSTu ...

  8. 机器人导航技术的研究现状和发展趋势

    机器人导航技术的研究现状和发展趋势 1 导航技术的研究现状 1.1 路基无线电导航系统 1.2 蜂窝导航 1.3 惯性导航 1.4 卫星导航系统 1.5 其他导航 2 机器人导航中的相关技术 2.1 ...

  9. Chapter7 机器人导航仿真(Ⅰ)----导航实现

    目录 一.机器人导航实现 1.1 本章简介 1.1.1 本章主要内容介绍 1.1.2 预期达成的学习目标 1.1.3 导航模块简介 1.1.4 导航之坐标系 1.1.5 导航条件要求 1.2 导航实现 ...

  10. 论文研读——机器人导航深度局部轨迹重规划与控制

    论文研读--Deep Local Trajectory Replanning and Control for Robot Navigation 此篇文章为论文的学习笔记,只供学习使用,不作商业用途,侵 ...

最新文章

  1. c语言delay_利用C语言编程单片机,制作可以根据环境光照调整亮度的智能灯
  2. 让IE的F1帮助变成自己的
  3. java如何记录查看记录_Java如何检查消息是否可记录?
  4. APIGEE:用于API代理的CI / CD管道
  5. 亿佰特WiFi无线通信模块在物联网智慧农场应用案例
  6. compareto方法_Java ArrayList 的不同排序方法
  7. 一文了解 2018 年最值得关注的 12 大框架
  8. Wireshark 抓包小例子
  9. OpenCV 直方图均衡化 equalizeHist
  10. [C# 线程处理系列]专题四:线程同步
  11. SpringBoot+Shiro 学习之数据库动态权限管理和 Redis 缓存
  12. java8新特性——Optional (1)
  13. linux 进程带宽限制,如何限制网络带宽在Linux上
  14. pytorch中的transforms介绍
  15. MySQL binlog时间异常分析
  16. 什么区块链,统统都是骗局?
  17. 这样学习Linux,楼下王大爷都已经入门了,你还不来?
  18. Halcon 算子 elliptic_axis
  19. 1.2帮助软件Rstudio的下载与安装
  20. MT4-EA自动化交易研究笔记(2022-04-22)

热门文章

  1. 用户sa登录失败的解决办法
  2. 关于程序员的996,我们谈谈历史和逻辑
  3. 模式识别(一)模式定义
  4. JavaScript如何实现汉字按拼音首字母分组拼序
  5. Webstorm配置less
  6. SQL基础系列(八)——排序、分组排序(RANK)
  7. 一个Web前端实习生的简历
  8. 余吉磊——湖南高尔夫旅游职业学院游戏爱好者
  9. EXP6 信息搜集与漏洞扫描 20154328 常城
  10. 地理极客的Planet卫星影像指南