Exemple #1
0
 def post_process_in_mem(self, se3):
     rot = SE3.extract_rotation(se3)
     euler = SE3.rotationMatrixToEulerAngles(rot)
     rot_new = SE3.makeS03(euler[0], euler[1], -euler[2])
     se3[0:3, 0:3] = rot_new
     #se3[0, 3] = -se3[0, 3]
     se3[1, 3] = -se3[1, 3]
Exemple #2
0
def lie_ackermann_correction(gradient_step, motion_cov_inv, ackermann_twist,
                             vo_twist, twist_size):
    # ack_prior = np.multiply(Gradient_step_manager.current_alpha,ackermann_pose_prior)
    ack_prior = ackermann_twist

    #ack_prior = np.matmul(motion_cov_inv, ack_prior) # 1
    #ack_prior = np.multiply(gradient_step, ack_prior) # 2

    R_w, t_w = exp(vo_twist, twist_size)
    R_ack, t_ack = exp(ack_prior, twist_size)

    SE_3_w = np.append(np.append(R_w, t_w, axis=1),
                       Utils.homogenous_for_SE3(),
                       axis=0)
    SE_3_ack = np.append(np.append(R_ack, t_ack, axis=1),
                         Utils.homogenous_for_SE3(),
                         axis=0)

    SE3_w_ack = SE3.pose_pose_composition_inverse(SE_3_w, SE_3_ack)

    w_inc = ln(SE3.extract_rotation(SE3_w_ack),
               SE3.extract_translation(SE3_w_ack), twist_size)

    w_inc = np.multiply(gradient_step, np.matmul(motion_cov_inv, w_inc))  # 1
    #w_inc = np.matmul(motion_cov_inv, w_inc) # 2
    #w_inc = np.multiply(gradient_step, w_inc)

    return w_inc
Exemple #3
0
    def post_process_in_mem(self, se3):
        x = se3[0, 3]
        y = se3[1, 3]
        z = se3[2, 3]
        rot = SE3.extract_rotation(se3)
        euler = SE3.rotationMatrixToEulerAngles(rot)
        rot_new = SE3.makeS03(euler[2], -euler[1], euler[0])
        #se3[0:4,0:4] = se3_new[0:4,0:4]

        se3[0:3, 0:3] = rot_new[0:3, 0:3]

        se3[0, 3] = z
        #se3[1, 3] = y
        se3[2, 3] = -x
Exemple #4
0
    def post_process_in_mem(self, se3):
        rot = SE3.extract_rotation(se3)
        euler = SE3.rotationMatrixToEulerAngles(rot)
        #rot_new = SE3.makeS03(euler[1], -euler[2], euler[0])
        rot_new = SE3.makeS03(euler[0], euler[2], euler[1])
        #se3[0:3, 0:3] = rot_new
        x = se3[0, 3]
        y = se3[1, 3]
        z = se3[2, 3]
        #se3[0, 3] = -y
        #se3[1, 3] = z
        #se3[2, 3] = -x

        se3[0, 3] = x
        se3[1, 3] = z
        se3[2, 3] = y
Exemple #5
0
 def render(self):
     (height, width) = self.resolution
     for x in range(0, width):
         for y in range(0, height):
             ray_direction_camera_space = self.camera.camera_ray_direction_camera_space(
                 x, y, width, height, self.fov)
             camera_to_world = self.camera.se3_inv
             rot = SE3.extract_rotation(camera_to_world)
             ray_world_space = Utils.normalize(
                 np.matmul(rot, ray_direction_camera_space))
             ray = Geometry.Ray(self.camera.origin_ws[0:3], ray_world_space)
             (b, t, sphere) = self.find_closest_intersection(ray)
             if sphere.is_intersection_acceptable(b, t):
                 intersection_point = Geometry.point_for_ray(ray, t)
                 normal = sphere.normal_for_point(intersection_point)
                 depth = intersection_point[2]
                 self.depth_buffer[y, x] = fabs(depth)
                 self.frame_buffer[y, x] = phong_shading(
                     self.light_ws, intersection_point, normal)
