in theseus/embodied/collision/eff_obj_contact.py [0:0]
def _error_from_distances(self, distances: torch.Tensor):
if self._use_huber:
eff_rad = self.eff_radius.data
err = distances.clone()
# linear (two-sided, otherwise this would be 0)
gt_r_idx = distances >= 2 * eff_rad
err[gt_r_idx] = distances[gt_r_idx] - 0.5 * eff_rad
# quadratic
lt_r_pos_idx = (distances < 2 * eff_rad).logical_or(distances > 0)
err[lt_r_pos_idx] = (
0.5 * (distances[lt_r_pos_idx] - eff_rad).square() / eff_rad
)
# linear
neg_idx = distances < 0
err[neg_idx] = -distances[neg_idx] + 0.5 * eff_rad
return err
else:
return (distances - self.eff_radius.data).abs()