势函数避障--随机障碍

利用势函数实现机器人避障规划
1 算法思想
路径规划是指移动机器人按照某些性能指标,寻出一条从起始状态到目标状态的无碰撞路径。
人工势场法是由Khatib等提出的一种虚拟方法,他把移动机器人在环境中的运动视为在一种抽象的人造受力场中的运动:目标点对移动机器人产生引力,障碍物对移动机器人产生斥力,最后根据合力来确定机器人的运动。 移动机器人可以简化为一个质点,它的运动空间是二维的,机器人在工作空间中的位置为X=[x,y]T 。
引力场函数为: 21()()2
goal Uat X k X X =-              (1)  其中k 为位置增益,(X- Xgoal)为当前位置与目标位置的相对距离,相应的吸引力为目标势场的负梯度:
Fat(X)=-grad[Uat(X)]=k(X- Xgoal)                      (2) 斥力场函数为:
2000111()()2()0goal rep X X U X ηρρρρρρ⎧--≤⎪=⎨⎪>⎩            (3)
在此,ρ是机器人与障碍物之间的最近距离,(X- Xgoal) 为机器人与目标之间的距离,障碍物的影响范围在距离ρ0之内,η是一个位置增益系数, 是一个大于零的任意实数。与原势场函数相比,引入了机器人与目标之间的相对距离,保证了整个势场仅在目标点Xgoal 全局最小。
势场函数Ure,Uat 应该使得机器人所受合力Fsum 将驱使机器人远离障碍物,逼近目标。当机器人未到达目标时,即X ≠Xgoal 时,斥力可写为
1200[()]0
re re re re F F F grad U X ρρρρ+≤⎧=-=⎨>⎩                  (4) 其中: 212011
1
()()re goal F X X ηρρρ=-- ;2201
1
()()re goal F X X ηρρ=--
索尼dsct900矢量Fre1的方向为从障碍物指向机器人,矢量Fre2 的方向为从机器人指向目标。机器人所受到的合力为: Fsum=Fat+Fre                    (5)
这个力决定了机器人的运动。这样, 由于总的势场力和机器人在该点的加速度方向一致。这样加速度方向场就定义完毕了。控制加速度则按计算。其中为力转换为加速度的系数。这样我们就规划出了每一时刻最终的位姿。 2 机器人避障仿真
在避障过程中,先设定障碍物有10个:4个圆形的,3个三角形和三个矩形的。当机器人到达了目标时,则机器人停止运动,退出循环
以下是随机生成了10个障碍物,在不同的情形下,机器人实现了避障。内外接
3 主要源代码
3.1主函数中的代码
%初始化粒子的参数
中国传媒大学高等职业技术学院
Xo=[0 0];%起点位置
k=1;%计算引力需要的增益系数
m=1;%计算斥力的增益系数
n=10;%障碍个数
longth=1;%步长
J=200;%循环迭代次数
K=0;%初始化
m_Target=[100 100];
[m_Obs,m_ObsR]=Obs_Generate([3 5],[20 80],[10 80],n); Xj=Xo;%j=1循环初始,将车的起始坐标赋给Xj
%随即产生障碍
Po=min(m_ObsR)/2;
%***************初始化结束,开始主体循环******************
for j=1:J%循环开始
Current(j,1)=Xj(1);%Current是保存车走过的每个点的坐标。刚开始先将起点放进该向量。
Current(j,2)=Xj(2);
%调用计算角度模块
[angle_att,angle_rep]=compute_angle(Xj,m_Target,m_Obs,n);
%调用计算引力模块
[Fatt,Uatt(j)]=compute_Attract(Xj,m_Target,k,angle_att);
%调用计算斥力模块
[Frep,Fatt_add,Urep(j)]=compute_repulsion(Xj,m_Target,m_Obs,m_ObsR,m,angle_att,angle_rep, n,Po);
%计算合力和方向
[Position_angle(j)]=compute_Ftotal(Fatt,Frep,Fatt_add,n);
%计算车的下一步位置
Xnext(1)=Xj(1)+longth*cos(Position_angle(j));
Xnext(2)=Xj(2)+longth*sin(Position_angle(j));
%保存车的每一个位置在向量中
Xj=Xnext;
% Draw(Xj,m_Obs,m_Target,n);
%判断
if (Is_Reach(Xj,m_Target,longth)==1)
K=j; break; %记录此时的j值武汉职业技术学院
End %如果不符合if的条件,重新返回循环,继续执行。
end%大循环结束
%****************************以下是图形显示部分****************************
%画势场分析图
Draw(Uatt,Urep);
%画模型效果图
Draw_Model(Xo,Current,m_Obs,m_ObsR,m_Target,n);
%画总体势场分布图
Draw_Potential(Xo,m_Obs,m,m_ObsR,Po,m_Target,k,n,[0 100],[0 100]);
3.2 引力计算函数
function [Fatt,Uatt]=compute_Attract(X,m_Target,k,angle)%输入参数为当前坐标,目标坐标,增益常数,分量和力的角度
%把路径上的临时点作为每个时刻的Xgoal
胥荣东>读者
R=(X(1)-m_Target(1))^2+(X(2)-m_Target(2))^2;%路径点和目标的距离平方
r=sqrt(R);%路径点和目标的距离
Fatt(1)=k*r*cos(angle);%angle=Y(1)
Fatt(2)=k*r*sin(angle);
Uatt=1/2.0*k*R;
End

本文发布于:2024-09-23 18:23:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/500539.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:机器人   目标   障碍物   循环   运动   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议