def test_camera_to_car_rotation(self, car_rot_data, cam_rot_data,
                                 rel_cam_rot_data):
     cam_rot = np.array(cam_rot_data)
     cam_rel_rot = np.array(rel_cam_rot_data)
     orig_car_rot_m = create_model_rot_matrix(np.array(car_rot_data))
     car_rot_m = relative_and_absolute_camera_to_car_rotation_matrix(
         cam_rot, cam_rel_rot)
     self.assertTrue(np.allclose(car_rot_m, orig_car_rot_m, atol=5.e-3))
def entity_gta_location_to_toyota_location_world(model_sizes, pos, rot):
    """
    Gta center is somewhere in car, toyota center is in middle of car on ground. This transfer world gta car position
    into the world toyota car position
    """
    gta_center_to_toyota_center = get_gta_center_to_toyota_center(model_sizes)
    rot = create_model_rot_matrix(rot)
    world_location = pos + rot @ gta_center_to_toyota_center
    return world_location
def json_to_toyota_calibration(data):
    """
    Kalibrace kamery:
    matice vnitřní kalibrace - na diagonále je ohnisková vzdálenost v pixelech (tj, ohnisková vzdálenost v mm dělená fyzickou velikostí pixelu), v pravém sloupci střed obrázku (v pixelech)
    tři koeficienty radiálního zkreslení, u GTA nuly
    rotační matice kamery vůči autu
    translace kamery (umístění) vůči autu
    rozlišení obrázku

    input format (dictionary):
    {
        camera_relative_rotation,
        camera_relative_position,
        width,
        height
    }
    """
    def matrix_to_string(m):
        return '\n'.join([' '.join([str(i) for i in row]) for row in m])

    def array_to_string(a):
        return ' '.join([str(i) for i in a])

    part_1 = construct_toyota_proj_matrix(data)
    part_2 = [0, 0, 0]
    part_3 = create_model_rot_matrix(data['camera_relative_rotation'])

    # hardcoded for ASEA car used for onroad:
    model_sizes = get_my_car_model_sizes()
    part_4 = data['camera_relative_position'] - get_gta_center_to_toyota_center(
        model_sizes)
    part_5 = [data['width'], data['height']]
    parts = [
        matrix_to_string(part_1),
        array_to_string(part_2),
        matrix_to_string(part_3),
        array_to_string(part_4),
        array_to_string(part_5),
    ]
    return '\n\n'.join(parts)
def vehicle_rotation_relative_to_camera(entity_rotation, camera_rotation):
    entity_m = create_model_rot_matrix(entity_rotation)
    camera_m = create_rot_matrix(camera_rotation)
    relative_m = entity_m @ camera_m
    relative_rot = rot_matrix_to_euler_angles(relative_m)
    return relative_rot
def vehicle_rotation_relative_to_my_car(entity_rotation, my_car_rotation):
    entity_m = create_model_rot_matrix(entity_rotation)
    my_car_m = create_model_rot_matrix(my_car_rotation)
    relative_m = entity_m @ my_car_m.T
    relative_rot = model_rot_matrix_to_euler_angles(relative_m)
    return relative_rot
 def test_model_euler_angles_matrix_transformation(self, data):
     orig_angles = np.array(data)
     matrix = create_model_rot_matrix(orig_angles)
     angles = model_rot_matrix_to_euler_angles(matrix)
     self.assertTrue(np.allclose(angles, orig_angles))