kitti_odometry module¶
-
class
kitti_odometry.KittiEvalOdom¶ Bases:
objectEvaluate odometry result Usage example:
vo_eval = KittiEvalOdom() vo_eval.eval(gt_pose_txt_dir, result_pose_txt_dir)
-
calc_sequence_errors(poses_gt, poses_result)¶ calculate sequence error :param poses_gt: {idx: 4x4 array}, ground truth poses :type poses_gt: dict :param poses_result: {idx: 4x4 array}, predicted poses :type poses_result: dict
- Returns
- [first_frame, rotation error, translation error, length, speed]
first_frame: frist frame index
rotation error: rotation error per length
translation error: translation error per length
length: evaluation trajectory length
speed: car speed (#FIXME: 10FPS is assumed)
- Return type
err (list list)
-
compute_ATE(gt, pred)¶ Compute RMSE of ATE :param gt: ground-truth poses :type gt: 4x4 array dict :param pred: predicted poses :type pred: 4x4 array dict
-
compute_RPE(gt, pred)¶ Compute RPE :param gt: ground-truth poses :type gt: 4x4 array dict :param pred: predicted poses :type pred: 4x4 array dict
- Returns
rpe_trans rpe_rot
-
compute_overall_err(seq_err)¶ Compute average translation & rotation errors :param seq_err: [[r_err, t_err],[r_err, t_err],…]
r_err (float): rotation error
t_err (float): translation error
- Returns
average translation error ave_r_err (float): average rotation error
- Return type
ave_t_err (float)
-
compute_segment_error(seq_errs)¶ This function calculates average errors for different segment. :param seq_errs: list of errs; [first_frame, rotation error, translation error, length, speed]
first_frame: frist frame index
rotation error: rotation error per length
translation error: translation error per length
length: evaluation trajectory length
speed: car speed (#FIXME: 10FPS is assumed)
- Returns
{100:[avg_t_err, avg_r_err],…}
- Return type
avg_segment_errs (dict)
-
eval(args)¶ Evaulate required/available sequences :param gt_dir: ground truth poses txt files path :type gt_dir: str :param result_dir: pose predictions txt files directory :type result_dir: str :param alignment: if not None, optimize poses by
scale: optimize scale factor for trajectory alignment and evaluation
scale_7dof: optimize 7dof for alignment and use scale for trajectory evaluation
7dof: optimize 7dof for alignment and evaluation
6dof: optimize 6dof for alignment and evaluation
-
last_frame_from_segment_length(dist, first_frame, length)¶ Find frame (index) that away from the first_frame with the required distance :param dist: distance of each pose w.r.t frame-0 :type dist: float list :param first_frame: start-frame index :type first_frame: int :param length: required distance :type length: float
- Returns
end-frame index. if not found return -1
- Return type
i (int) / -1
-
load_poses_from_txt(file_name)¶ Load poses from txt (KITTI format) Each line in the file should follow one of the following structures
idx pose(3x4 matrix in terms of 12 numbers)
pose(3x4 matrix in terms of 12 numbers)
- Parameters
file_name (str) – txt file path
- Returns
{idx: 4x4 array}
- Return type
poses (dict)
-
plot_error(avg_segment_errs, file_name)¶ Plot per-length error :param avg_segment_errs: {100:[avg_t_err, avg_r_err],…} :type avg_segment_errs: dict :param file_name: the results file named. :type file_name: str
-
plot_trajectory(poses_gt, poses_result, file_name)¶ Plot trajectory for both GT and prediction :param poses_gt: {idx: 4x4 array}; ground truth poses :type poses_gt: dict :param poses_result: {idx: 4x4 array}; predicted poses :type poses_result: dict :param file_name: the results file named. :type file_name: str
-
rotation_error(pose_error)¶ Compute rotation error :param pose_error: relative pose error :type pose_error: 4x4 array
- Returns
rotation error
- Return type
rot_error (float)
-
save_sequence_errors(err, file_name)¶ Save sequence error :param err: error information :type err: list list :param file_name: txt file for writing errors :type file_name: str
-
scale_optimization(gt, pred)¶ Optimize scaling factor :param gt: ground-truth poses :type gt: 4x4 array dict :param pred: predicted poses :type pred: 4x4 array dict
- Returns
predicted poses after optimization
- Return type
new_pred (4x4 array dict)
-
trajectory_distances(poses)¶ Compute distance for each pose w.r.t frame-0 :param poses: {idx: 4x4 array} :type poses: dict
- Returns
distance of each pose w.r.t frame-0
- Return type
dist (float list)
-
translation_error(pose_error)¶ Compute translation error :param pose_error: relative pose error :type pose_error: 4x4 array
- Returns
translation error
- Return type
trans_error (float)
-
write_result(f, seq, errs)¶ Write result into a txt file :param f: :type f: IOWrapper :param seq: sequence number :type seq: int :param errs: [ave_t_err, ave_r_err, ate, rpe_trans, rpe_rot] :type errs: list
-
-
kitti_odometry.scale_lse_solver(X, Y)¶ Least-sqaure-error solver Compute optimal scaling factor so that s(X)-Y is minimum :param X: current data :type X: KxN array :param Y: reference data :type Y: KxN array
- Returns
scaling factor
- Return type
scale (float)
-
kitti_odometry.umeyama_alignment(x, y, with_scale=False)¶ Computes the least squares solution parameters of an Sim(m) matrix that minimizes the distance between a set of registered points. Umeyama, Shinji: Least-squares estimation of transformation parameters
between two point patterns. IEEE PAMI, 1991
- Parameters
x – mxn matrix of points, m = dimension, n = nr. of data points
y – mxn matrix of points, m = dimension, n = nr. of data points
with_scale – set to True to align also the scale (default: 1.0 scale)
- Returns
r, t, c - rotation matrix, translation vector and scale factor