Components Generated by Maintainer Scripts
This section records dataset components that are effectively part of the dataset according to the maintainers’ papers and/or repos but need to be generated from the downloaded data using maintainer scripts. All such generated data is in the retained run artifacts of the maintainer-script regeneration. The wrappers used to generate the data are the maintainer-script wrapper code.
Note that we only generate dataset components using maintainer-provided scripts when it would introduce something that is not already present, at least in a functionally equivalent form, in the dataset download.
This is why you will not see Kalibr outputs promoted here or in the dir-8 folders: the download already ships camera_calibration_klu1.yaml, camera_calibration_klu2.yaml, and camera_calibration_mars.yaml under insane_sensor_calib_preprocessed/, with the nav and stereo camera intrinsics/extrinsics.
The one real exception is timeshift_cam_imu: it ships only for the Mars nav-camera raw bundle, not for klu1/klu2 nav-cam or stereo.
Dir-8 still leaves Kalibr out because this page is focused on the maintainer-side transition marker workflow and its directly relevant derived products.
The promoted dir-8 results currently comprise the transition marker chain only:
transition_1..3/tag_detections.bag:- detection-only fiducial exports generated by
run_transition_marker_pipeline.sh, which rebuilds a nav-camera ROS bag fromnav_cam_timestamps.csvplusimg/*.png, then runs the maintainers’csv2bag.pyand a thin compatibility wrapper aroundexport_tag_data.py. export_tag_data.pydetects ArUco tags on undistorted nav-camera images and estimates poses per tag withcv.aruco.estimatePoseSingleMarkers(..., zeroDistCoeffs); it is not a board-levelsolvePnPexport path.- The script writes
/marker_detectionsonly when a frame has at least one known-size tag pose, so these bags are not one-message-per-nav-frame products: within each bag’s own time span they omit317 / 532 / 580raw nav-camera frames ontransition_1 / 2 / 3. - Across the full nav-camera frame counts of
4348 / 4525 / 3468ontransition_1 / 2 / 3, the bags carry748 / 795 / 1132/marker_detectionsmessages, so the detection stream is the per-run count of marker-based camera poses available through the transition field. - They are the public detection stream the download itself does not ship, and they are the entry point for marker-based transition-ground-truth work.
- detection-only fiducial exports generated by
transition_1..3/tag_calibration.mat:- per-run tag-field calibration generated from
tag_detections.bagbygenerate_tag_calibration_public.m, which calls the maintainers’ tag-calibration functions without the plotting shell incalibrate_tags_from_bag.m. - The maintainers describe a dedicated calibration recording for one static transition marker field; the promoted dir-8 files are not that single dedicated-sequence artifact, but alternate per-run estimates of the same static field reconstructed from each transition flight’s own detections.
- They are still the absolute marker-field maps that turn detections into positions in a tag-world frame.
- All three promoted files use
main_tag_id = 102, the0.5 mtag on board 8, and save sparse(102,107)tag_calibration_trans/tag_calibration_posecell arrays populated only along themain_tag_idrow. - Because the three files reconstruct the same physical field from independent flights, their estimates disagree at the noise floor of that reconstruction, not because the rig moved.
- Reconstructing each board’s local reference tag (
gen_tag_board_caliblocal main, tag ids2 / 17 / 32 / 47 / 62 / 77 / 88 / 99) in the sharedmain_tag_id = 102frame and comparing across the three maps gives board-to-board pose disagreements of median5.2 cm/3.1°and up to35.8 cm/7.4°(worst on boards 6 and 7); the full-field per-tag spread is median5.8 cm/2.6°, p9017.5 cm/5.9°. - This is estimate quality, not a changed setup: the mocap
tag_board_8rigid body shows the physical board fixed acrosstransition_1/2/3to0.6 mm/0.04°(Motion Capture). - Treat the three
tag_calibration.matfiles as interchangeable few-centimetre estimates of one static field, not as three physical layouts and not as a millimetre-accurate map.
- per-run tag-field calibration generated from
transition_1..3/tag_trajectory.mat:- per-run marker trajectory generated from
tag_detections.bagplustag_calibration.matbygenerate_tag_trajectory_public.m, which calls the maintainers’tags_to_trajectorypath. - This is the per-detection-message camera trajectory through the transition marker field and the load-bearing marker-based pose lane for transition-ground-truth work.
cam_tag_traj.positionis the camera position in the tag-world frame, andcam_tag_traj.orientationis stored as quaternion[q_w, q_x, q_y, q_z]because the maintainerQuaternion.doublewrites[s vx vy vz].- Its timestamps match
tag_detections.bagexactly. - The maintainer trajectory path explicitly skips
tag_id == 0, so tag-0 detections (125 / 195 / 166messages ontransition_1 / 2 / 3) never contribute to the saved trajectory or calibration map.
- per-run marker trajectory generated from
The dir-8 code also contains a public-data path for alternative stitched transition outputs:
estimate_public_pximu_mv.mreconstructs the IMU-to-mocap extrinsic thatdata_stitching.mconsumes but the published YAMLs do not ship.run_transition_stitching_public.shstagesmatlab_sensor_data.mat,sensor_calibration.m,settings.yaml,tag_calibration.mat,tag_trajectory.mat, andoutdoor_ground_truth_data.matinto the hard-coded/tmppaths expected by the maintainers’ stitcher, then runsdata_stitching.m.- This path can generate a new
transition_gt.matand a newtime_info_aligned.yaml, and it can also re-derive alternativetransition_gt_in_gps.csvandtransition_gt_in_moap.csvfiles from public data. - The two transition GT CSVs already ship in each transition run’s
ground_truth/directory. - The stitcher also declares a
transition_gt_in_tag.csvfilename but does not write such a file, and no shipped transitionground_truth/directory contains one. - Those stitched outputs are not promoted into the dir-8 results folder yet because the alignment-window and cut-time inputs are run-chosen values, not fixed dataset constants.
Regenerating the Marker Chain
The transition marker chain regenerates from the public nav-camera PNGs:
- rebuild a nav-camera ROS bag from
nav_cam_timestamps.csv+img/*.png - run the maintainers’
csv2bag.py - then their
export_tag_data.py(ArUco detection on undistorted nav images,main_tag_id = 102) to writetag_detections.bag - and the maintainers’ tag-calibration and
tags_to_trajectorypaths to writetag_calibration.matandtag_trajectory.mat
The promoted products persist among the retained run artifacts of the maintainer-script regeneration.
The alternative full-transition stitching path (data_stitching.m) needs run-chosen alignment-window and cut times and is not promoted.