基于改进A*算法的工业机械臂无碰撞路径规划方法与流程

文档序号:15078974发布日期:2018-08-03 10:52阅读:354来源:国知局

本发明涉及工业机器人路径规划技术领域,具体涉及基于改进a*算法的工业机械臂无碰撞路径规划方法。



背景技术:

路径规划是控制工业机器人按照人工预设的路径运动完成作业任务,决定了机器人的工作方式与工作效率。路径规划技术是工业机器人自动化生产的基础,也是智能制造业必不可缺的重要组成部分。针对六自由度的工业机械臂,传统的无碰撞路径规划方法是基于c空间法(构型空间法)的路径规划,但是在求解c空间的障碍物边界时,需要将工作空间的障碍物区域转换到c空间,这需要大量的计算,并且精确的障碍域难以获得。

现有的基于a*算法的路径规划,很多是在工作空间(笛卡尔空间)进行路径搜索,这样规划出的最短路径并不是关节变化量最小的路径,所以需要在c空间进行路径规划。而针对c空间的路径规划,由于在六维空间的搜索问题的复杂性,现有的算法大多忽略了几个自由度,对搜索空间进行了一定的简化,这样得到的路径也是简化后的,并不能够保证路径的安全性。为了得到准确避障的路径,往往需要设置较小的搜索步长,搜索步长与避障准确度是相互矛盾的,如何在保证无碰撞的前提下提高搜索效率是需要解决的问题。

综上所述,针对六自由度机械臂在c空间的路径规划,传统的无碰撞路径规划的方法需要大量计算,并且精确的障碍域难以获得。传统的a*算法不适用于六维空间的搜索问题,并且搜索效率有待提高。



技术实现要素:

为了解决上述问题,本发明的目的在于提供一种基于改进a*算法的工业机械臂无碰撞路径规划方法,可以实现六自由度机械臂的无碰撞路径规划,具有计算简单,搜索效率高的优点。

为了达到上述目的,本发明采取的技术方案为:

基于改进a*算法的工业机械臂无碰撞路径规划方法,包括以下步骤:

步骤1、对六自由度机械臂进行参数化建模,并建立机械臂的正逆运动学模型:

采用d-h法描述机械臂的位姿,建立机械臂的连杆坐标系,确定机械臂的d-h参数;

根据d-h参数,连杆i和连杆i-1相对位置的齐次变换矩阵i-1ai为:

式中ci=cosθi,si=sinθi,其中i表示机械臂的连杆个数,i=1,2,3,4,5,6;

将各关节的齐次变换矩阵相乘,得到了机械臂末端执行器的齐次变换矩阵为:

其中,px,py,pz表示平移变换在x,y,z三个方向的分量,n=[nxnynz],o=[oxoyoz],a=[axayaz],分别为绕x,y,z三个方向旋转矢量;

步骤2、建立机械臂及环境的obb包围盒:利用soildwork建模软件建立机械臂及环境模型,并将机械臂及环境模型另存为stl格式文件,读取stl格式文件,从而得到模型中各个物体的三角形网格模型,采用obb包围盒算法建立机械臂及环境障碍物的obb包围盒;obb包围盒方法流程为:

2.1)通过物体的三角形网格模型中的三角面片信息计算每个三角形平面的法向矢量,并在每个三角面片上建立一个坐标系,原点为三角形任意顶点,三角形平面为x-y平面,z轴方向为三角形平面的法向矢量;

2.2)遍历每一个三角面片的平面法向矢量,依次绕每一个法向矢量旋转三角面片的坐标系,寻找物体的三角形网格模型投影到三角面片的x-y平面面积最小的方向,记录下在旋转后的坐标系下的包围盒的体积;

2.3)将最小体积对应的坐标系的方向作为包围盒的三个方向向量,将物体的三角形网格模型中所有顶点投影到三个方向向量中,求出每个方向的最大值和最小值,得到obb包围盒的八个顶点;

步骤3、设置a*算法的估价函数和搜索步长,采用基于分离轴的碰撞检测算法在搜索的每一步中判断机械臂是否与环境发生碰撞:

机械臂在关节空间中某个节点的构型矢量为qi,其中包括六个旋转关节的角度变幅,即qi=(qi1,qi2,qi3,qi4,qi5,qi6),距离估价函数为所有关节转动的角度之和,在估价函数中加入一项,即当前节点到目标节点的各关节位移变化量之和,估价函数如下:

在机械臂的作业场景中,障碍物区域设置0.1到0.2度之间较小的搜索步长,以提高搜索精度;而在非障碍物区域设置1到1.5度之间较大的搜索步长,以提高搜索速度;

采用基于分离轴相交测试的方法在搜索过程中进行碰撞检测,对于包围盒子a与b的碰撞检测算法流程为:

3.1)计算两个包围盒子潜在的15条分离轴,对每一条分离轴进行相交测试;

3.2)对每一条分离轴,将八个顶点做投影,得到两个包围盒投影的最大值和最小值分别为maxa、mina、maxb和minb,若maxa<mimb或maxb<mina,则在此分离轴下,两个包围盒分离,否则相交;

