Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model
Messages
Services
Plugins
Recent questions tagged tag_based_sfm_calibrator at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | BSD |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | sensor calibration tools for autonomous driving and robotics |
Checkout URI | https://github.com/tier4/calibrationtools.git |
VCS Type | git |
VCS Version | tier4/universe |
Last Updated | 2025-07-31 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | computer-vision camera-calibration calibration autonomous-driving ros2 autoware sensor-calibration lidar-calibration robtics |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Kenzo Lobos Tsunekawa
Authors
tag_based_sfm_calibrator
A tutorial for this calibrator can be found here.
Purpose
The tag_based_sfm_calibrator
package performs extrinsic calibration among most sensors and frames used in autonomous driving and robotics.
In particular, it allows the following extrinsic calibrations:
- base_frame (e.g.,
base_link
) - cameras
- lidars (see the list of supported lidars for Lidartag [1] detection in our repository)
Note: depending on how this tool is configured it can perform the following calibrations:
- base-camera(s)
- base-lidar(s)
- camera-camera(s)
- lidar-lidar(s)
- camera(s)-lidar(s)
- base-camera(s)-lidar(s)
Inner-workings / Algorithms
As the name of the calibrator suggests, this tool relies upon SfM (Structure from Motion) to find the extrinsics between different sensors. However, since we prioritize calibration accuracy, we do not use natural features and local descriptors, but fiducial systems (in our case apriltags/lidartags). Furthermore, since the sensors are attached to a still vehicle, we employ an additional camera (from now on referred to as the external camera
), which we use to create a graph and connect the different vehicle’s sensors, which we optimize using standard bundling adjustment.
By using a particular sensor as the origin during bundle adjustment, the other sensor’s poses correspond to the desired extrinsics.
Base calibration, on the other hand, can not be directly formulated as a sensor calibration problem (since the base is not a sensor !). We instead formulate an indirect approach to find the base_link
by using its definitions: a frame between the rear axle projected to the ground. We place two tags in each of the rear wheels and then define the base_link
as the intersection between these two tags projected into the ground.
ROS Interfaces
Input
Name | Type | Description |
---|---|---|
{calibration_lidar_detections_topics} |
lidartag_msgs::msg:: LidarTagDetectionArray
|
Lidartag detections. calibration_lidar_detections_topics is provided via parameters |
{calibration_camera_detections_topics} |
apriltag_msgs::msg:: AprilTagDetectionArray
|
Apriltag detections. calibration_camera_detections_topics is provided via parameters |
{calibration_compressed_image_topics} |
sensor_msgs::msg:: CompressedImage
|
Calibration cameras’ image topics. Not used directly for calibration but for debugging and evaluation. {calibration_compressed_image_topics} is provided via parameters |
{calibration_camera_info_topics} |
sensor_msgs::msg:: CameraInfo
|
Intrinsic parameters for the calibration cameras . calibration_camera_info_topics is provided via parameters |
Output
Name | Type | Description |
---|---|---|
markers |
visualization_msgs::msg::MarkerArray |
Calibration markers |
raw_detections_markers |
visualization_msgs::msg::MarkerArray |
Detection markers |
Services
Name | Type | Description |
---|---|---|
extrinsic_calibration |
tier4_sensor_calibration_msgs:: srv::ExtrinsicCalibrator
|
Generic calibration service. The call is blocking and only returns when the calibration process finishes |
add_external_camera_ images_to_scenes
|
tier4_sensor_calibration_msgs:: srv::FilesListSrv
|
Provides a list of external camera images’ files for each scene
|
add_calibration_sensor_ detections_to_new_scene
|
tier4_sensor_calibration_msgs::srv::Empty |
Creates a new scene from the latest detections received by the node |
load_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a file containing previously computed external camera intrinsics |
save_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a path to save the computed external camera intrinsics |
calibrate_external_camera_intrinsics |
tier4_sensor_calibration_msgs::srv::FilesSrv |
Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
process_scenes |
tier4_sensor_calibration_msgs::srv::Empty |
Processes all the obtained scenes , mainly applying the tag detector to the external images |
calibrate |
tier4_sensor_calibration_msgs::srv::Empty |
Uses the processed scenes to perform bundling adjustment optimization |
load_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Loads a processed database of scenes
|
save_database |
tier4_sensor_calibration_msgs::srv::FilesSrv |
For debugging purposes. Saves a processed database of scenes
|
Parameters
Core Parameters
Name | Type | Default Value | Description |
---|---|---|---|
publish_tfs |
bool |
Flag to optionally publish the resulting calibration as tfs | |
write_debug_images |
bool |
Flag to optionally create images with the resulting calibration poses and detections | |
base_frame |
std::string |
base_link |
The base_frame is used to compare the initial and calibrated values |
main_calibration_sensor_frame |
std::string |
The sensor whose frame will act as the origin during optimization | |
calibration_lidar_frames |
std::vector<std::string> |
List of the calibration lidars’ frames | |
calibration_camera_frames |
std::vector<std::string> |
List of calibration cameras’ frames | |
lidartag_to_apriltag_scale |
double |
The scale factor for converting lidartag detection sizes to apriltag detection sizes | |
auxiliar_tag.family |
std::string |
The family name of the auxiliary tags | |
auxiliar_tag.rows |
int |
The number of rows in the auxiliary tags | |
auxiliar_tag.cols |
int |
The number of columns in the auxiliary tags | |
auxiliar_tag.size |
double |
The size of the auxiliary tags in meters | |
auxiliar_tag.spacing |
double |
The spacing between auxiliary tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
auxiliar_tag.ids |
std::vector<int64_t> |
The auxiliar tag IDs | |
waypoint_tag.family |
std::string |
The family name of the waypoint tag | |
waypoint_tag.rows |
int |
The number of rows in the waypoint tag | |
waypoint_tag.cols |
int |
The number of columns in the waypoint tag | |
waypoint_tag.size |
double |
The size of the waypoint tag in meters | |
waypoint_tag.spacing |
double |
The spacing between waypoint tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
waypoint_tag.ids |
std::vector<int64_t> |
The waypoint tag IDs | |
ground_tag.family |
std::string |
The family name of the ground tag | |
ground_tag.rows |
int |
The number of rows in the ground tag | |
ground_tag.cols |
int |
The number of columns in the ground tag | |
ground_tag.size |
double |
The size of the ground tag in meters | |
ground_tag.spacing |
double |
The spacing between ground tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one | |
ground_tag.ids |
std::vector<int64_t> |
The ground tags IDs | |
wheel_tag.family |
std::string |
The family name of the wheel tag | |
wheel_tag.rows |
int |
The number of rows in the wheel tag | |
wheel_tag.cols |
int |
The number of columns in the wheel tag | |
wheel_tag.size |
double |
The size of the wheel tag in meters | |
wheel_tag.spacing |
double |
The spacing between wheel tags (as a proportion relative to the tag size). Only relevant when rows or cols is greater than one |
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/apriltag_detector.launch.xml
-
- ns [default: ]
- image_compressed_topic
- camera_info_topic
- filtered_detections_topic [default: apriltag/filtered/detections_array]
- apriltag_detector_families
- launch/calibrator.launch.xml
-
- ns [default: ]
- rviz [default: true]
- calibration_service_name [default: extrinsic_calibration]
- config_file [default: omiya_calibration_room_2023.param.yaml]
- publish_tfs [default: true]
- fixed_ground_plane_model [default: false]
- base_frame [default: base_link]
- main_calibration_sensor_frame
- calibration_lidar_0_frame [default: ]
- calibration_lidar_1_frame [default: ]
- calibration_lidar_2_frame [default: ]
- calibration_lidar_3_frame [default: ]
- calibration_lidar_4_frame [default: ]
- calibration_lidar_5_frame [default: ]
- calibration_lidar_6_frame [default: ]
- calibration_lidar_7_frame [default: ]
- calibration_camera_0_frame [default: ]
- calibration_camera_1_frame [default: ]
- calibration_camera_2_frame [default: ]
- calibration_camera_3_frame [default: ]
- calibration_camera_4_frame [default: ]
- calibration_camera_5_frame [default: ]
- calibration_camera_6_frame [default: ]
- calibration_camera_7_frame [default: ]
- calibration_lidar_0_model [default: ]
- calibration_lidar_1_model [default: ]
- calibration_lidar_2_model [default: ]
- calibration_lidar_3_model [default: ]
- calibration_lidar_4_model [default: ]
- calibration_lidar_5_model [default: ]
- calibration_lidar_6_model [default: ]
- calibration_lidar_7_model [default: ]
- calibration_lidar_0_topic [default: /null]
- calibration_lidar_1_topic [default: /null]
- calibration_lidar_2_topic [default: /null]
- calibration_lidar_3_topic [default: /null]
- calibration_lidar_4_topic [default: /null]
- calibration_lidar_5_topic [default: /null]
- calibration_lidar_6_topic [default: /null]
- calibration_lidar_7_topic [default: /null]
- calibration_camera_info_0_topic [default: ]
- calibration_camera_info_1_topic [default: ]
- calibration_camera_info_2_topic [default: ]
- calibration_camera_info_3_topic [default: ]
- calibration_camera_info_4_topic [default: ]
- calibration_camera_info_5_topic [default: ]
- calibration_camera_info_6_topic [default: ]
- calibration_camera_info_7_topic [default: ]
- calibration_compressed_image_0_topic [default: ]
- calibration_compressed_image_1_topic [default: ]
- calibration_compressed_image_2_topic [default: ]
- calibration_compressed_image_3_topic [default: ]
- calibration_compressed_image_4_topic [default: ]
- calibration_compressed_image_5_topic [default: ]
- calibration_compressed_image_6_topic [default: ]
- calibration_compressed_image_7_topic [default: ]
- calibration_camera_0_detections_topic [default: ]
- calibration_camera_1_detections_topic [default: ]
- calibration_camera_2_detections_topic [default: ]
- calibration_camera_3_detections_topic [default: ]
- calibration_camera_4_detections_topic [default: ]
- calibration_camera_5_detections_topic [default: ]
- calibration_camera_6_detections_topic [default: ]
- calibration_camera_7_detections_topic [default: ]
- auxiliar_tag_ids [default: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
- waypoint_tag_ids [default: [0, 3, 4, 5]]
- ground_tag_ids [default: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]
- left_wheel_tag_id [default: 22]
- right_wheel_tag_id [default: 26]
- launch/lidartag_detector.launch.xml
-
- ns [default: ]
- pointcloud_topic
- filtered_detections_topic [default: lidartag/filtered/detections_array]
- lidar_model