Obstacle avoidance - visibility graph
This is a plug-in to find a path to a target pose through a set of established obstacles.
The obstacles are all convex polygons taken from the laser-data (aulaserif.so.0) obstacle plugin. Both fixed and dynamic obstacle polygons may be used.
The obstacle avoidance uses - in the latest version (rev2) - an exact cell decomposition, and finds the shortest path wide enough for the robot to pass. This path is then evaluated for dynamic movement - using robot shape in the form of a rectangle (defined by front-left and front-right corners) and turning constraints (minimum turn radius).
The result is a sequence of line and arc movements to get to the target pose.
The algorithm uses the drive (or driveon) control law implemented in the MRC as a model for the movement, and accepts the angle and distance gain parameters to describe the turn behavior.
Configuration variables
Result variables
Function calls
Function commands
Configuration example
module load="aulaserif.so.0" laser add=var laserdata add=obst module load="audrivepos.so.0" module load="aupoly.so.0" module load="auavoid.so.0" var avoid.frontLeftX ="2.05 0.68" var avoid.frontRightX = "2.05 -0.68" var avoid.rev2=true # rev2 values var avoid.clearenceMinimum = 0.25 var avoid.clearenceDesired = 0.5 var avoid.rev2cell=true var avoid.driveonGD=1 var avoid.driveonGA=2 var avoid.minTurnRadius=2.2 var avoid.maxOG=1 var avoid.ignoreCloseObst=6 var avoid.acceptSolution=30 var avoid.maxTangentToMan=3 var avoid.forwardOnly=3.16 var avoid.makeFootprintPolygon=1 var avoid.makeCellPolygon=0 var avoid.makeCellCostLine=1 var avoid.makeCellVertexLine=1