collisions.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import pinocchio as pin
3 import hppfcl as fcl
4 
5 import os
6 from os.path import dirname, join, abspath
7 
8 pinocchio_model_dir = join(dirname(dirname(str(abspath(__file__)))), "models")
9 
10 model_path = join(pinocchio_model_dir, "example-robot-data/robots")
11 mesh_dir = pinocchio_model_dir
12 urdf_filename = "romeo_small.urdf"
13 urdf_model_path = join(join(model_path, "romeo_description/urdf"), urdf_filename)
14 
15 # Load model
16 model = pin.buildModelFromUrdf(urdf_model_path, pin.JointModelFreeFlyer())
17 
18 # Load collision geometries
19 geom_model = pin.buildGeomFromUrdf(
20  model, urdf_model_path, pin.GeometryType.COLLISION, mesh_dir
21 )
22 
23 # Add collisition pairs
24 geom_model.addAllCollisionPairs()
25 print("num collision pairs - initial:", len(geom_model.collisionPairs))
26 
27 # Remove collision pairs listed in the SRDF file
28 srdf_filename = "romeo.srdf"
29 srdf_model_path = model_path + "/romeo_description/srdf/" + srdf_filename
30 
31 pin.removeCollisionPairs(model, geom_model, srdf_model_path)
32 print(
33  "num collision pairs - after removing useless collision pairs:",
34  len(geom_model.collisionPairs),
35 )
36 
37 # Load reference configuration
38 pin.loadReferenceConfigurations(model, srdf_model_path)
39 
40 # Retrieve the half sitting position from the SRDF file
41 q = model.referenceConfigurations["half_sitting"]
42 
43 # Create data structures
44 data = model.createData()
45 geom_data = pin.GeometryData(geom_model)
46 
47 
48 # Compute all the collisions
49 pin.computeCollisions(model, data, geom_model, geom_data, q, False)
50 
51 # Print the status of collision for all collision pairs
52 for k in range(len(geom_model.collisionPairs)):
53  cr = geom_data.collisionResults[k]
54  cp = geom_model.collisionPairs[k]
55  print(
56  "collision pair:",
57  cp.first,
58  ",",
59  cp.second,
60  "- collision:",
61  "Yes" if cr.isCollision() else "No",
62  )
63 
64 # Compute for a single pair of collision
65 pin.updateGeometryPlacements(model, data, geom_model, geom_data, q)
66 pin.computeCollision(geom_model, geom_data, 0)
path


pinocchio
Author(s):
autogenerated on Tue Jun 25 2024 02:42:36