-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbullet_collision_checker.py
75 lines (59 loc) · 2.64 KB
/
bullet_collision_checker.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from common import BulletRobotEnv
class BulletCollisionChecker(BulletRobotEnv):
def __init__(self, urdf_path, gui=False):
super().__init__(gui=gui, base_link='base_link')
assert 'sample.urdf' in urdf_path # ensure modified urdf
self.load_robot(urdf_path)
def in_collision(self, js):
assert js.shape[0] == self.DOF
self.marionette_robot(js)
self.perform_collision_check()
env_collision = False
if self.obstacle_ids is not None:
env_collision = self.env_collision_check()
return self.self_collision_check() or env_collision
def in_self_collision(self, js):
assert js.shape[0] == self.DOF
self.marionette_robot(js)
self.perform_collision_check()
return self.self_collision_check()
def in_env_collision(self, js):
assert js.shape[0] == self.DOF
self.marionette_robot(js)
self.perform_collision_check()
return self.env_collision_check()
def in_collision_complete(self, js):
assert js.shape[0] == self.DOF
self.marionette_robot(js)
self.perform_collision_check()
return self.complete_collision_check()
if __name__=='__main__':
from training import MpiNetDataset
from urdfpy import URDF
import numpy as np
# URDF_PATH = 'urdf/sawyer/sawyer_sample.urdf'
URDF_PATH = 'urdf/franka_panda/panda_motion_bench_sample.urdf'
# URDF_PATH = 'urdf/ur_robots/ur5_sample.urdf'
# URDF_PATH = 'urdf/kuka_iiwa14/iiwa14_sample.urdf'
# URDF_PATH = 'urdf/kinova/kinova_6dof_sample.urdf'
sim_handle = BulletCollisionChecker(URDF_PATH, gui=True)
urdf_handle = URDF.load(URDF_PATH)
jl_limits, ju_limits = [], []
for i in range(sim_handle.DOF):
limit = urdf_handle.actuated_joints[i].limit
jl_limits.append(limit.lower)
ju_limits.append(limit.upper)
jl_limits = np.asarray(jl_limits)
ju_limits = np.asarray(ju_limits)
mpinet_dataset = MpiNetDataset('global_solutions',
'resources/datasets/mpinet_dataset/train.hdf5',
'urdf/franka_panda/panda.urdf',
sample_color=True)
random_indices = np.random.choice(len(mpinet_dataset), 10, replace=False)
for idx in random_indices:
(_, _), obstacle_config, _ = mpinet_dataset[idx]
sim_handle.load_obstacles(obstacle_config)
js = np.random.uniform(jl_limits, ju_limits)
print(f'hard: {sim_handle.in_collision(js)}')
print(list(sim_handle.in_collision_complete(js)))
sim_handle.remove_obstacles()