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))