Distance calculation
CoppeliaSim can measure the minimum distance between two measurable entities in a flexible way. The calculation is an exact minimum distance calculation.
[Minimum distance calculation between two manipulators]
Using the API function sim.checkDistance, one can easily calculate the minimum distance between entities, for instance between a robot and its environment, from within a child script, in each simulation step:
function sysCall_init()
local robotBase=sim.getObject('/robotModelAlias')
robotCollection=sim.createCollection(0)
sim.addItemToCollection(robotCollection,sim.handle_tree,robotBase,0)
end
function sysCall_sensing()
local result,distData,objectPair=sim.checkDistance(robotCollection,sim.handle_all)
if result>0 then
local txt='Robot clearance is '..distData[7]
txt=txt..'m, minimum distance object pair is '..getAsString(objectPair)
print(txt)
end
end
One can also display the measured minimum distance, as a colored segment in the scene:
function sysCall_init()
local robotBase=sim.getObject('/robotModelAlias')
robotCollection=sim.createCollection(0)
sim.addItemToCollection(robotCollection,sim.handle_tree,robotBase,0)
distanceSegment=sim.addDrawingObject(sim.drawing_lines,4,0,-1,1,{0,1,0})
end
function sysCall_sensing()
local result,distData,objectPair=sim.checkDistance(robotCollection,sim.handle_all)
if result>0 then
sim.addDrawingObjectItem(distanceSegment,nil)
sim.addDrawingObjectItem(distanceSegment,distData)
end
end
CoppeliaSim's distance calculation functionality is also available as stand-alone routines via the Coppelia geometric routines.
|