in mujoco_worldgen/objs/obj.py [0:0]
def set_absolute_position(self, origin):
'''
Set absolute position of objects, recursing throught all children.
origin - absolute position of this object's origin
'''
assert len(origin) == 3, "Invalid origin: {}".format(origin)
assert len(self.relative_position) == 2, \
"Invalid relative_position: {}".format(self.relative_position)
self.absolute_position = np.array(origin, dtype=np.float)
# Note relative_position is X,Y but our absolute_position is X,Y,Z
self.absolute_position[:2] += self.relative_position
for placement_name, children in self.children.items():
placement = self.placements[placement_name]
offset = self.absolute_position + placement['origin']
for child, _ in children:
if child.placeable:
child.set_absolute_position(offset)
# Calculate positions of markers
for marker in self.markers:
if marker['relative_xyz'] is not None:
relative_xyz = np.array(marker['relative_xyz'], dtype='f8')
marker['position'] = relative_xyz * np.array(self.size, dtype=np.float)
for i in range(3):
if np.abs(self.size[i]) < 1e-4:
marker["position"][i] = relative_xyz[i]
marker['position'] -= self.size * 0.5
elif marker['absolute_xyz'] is not None:
marker['position'] = np.array(marker['absolute_xyz'], dtype='f8')
else:
assert False, 'Neither absolute nor relative xyz provided.'