Exemple #6
0
# We only need the gradients of the target frame
frame_reference = Frame.Frame(im_greyscale_reference, depth_reference,
                              camera_reference, False)
frame_target = Frame.Frame(im_greyscale_target, depth_target, camera_target,
                           True)

#visualizer = Visualizer.Visualizer(photometric_solver)

SE3_est = Solver.solve_photometric(frame_reference,
                                   frame_target,
                                   threadLock=None,
                                   pose_estimate_list=None,
                                   max_its=20000,
                                   eps=0.001,
                                   alpha_step=1.0,
                                   gradient_monitoring_window_start=5.0,
                                   image_range_offset_start=0,
                                   twist_prior=None,
                                   hessian_prior=None,
                                   use_ndc=use_ndc,
                                   use_robust=True,
                                   track_pose_estimates=False,
                                   debug=False)
euler_angles_XYZ = SE3.rotationMatrixToEulerAngles(
    SE3.extract_rotation(SE3_est))

print(SE3_est)
print(Utils.radians_to_degrees(euler_angles_XYZ[0]),
      Utils.radians_to_degrees(euler_angles_XYZ[1]),
      Utils.radians_to_degrees(euler_angles_XYZ[2]))
Exemple #7
0
                                   threadLock=None,
                                   pose_estimate_list=None,
                                   max_its=20000,
                                   eps=0.0005,
                                   alpha_step=1.0,
                                   gradient_monitoring_window_start=20,
                                   image_range_offset_start=0,
                                   twist_prior=None,
                                   hessian_prior=None,
                                   use_ndc=use_ndc,
                                   use_robust=True,
                                   track_pose_estimates=False,
                                   debug=False)

euler_angles_XYZ = SE3.rotationMatrixToEulerAngles(
    SE3.extract_rotation(SE3_est))
euler_angles_gt_XYZ = SE3.rotationMatrixToEulerAngles(
    SE3.extract_rotation(SE3_ref_target))

print('*' * 80)
print('GROUND TRUTH\n')
print(SE3_ref_target)
print(Utils.radians_to_degrees(euler_angles_gt_XYZ[0]),
      Utils.radians_to_degrees(euler_angles_gt_XYZ[1]),
      Utils.radians_to_degrees(euler_angles_gt_XYZ[2]))
print('*' * 80)

print(SE3_est)
print(Utils.radians_to_degrees(euler_angles_XYZ[0]),
      Utils.radians_to_degrees(euler_angles_XYZ[1]),
      Utils.radians_to_degrees(euler_angles_XYZ[2]))
Exemple #8
0
#depth_target /= depth_factor
#depth_reference /= depth_factor

se3_identity = np.identity(4, dtype=Utils.matrix_data_type)

# fx and fy affect the resulting coordiante system of the se3 matrix
intrinsic_identity = Intrinsic.Intrinsic(-1, -1, image_width/2, image_height/2)
if use_ndc:
    intrinsic_identity = Intrinsic.Intrinsic(-1, -1, 1/2, 1/2) # for ndc


# reference frame is assumed to be the origin
# target frame SE3 is unknown i.e. what we are trying to solve
camera_reference = Camera.Camera(intrinsic_identity, se3_identity)
camera_target = Camera.Camera(intrinsic_identity, se3_identity)

# We only need the gradients of the target frame
frame_reference = Frame.Frame(im_greyscale_reference, depth_reference, camera_reference, False)
frame_target = Frame.Frame(im_greyscale_target, depth_target, camera_target, True)

SE3_est = Solver.solve_photometric(frame_reference, frame_target, 20000, 0.33, alpha_step=1.0, use_ndc = use_ndc, debug = False)
euler_angles_XYZ = SE3.rotationMatrixToEulerAngles(SE3.extract_rotation(SE3_est))

print(SE3_est)
print(Utils.radians_to_degrees(euler_angles_XYZ[0]),
      Utils.radians_to_degrees(euler_angles_XYZ[1]),
      Utils.radians_to_degrees(euler_angles_XYZ[2]))