MCPcopy Create free account
hub / github.com/Simple-Robotics/Simple / addSystemCollisionPairs

Function addSystemCollisionPairs

sandbox/pin_utils.py:5–51  ·  view source on GitHub ↗

Add the right collision pairs of a model, given qref. qref is here as a `T-pose`. The function uses this pose to determine which objects are in collision in this ref pose. If objects are in collision, they are not added as collision pairs, as they are considered to always be in coll

(model, geom_model, qref)

Source from the content-addressed store, hash-verified

3
4
5def addSystemCollisionPairs(model, geom_model, qref):
6 """
7 Add the right collision pairs of a model, given qref.
8 qref is here as a `T-pose`. The function uses this pose to determine which objects are in collision
9 in this ref pose. If objects are in collision, they are not added as collision pairs, as they are considered
10 to always be in collision.
11 """
12 data = model.createData()
13 geom_data = geom_model.createData()
14 pin.updateGeometryPlacements(model, data, geom_model, geom_data, qref)
15 geom_model.removeAllCollisionPairs()
16 num_col_pairs = 0
17 for i in range(len(geom_model.geometryObjects)):
18 for j in range(i + 1, len(geom_model.geometryObjects)):
19 # Don't add collision pair if same object
20 if i != j:
21 gobj_i: pin.GeometryObject = geom_model.geometryObjects[i]
22 gobj_j: pin.GeometryObject = geom_model.geometryObjects[j]
23 if gobj_i.name == "floor" or gobj_j.name == "floor":
24 num_col_pairs += 1
25 col_pair = pin.CollisionPair(i, j)
26 geom_model.addCollisionPair(col_pair)
27 else:
28 if (
29 gobj_i.parentJoint != gobj_j.parentJoint
30 or gobj_i.parentJoint == 0
31 ):
32 if (
33 gobj_i.parentJoint != model.parents[gobj_j.parentJoint]
34 and gobj_j.parentJoint != model.parents[gobj_i.parentJoint]
35 or gobj_i.parentJoint == 0
36 or gobj_j.parentJoint == 0
37 ):
38 # Compute collision between the geometries. Only add the collision pair if there is no collision.
39 M1 = geom_data.oMg[i]
40 M2 = geom_data.oMg[j]
41 colreq = hppfcl.CollisionRequest()
42 colreq.security_margin = 1e-2 # 1cm of clearance
43 colres = hppfcl.CollisionResult()
44 hppfcl.collide(
45 gobj_i.geometry, M1, gobj_j.geometry, M2, colreq, colres
46 )
47 if not colres.isCollision():
48 num_col_pairs += 1
49 col_pair = pin.CollisionPair(i, j)
50 geom_model.addCollisionPair(col_pair)
51 print("Num col pairs = ", num_col_pairs)

Callers 3

test_memory.pyFile · 0.90
go2_contact_id.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected