精华内容
下载资源
问答
  • 游戏引擎 之 寻路&路径平滑处理

    千次阅读 2012-06-09 17:55:27
    游戏引擎中的寻路部分最主要由两大部分组成:寻路,路径平滑处理。确定起始点位置有两种方法:1. 最简单的方法:设置一个起点,一个终点;2. 设置脚印,即设置一连串的点,求出一条最短路径将这些点连起来。本文以第...


    游戏引擎中的寻路部分最主要由两大部分组成:寻路,路径平滑处理。确定起始点位置有两种方法:1. 最简单的方法:设置一个起点,一个终点;2. 设置脚印,即设置一连串的点,求出一条最短路径将这些点连起来。本文以第一种方法为例讲解,场景为DirectX中的三维地形。


    (1) 获取起点,终点:通过拾取获取鼠标在三维中指定点的位置

    (2) 寻路:本文的思路是,将起点和终点所在的地形格子 在顶点缓冲区的索引求出来,用寻路算法(A*,遗传算法,神经网络等,本文使用A*算法)得到路径,路径的格式为list<int>,保存的是索引。

    (3) 路径平滑处理:平滑处理时,首先将上一步求得的list<int>转换为在地形中的位置list<D3DXVECTOR>,然后做Bezier曲线,将list中的元素作为控制点。

    展开全文
  • 本文为路径规划和matlab的学习随笔,主要参考 matlab帮助文档里的“Path Following for a Differential Drive Robot”、大学生mooc“自主移动机器人”和哔哩哔哩:...

    本文为路径规划和matlab的学习随笔,主要参考
    matlab帮助文档里的“Path Following for a Differential Drive Robot”、大学生mooc“自主移动机器人”和哔哩哔哩:https://www.bilibili.com/video/BV18E411L71V?from=search&seid=7455331835149981065
    操作环境:matlab2019b
    使用模型:双轮差速小车模型
    (注:本文为前文基础上的优化改进,A*算法和小车模型部分,还请大家自行参考前文)

    双轮差速模型的路径规划学习1-matlab模拟指定路径运动:https://blog.csdn.net/hongliyu_lvliyu/article/details/104999492
    双轮差速模型的路径规划学习2-matlab模拟A*算法实现基本路径规划:https://blog.csdn.net/hongliyu_lvliyu/article/details/105315221

    一、路径平滑处理

    使用A*算法规划之后,得到的是一系列的坐标点集,在图像上是锯齿状的轨迹,而小车在运行过程中,是沿着一条平滑的轨迹在运行,所以通常平滑处理,例如使用贝赛尔曲线法和B样条曲线法。
    在这里插入图片描述
    平滑处理之后
    在这里插入图片描述

    二、贝塞尔曲线

    2.1贝塞尔曲线

    贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。(大家如果会使用PS一类的绘图软件,不知道对钢笔工具有没有印象)

    一阶(线性)贝塞尔曲线

    在这里插入图片描述
    一阶贝塞尔曲线的意义是一条从P0到P1的线段,用B(t)表示t时间下 点的坐标,P0是起始点,Pn为终点(这里为P1),Pi为控制点
    在这里插入图片描述
    二阶贝塞尔曲线
    在这里插入图片描述
    二阶贝塞尔曲线的意义是一条从P0到P2抛物线
    由P0到P1的连续点Q1描述的一条线段
    由P1到P2的连续点Q2描述的一条线段
    由Q1到Q2的连续点B(t)描述一条抛物线
    在这里插入图片描述
    这之间涉及到的线段成比例关系
    在这里插入图片描述
    同样的三阶贝塞尔曲线:
    在这里插入图片描述
    在这里插入图片描述
    总结之后可以写成一个二项式的通式:
    在这里插入图片描述

    2.2matlab代码实现与测试

    这里使用的是n次贝塞尔曲线

    function [X,Y]=Bazier(x,y)
    n=length(x);
    t=linspace(0,1);
    xx=0;yy=0;
    for k=0:n-1
        tmp=nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
        xx=xx+tmp*x(k+1);
        yy=yy+tmp*y(k+1);
    end
        X=xx;Y=yy;
    

    把生成的坐标点作为Bazier函数的输入(x,y),输出平滑后的路径坐标(X,Y)

    load exampleMaps
    map = binaryOccupancyMap(simpleMap);
    refFigure = figure('Name','SimpleMap');
    show(map);
    mapA=imrotate(simpleMap,-90);
    SE=strel('square',3);
    BW2=imdilate(mapA,SE);
    image(BW2);
    start_coords = [6, 4];
    dest_coords  = [15, 5];
    [route, numExpanded,I,J] = AStarGrid1 (BW2, start_coords, dest_coords);
    [X,Y]=Bazier(I,J);   %调用贝塞尔曲线函数
    path=[X;Y]';
    robotInitialLocation = path(1,:);
    robotGoal = path(end,:);
    initialOrientation = 0;
    robotCurrentPose = [robotInitialLocation initialOrientation]';
    robot = differentialDriveKinematics("TrackWidth", 1, "VehicleInputs", "VehicleSpeedHeadingRate");
    controller = controllerPurePursuit;
    controller.Waypoints = path;
    controller.DesiredLinearVelocity = 0.6;
    controller.MaxAngularVelocity = 2;
    controller.LookaheadDistance = 0.3;
    goalRadius = 0.1;
    distanceToGoal = norm(robotInitialLocation - robotGoal);
    Untitled
    

    运行结果:
    在这里插入图片描述

    三、B-样条曲线

    3.1B-样条曲线

    B-样条是使用更广泛的逼近样条类。B样条有两个贝塞尔样条所不具备的优点:
    1、B样条多项式次数可独立于控制点数目(有一定限制);
    2、B样条允许局部控制曲线或曲面。贝塞尔曲线改变一个点,整个曲线都将改变,这是两种曲线最大区别。
    缺点是B样条比贝塞尔样条更复杂。

    B-样条曲线的数学表达式为:
    在这里插入图片描述
    在这里插入图片描述

    B样条基函数是一个称为节点矢量的非递减的参数u的序列所决定的k阶分段多项式,这个序列称为节点向量
    B样条基函数可以有各种各样的定义方式,公认的最容易理解的是de Boor—Cox递推定义:
    在这里插入图片描述
    B样条曲线的类型划分:
    1.均匀B样条曲线,节点沿参数轴均匀分布,级Ui+1-Ui=常数,具有周期性,即给定n和k,所有的基函数有相同形状。每个后续基函数仅仅是前面基函数在新位置上的重复
    在这里插入图片描述
    在这里插入图片描述
    2.准均匀B样条曲线两段节点具有重复度

    在这里插入图片描述
    在这里插入图片描述
    准均匀曲线保留了贝塞尔曲线的几何性质
    3.分段贝塞尔曲线
    就是多段贝塞尔曲线拼接而成

    3.2matlab代码实现与测试

    这里可以调用matlab的样条曲线工具箱Curve Fitting Toolbox,这里生成准均匀B样条曲线,k=3

    function X=Bspline(path)
    P=path';
    n = size(P);
    n=n(2);
    knots = aptknt(linspace(0,1,n),3);%生成B样条曲线节点
    sp = spmak(knots,P);%生成B样条函数
    X=fnplt(sp,[knots(1),knots(length(knots))]);%根据所有节点,画样条曲线图
    X=X';
    end
    

    调用A*后使用样条曲线平滑:

    load exampleMaps
    map = binaryOccupancyMap(simpleMap);
    refFigure = figure('Name','SimpleMap');
    show(map);
    mapA=imrotate(simpleMap,-90);
    SE=strel('square',3);
    BW2=imdilate(mapA,SE);
    image(BW2);
    start_coords = [6, 4];
    dest_coords  = [15, 5];
    [route, numExpanded,I,J] = AStarGrid1 (BW2, start_coords, dest_coords);
    path=[I;J]';
    X=Bspline(path);  %使用B样条曲线平滑
     path=X;
    robotInitialLocation = path(1,:);
    robotGoal = path(end,:);
    initialOrientation = 0;
    robotCurrentPose = [robotInitialLocation initialOrientation]';
    robot = differentialDriveKinematics("TrackWidth", 1, "VehicleInputs", "VehicleSpeedHeadingRate");
    controller = controllerPurePursuit;
    controller.Waypoints = path;
    controller.DesiredLinearVelocity = 0.6;
    controller.MaxAngularVelocity = 2;
    controller.LookaheadDistance = 0.3;
    goalRadius = 0.1;
    distanceToGoal = norm(robotInitialLocation - robotGoal);
    Untitled
    

    测试结果
    在这里插入图片描述
    在这里插入图片描述
    如有错误,还请大家指出~ !谢谢

    待更新,下一篇内容为“matlab模拟A*算法+DWA避障”

    展开全文
  • 路径平滑算法汇总

    千次阅读 2020-02-10 16:44:44
    全局路径规划(例如A*算法)算法计算路径完毕后,...路径平滑处理的相关算法有:佛洛依德算法 、贝塞尔曲线 佛洛依德算法 https://www.cnblogs.com/miaolegemi/archive/2017/12/05/7986335.html 贝塞尔曲线 https:/...

    全局路径规划(例如A*算法)算法计算路径完毕后,其结果是一串用来表示所经过的路径点的坐标, 但这样的路径通常是有“锯齿” 形状的,并不符合实际需求,因此需要进行平滑处理。
    路径平滑处理的相关算法有:佛洛依德算法 、贝塞尔曲线
    佛洛依德算法
    https://www.cnblogs.com/miaolegemi/archive/2017/12/05/7986335.html
    贝塞尔曲线
    https://www.iteye.com/blog/justcoding-2226354

    展开全文
  • 1、建立地图模型,包括障碍物与边界; 2、在自由区域内创建路网; 3、依据路网搜索最短安全路径–橙色...4、对路径进行平滑处理–绿色路径; 4、建立机器人运动学模型,运用purePursuit跟踪算法实现跟踪控制。 ...

    1、建立地图模型,包括障碍物与边界;
    2、在自由区域内创建路网;
    3、依据路网搜索最短安全路径–橙色路径;
    4、对路径进行平滑处理–绿色路径;
    4、建立机器人运动学模型,运用purePursuit跟踪算法实现跟踪控制。
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 针对煤矿救援机器人利用A*算法规划出来的路径存在转折次数多和路径不够平滑等问题,提出了一种基于改进A*算法的煤矿救援机器人路径平滑算法。首先利用Douglas-Peucker(D-P)算法对A*算法产生的全段路径进行处理,...
  • ArcKit:iOS的平滑处理原始导航路径工具组件库
  • 自动驾驶路径规划中路线过渡的平滑处理方法 路径半径为RRR,路径曲率为1R\frac{1}{R}R1​。如果要控制车辆平滑运动,必须确保路径的曲率是一个连续的量。那么就得对路径段的连接做平滑处理,已直线段到圆弧段的过渡...
  • 无人车轨迹路径平滑方法

    千次阅读 2019-10-29 13:59:35
    主要介绍一下几种平滑方式,并针对三维轨迹进行平滑处理: 1. 滑动平均平滑(Moving average): 邻域内的数据点做平均代替邻域的中心点值,除了一般滑动平均,还有加权滑动平均和指数滑动平均。 2.Savitzky-...
  • 佛洛依德路径平滑算法(floyd) - 喵喵个咪 - 博客园原先在博客园写的,现在搬到知乎来。毕竟知乎用的多一点(笑 常见的a*算法的结果是一串用来表示所经过的路径点坐标。但是这样的路径通常是有“锯齿”的,并不符合...
  • VC++图像平滑处理+程序源码,实现图象的平滑(去噪声),锐化功能,测试时请在C盘下放一个测试用的Bmp图片,路径:C:\test.bmp,没有的话没法测试。如上图所示是水平平滑处理,可以对比下,不过感觉颜色失真了,有...
  • 我在另一天参加了线程Image/Graphic into a Shape,...右边的两个是处理轮廓的各个阶段.它们都在圆周和锯齿状的三角形的边缘上有锯齿状的边缘.我想获得一个去除或减少锯齿状的形状.在ASCII艺术情况1:12341 **2 **3 ...
  • A星寻路的平滑处理 c++实现

    千次阅读 2019-01-05 09:30:39
    网上有很多A*寻路的源码,我学习了几份,发现它们都没有对路径进行平滑处理路径都是不平滑的 这样游戏角色寻路走路会很怪异。看到别人博客思路,自己用c++撸一遍  我的起点为 0,0点 终点为9,6点 思路借鉴:...
  • 我们知道一般用Dijkstra A* 等路径规划算法规划出来的路径都不是很平滑的 机器人沿着这些不平滑路径驾驶,效果差强人意,为了时机器人能自然的沿着给定路径行驶,必须对路径点做平滑处理 如上图 S表示路线规划的...
  • 中科院分词系统的平滑处理 根据2元统计语言模型,最优可能的一种划分s1,s2,..sn 满足下面的值最大:P(s) = max(p(s1) * p(s2|s1) * ... * p(sn|sn-1);一般两边取对数 lnp(s) = max(ln(p(s1)) + ...
  • React-Native画线平滑处理

    千次阅读 热门讨论 2016-10-12 10:59:08
    这次开发要手写画线,我们一般画线的时候是直接获取屏幕上的点,然后利用ART绘制出一天路径线: /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ import React, { ...
  • RRT路径规划算法

    千次阅读 2019-08-29 21:43:42
    RRT路径规划算法地图RRT算法原理路径平滑处理总结 RRT(Rapidly-Exploring Random Tree)算法是一种基于采样的路径规划算法,常用于移动机器人路径规划,适合解决高维空间和复杂约束下的路径规划问题。基本思想是以...
  • 2.弗洛伊德路径平滑算法 3.源码下载 1.A星寻路算法 讲A星算法原理的文章实在是太多了,我这里就不重复造轮子了。本文采用的算法是9ria算法大赛挑选出来的几个速度最快的算法之一。该算法是经过二叉堆优化,...
  • 针对限定环境下移动机器人路径规划问题,运用...同时采用一个基于几何平滑策略对优化路径进行平滑处理,以达到路径平滑的目的.仿真结果表明,该优化算法不仅能有效降低搜索路径的长度,而且能大幅度提高路径的平滑度.
  • 读取带障碍环境的地图,二值化处理,使用rrt算法得到路径规划图,使用去除冗余点的方法对路径进行优化,再用三次B样条对路径进行平滑处理
  • 对10*10的二维高程矩阵进行插值,得到较平滑的三维山地图,使用A星算法得到起点到终点的最优路径,使用B样条插值法对路径进行平滑处理
  • 读取MATLAB自带图像,对该图像进行直方图均衡化,显示处理前后的图像及直方图的变化,附上代码及相关说明。 clc;clear;close all; path(path,'D:\R2019a\toolbox\images\imdata'); % 读取路径图像信息 im=imread('...
  • 计算机数控(CNC)系统中的刀具路径平滑和进给率调度的数学模型对于高精度制造至关重要。 在最近的研究中,开发了G2 / G3(曲率连续/平滑)轨迹平滑和加加速度限制/连续进给率调度方案。 尽管如此,仍然存在一些无法...
  • import cv2 img = cv2.imread('1/lena512color.tiff') #opencv路径不能是中文路径 #路径注意斜杠问题 cv2.imshow('sourceImg', ...#对原始图像进行高斯平滑处理(高斯核选取的是(5,5)),并且得到img2 cv2.ims...
  • turtlebot3 引入速度平滑

    千次阅读 2018-08-09 17:23:25
    turtlebot3中没有使用速度平滑,但是本人在用turtlebot3跑导航时会出现急停的现象,所以为了解决这个问题,本人在turtlebot3中添加速度平滑处理功能 以下是本人的相关代码及设置 velocity_smoother.launch.xml ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 200
精华内容 80
关键字:

路径平滑处理