3.3)若对所有的分离轴均满足maxa<mimb或maxb<mina,则两个包围盒分离,否则两个包围盒相交;

步骤4、根据关节转动角度之和最小且不发生碰撞的原则,在机械臂的六维关节空间中进行搜索,得到无碰撞的路径;

设置两个存储矩阵,分别为open表和closed表,其中open存放所有搜索节点,closed中存放每一步搜索到的最佳节点,并将它们均初始化为空,机械臂起始位姿的构型矢量为qori,目标位姿的构型矢量为qfin,机械臂当前位姿的构型矢量为qcur,当前位姿的相邻位姿构型矢量为qnei_i;

将机械臂的初始位姿的构型矢量、它的父亲位姿的构型矢量,即它本身和与之对应的g、h、f合并为一个向量放入open表的第一行,即:

open(1,:)=(qori,qori,g(qori),h(qori),f(qori))

open(1,:)是一个1×15的矢量,存放到open表的第一行,并将这个向量放入closed表的第一行;

重复进行以下步骤,直到qcur=qfin,完成搜索任务,若open表变为空,则跳出循环,搜索失败;

4.1)open表中找到f(qi)值最小的那一行向量,将该行向量作为当前搜索节点,并将该节点向量放入closed表中,同时从open表中删除该节点向量;

4.2)判断当前搜索节点是否为目标节点,如果是,那么搜索成功;否则继续下一步;

4.3)对于机械臂而言,每一个关节有三种变化方式,分别是保持不变、增加步长,减少步长,这样在一个六维空间中,当前搜索节点就有36-1=728个邻近的搜索节点,设第i个邻近节点为qnei_i;

4.4)对于每一个邻近的搜索节点执行如下操作:

a)对邻近的搜索节点进行碰撞检测,如果发生了碰撞,则忽略该节点;

b)判断该邻近的搜索节点是否超出了该关节的最大角度或者最小角度,如果超限,则转至下一个邻近节点;

c)若邻近节点既没有发生碰撞也没有超限,则往下执行;

d)判断该节点矢量是否在open表中,如果在open表中,则通过节点索引函数查找该节点在open表中的位置,然后判断当前qnei_i节点中的gnei_i与open表中已经存在的gold_i的大小关系,如果gnei-i<gold_i,则就将当前的节点、当前节点的父亲节点以及新的g、h、f更新至open表中原来旧节点的位置;

e)若该节点矢量不在open表中,则直接把该节点矢量、当前节点矢量、该节点矢量的g、h、f值放入到open表新的一行中,同时将当前节点、当前节点的父亲节点、当前节点的g、h、f值放入到closed表新的一行中;

当搜索成功后,从closed表中的最后一行开始,通过节点索引函数依次查找当前节点的父亲节点,一直到起始节点,就完成了机械臂在关节空间的构型搜索任务。

本发明的有益效果为:

1.本发明无需求解障碍域,通过碰撞检测规避障碍,具有计算简单、方便,能够实现较准确的避障。

2.本发明对传统的a*算法的估价函数进行了改进,克服了六维空间搜索问题的复杂性,能够实现六自由度的机械臂在c空间的无碰撞路径搜索。

3.本发明将传统的a*算法的搜索步长设置为变步长,能够提高搜索效率。

附图说明

图1为本发明方法的流程图。

图2为机械臂的初始位姿。

图3为机械臂的目标位姿。

图4为路径规划的结果。

具体实施方式

下面结合附图和实例对本发明作详细描述。

参照图1,基于改进a*算法的工业机械臂无碰撞路径规划方法,包括以下步骤:

步骤1、对六自由度机械臂进行参数化建模,并建立机械臂的正逆运动学模型:

本实施例以博实rbt-6t/s03s机械臂为例,采用d-h法描述机械臂的位姿,建立机械臂的连杆坐标系,确定机械臂的d-h参数,该机械臂的d-h参数如表1所示,

表1博实rbt-6t/s03s机械臂d-h参数

根据d-h参数,连杆i和连杆i-1相对位置的齐次变换矩阵i-1ai为:

式中ci=cosθi,si=sinθi,其中i表示机械臂的连杆个数,i=1,2,3,4,5,6;

将各关节的齐次变换矩阵相乘,得到了机械臂末端执行器的齐次变换矩阵为:

其中,px,py,pz表示平移变换在x,y,z三个方向的分量,n=[nxnynz],o=[oxoyoz],a=[axayaz],分别为绕x,y,z三个方向旋转矢量;

步骤2、建立机械臂及环境的obb包围盒:利用soildwork建模软件建立机械臂及环境模型,并将机械臂及环境模型另存为stl格式文件,读取stl格式文件,从而得到模型中各个物体的三角形网格模型,采用obb包围盒算法建立机械臂及环境障碍物的obb包围盒;obb包围盒方法流程为:

2.1)通过物体的三角形网格模型中的三角面片信息计算每个三角形平面的法向矢量,并在每个三角面片上建立一个坐标系,原点为三角形任意顶点,三角形平面为x-y平面,z轴方向为三角形平面的法向矢量;

2.2)遍历每一个三角面片的平面法向矢量,依次绕每一个法向矢量旋转三角面片的坐标系,寻找物体的三角形网格模型投影到三角面片的x-y平面面积最小的方向,记录下在旋转后的坐标系下的包围盒的体积;

2.3)将最小体积对应的坐标系的方向作为包围盒的三个方向向量,将物体的三角形网格模型中所有顶点投影到三个方向向量中,求出每个方向的最大值和最小值,得到obb包围盒的八个顶点;

步骤3、设置a*算法的估价函数和搜索步长,采用基于分离轴的碰撞检测算法在搜索的每一步中判断机械臂是否与环境发生碰撞:

机械臂在关节空间中某个节点的构型矢量为qi,其中包括六个旋转关节的角度变幅,即qi=(qi1,qi2,qi3,qi4,qi5,qi6),距离估价函数为所有关节转动的角度之和,为了提高估价函数的启发性,在估价函数中加入一项,即当前节点到目标节点的各关节位移变化量之和,估价函数如下:

在机械臂的作业场景中,障碍物区域设置0.1到0.2度之间较小的搜索步长,以提高搜索精度;而在非障碍物区域设置1到1.5度之间较大的搜索步长,以提高搜索速度;

采用基于分离轴相交测试的方法在搜索过程中进行碰撞检测,对于包围盒a与b的碰撞检测算法流程:

3.1)计算两个包围盒潜在的15条分离轴,对每一条分离轴进行相交测试;

3.2)对每一条分离轴,将八个顶点做投影,得到两个包围盒投影的最大值和最小值分别为maxa、mina、maxb和minb,若maxa<mimb或maxb<mina,则在此分离轴下,两个包围盒分离,否则相交;

3.3)若对所有的分离轴均满足maxa<mimb或maxb<mina,则两个包围盒分离,否则两个包围盒相交;

步骤4、根据关节转动角度之和最小且不发生碰撞的原则,在机械臂的六维关节空间中进行搜索,得到无碰撞的路径;

其中open存放所有搜索节点,closed中存放每一步搜索到的最佳节点,并将它们均初始化为空;机械臂初始位姿的构型矢量为qori,如图2所示,目标位姿的构型矢量为qfin,如图3所示,机械臂当前位姿的构型矢量为qcur,当前位姿的相邻位姿构型矢量为qnei_i,a*算法的流程:

将机械臂的初始位姿的构型矢量、它的父亲位姿的构型矢量,即它本身和与之对应的g、h、f合并为一个向量放入open表的第一行,即:

open(1,:)=(qori,qori,g(qori),h(qori),f(qori))

open(1,:)是一个1×15的矢量,存放到open表的第一行,并将这个向量放入closed表的第一行;

重复进行以下步骤,直到qcur=qfin,完成搜索任务;若open表变为空,则跳出循环,搜索失败;

4.1)open表中找到f(qi)值最小的那一行向量,将该行向量作为当前搜索节点,并将该节点向量放入closed表中,同时从open表中删除该节点向量;

4.2)判断当前搜索节点是否为目标节点,如果是,那么搜索成功;否则继续下一步;

4.3)对于机械臂而言,每一个关节有三种变化方式,分别是保持不变、增加步长,减少步长,这样在一个六维空间中,当前搜索节点就有36-1=728个邻近的搜索节点,设第i个邻近节点为qnei_i;

4.4)对于每一个邻近的搜索节点执行如下操作:

a)对邻近的搜索节点进行碰撞检测,如果发生了碰撞,则忽略该节点;

b)判断该邻近的搜索节点是否超出了该关节的最大角度或者最小角度,如果超限,则转至下一个邻近节点;

c)若邻近节点既没有发生碰撞也没有超限,则往下执行;

d)判断该节点矢量是否在open表中,如果在open表中,则通过节点索引函数查找该节点在open表中的位置,然后判断当前qnei_i节点中的gnei_i与open表中已经存在的gold_i的大小关系,如果gnei-i<gold_i,则就将当前的节点、当前节点的父亲节点以及新的g、h、f更新至open表中原来旧节点的位置;

e)若该节点矢量不在open表中,则直接把该节点矢量、当前节点矢量、该节点矢量的g、h、f值放入到open表新的一行中,同时将当前节点、当前节点的父亲节点、当前节点的g、h、f值放入到closed表新的一行中;

当搜索成功后,从closed表中的最后一行开始,通过节点索引函数依次查找当前节点的父亲节点,一直到起始节点,就完成了机械臂在关节空间的构型搜索任务。

参照图4,图4为机械臂的路径规划的结果,固定步长和变步长的搜索效率对比如表2所示,从表2可以看出变步长的a星算法相对与固定步长的a星算法,搜索点数减少了23.7%,搜索时间减少了19.35%,验证了变步长的a星算法的优越性。

表2变步长和固定步长搜索效率对比

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1