Gointerface接口声明实现及作用详解
289
2022-09-04
【二维路径规划】基于CVD算法求解Voronoi 图下的多机器人路径规划附matlab代码(三维路径规划算法)
1 简介
In CVDs we use only junction vertices instead of all vertices to maintain the compact version of the GVD.To keep a check that current CVD is a good approximation of initial GVD, we can maintain local certificates (explained in Previous Studies section) such as junction triangles being locally Delaunay. When robot moves we keep track of the junction vertices which are the centers of circles touching 3 polygonal obstacles. As these junctions change position, we observe with which polygons the triangle touchesnext.
This way only a small portion of the map is updated instead of modifying the whole map. Thus, maintaining CVD takes less space in memory than GVD and suits the multi-robot path planning problem. We use CVD to make sure there are no collisions. If adjacent corridors overlap, it means there is a collision between objects. We also utilize for Retraction Motion Planning by determining narrowest passage between two convex chains in the corridor.
Reference paper[1] proposes Compact Voronoi Diagrams over Generalised Voronoi Diagrams. To understand the results few key terminologies are important to understand:
1.Local Certificate They are certain local conditions which need to be met at all times to guarantee that CVD is a good approximation of GVD. At regular intervals, they are
2. Junction Points Point of intersection of three or more Voronoi edges. Junction points location is critical for maintenance of CVD.
3. Witness Circles A circle drawn from junction point which touches three polygons and does not include any other polygon.
4. Junction Triangles It is a triangle inscribed in Witness Circle. Junction triangles are critical for maintaining the local certificates for compact Voronoi diagrams.
5. Cocircularity Events Circumcircles of two or more junction triangles are coincident. So these two junction triangles share a common edge. Taking reference from the above definitions, following text explains implementation details in MATLAB: For finding the junction vertices (fig. 6), we use branchpoints morphological operation on the GVD of Minkowski dilated obstacle space. At every junction, we draw a witness circle (fig. 7) tangent to three obstacle polygons. This is followed by creating a Delaunay triangulation (fig. 8) of junction triangles associated with three features (points lying on polygons). Points within corridor (free space excluding junction triangles and obstacles) space that lie on the line bisecting closest pairs of features (edges or vertices) of two obstacles are stored to find routes that are maximally distant from obstacles.
In general Voronoi diagram, the local certificate involves drawing witness circles and making sure that no other polygon than 3 adjacent polygons coincide with the circle. In compact version, instead of witness circles, junction triangles need to meet this property at all instance. In case of local certification property not being met, i.e. a co-circularity event arises, we delete the edge that is common to both triangles and join the diagonal formed by other two points on quadrangle. This is more clear from the figure 11.[1] This operation is known as Edge-Flip. Throughout the motion of robots, at every timestep, we make sure that if any local certificate iscompromised, we do edge-flip operation(fig. 11) and maintain the quality of the compact Voronoi diagrams. Using Deformation retract, robots trace the whole map without collision.
2 部分代码
function [mink_map] = minkowski(side_length, clearance, map)[m,n] = size(map);robotRad = side_length/sqrt(2) + clearance;% Enlarging the boundaries of the map.map(2+ round(side_length/2),round(side_length/2)+10:n-round(side_length/2)-10)=0;map(m - round(side_length/2)-1,round(side_length/2)+10:n-round(side_length/2)-10)=0;map(round(side_length/2)+10:m-round(side_length/2)-10,2+round(side_length/2))=0;map(round(side_length/2)+10:m-round(side_length/2)-10,n-round(side_length/2)-1)=0;%map(:,n-round(side_length/2))=0;mink_map = map;for i=1+round(side_length/2):m - round(side_length/2) for j=1+round(side_length/2):n - round(side_length/2) if map(i,j) == 0 %mink_map = insertShape(mink_map,'FilledCircle',[j, i, robotRad], 'Color', 'black'); %rectangle('Position',[j-(side_length/2),i-(side_length/2),side_length, side_length],'Edgecolor', [0,0,0]); mink_map(i-round(side_length/2):i+ round(side_length/2),j-round(side_length/2):j+round(side_length/2))=0; end endendend
3 仿真结果
4 参考文献
[1]许松清, 吴海彬, 林宜,等. 基于Voronoi图法的移动机器人路径规划[J]. 中国工程机械学报, 2005(3):5.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~