Extrinsic Calibration for Mobile Robots
You can use these instructions to calibrate the positions and orientations of sensors on a mobile robot. This process is known as Extrinsic Calibration and it enables robotics functions that combine information from multiple sensor modalities.
The extrinsic calibration results are encoded in a URDF calibration file, which contains the relative position of different sensors on the robot.
Instructions
Extrinsic Calibration of Sensors in Custom Locations
We suggest evaluating existing calibration solutions from companies such as Main Street Autonomy (MSA) or Tangram Vision for your particular needs.
Note
Make sure that the calibration solution supports the Extrinsic Calibration Requirements and that the resulting URDF calibration file follows the Isaac Requirements for URDF files.
The usual process for most calibration solutions include:
Define a nominals URDF file and publish its transformations to the
/tf_static
topic, so that they can be recorded in the rosbag in the next step.Recording a rosbag with your robot. This step may include driving the robot in a particular motion or placing a calibration target around the robot.
Processing the rosbag with a calibration tool or sharing it with the calibration provider. The calibration tool or service will generate a URDF calibration file.
If the chosen calibration solution does not not support camera - ground calibration, you can complement the extrinsics calibration URDF with the output of the isaac_ros_ground_calibration tool.
Placement of the URDF calibration file in the robot.
See the sections below for additional details.
URDF nominals file:
This step may be optional depending on the calibration solution and sensors that you are calibrating. For example, camera-camera calibration with overlapping Field of View (FoV) may not require nominals. On the other hand, IMU, 2D LIDAR, or robot odometry may not be fully observable or reliable during calibration. In those cases, nominals allow to constrain the calibrated URDF file to the best known measurements from a CAD model. Make sure to follow the requirements and understand the limitations of the chosen calibration solution.
Unless nominals are provided for the robot that you are calibrating (see the Using Nominals
section), in the general case it is strongly recommended that you define a nominals URDF file
for your robot and publish its transformations to the /tf_static
topic, so that they can be
recorded in the rosbag that will be used for calibration.
The supported process to achieve this goal when using Nova Sensors is:
Define the URDF nominals file following the Isaac Requirements for URDF files.
Place the URDF nominals file in the following path in the robot:
/etc/nova/calibration/isaac_nominals.urdf
(named asisaac_nominals.urdf
).Make sure to have a
calibration:
line in the robot configuration YAML file that will be used for recording in the next step (see robot configuration YAML examples).Use the isaac_ros_nova_recorder to record the calibration rosbag. If it finds a nominals URDF in the specified location, it will load it with a robot_state_publisher and record its contents in the
/tf
and/tf_static
topics.
Rosbag recordings used for calibration:
Most calibration solutions expect a rosbag as input data. When calibrating Nova Sensors, it is strongly recommended that you follow the two-step process below:
Record the calibration rosbag with the isaac_ros_nova_recorder. It allows for efficient recording of multiple data streams by using H.264 compression.
Use the rosbag_converter tool to uncompress the messages in the rosbag to the types expected by most calibration solutions:
Camera streams: Uncompressed sensor_msgs/msg/Image messages.
3D LIDAR data: sensor_msgs/msg/PointCloud2 messages (with fields
x, y, z, intensity, ring, timestamp
).
URDF calibration file:
To use a URDF calibration file with Isaac applications, it needs to be placed in
the following path in the robot: /etc/nova/calibration/isaac_calibration.urdf
(named
as isaac_calibration.urdf
). This is the default URDF path used by the demo applications and
tutorials.
Note
Make sure that the URDF calibration file follows the Isaac Requirements for URDF files.
Extrinsic Calibration for Nova Carter or Nova Orin Developer Kit
Note
The Nova Calibration Tool is deprecated. See the section Extrinsic Calibration of Sensors in Custom Locations.
The Nova Calibration Tool is a containerized application that guides you through the process of calibrating the poses of the sensors on a Nova Carter robot or a Nova Orin Developer Kit.
SSH into the robot (instructions).
Follow the instructions to set up calibration.
If the calibration is successful, you should see a URDF file generated at
/etc/nova/calibration/isaac_calibration.urdf
.This is also the default URDF path used by the demo applications and tutorials.
Extrinsic Calibration Requirements
Note
Recommended prior reading: Isaac Requirements for URDF files
In order to be compatible with Isaac applications, extrinsic calibration tools must:
Generate a URDF calibration file complying with the Isaac Requirements for URDF files.
Perform extrinsic calibration for all sensors without optimizing intrinsic calibration or stereo calibration of any of the sensors (that is, by fixing the calibration from the sensor drivers).
In the event that it is necessary to re-calibrate intrinsics or stereo calibration, make sure that all the following are true:
The re-calibrated sensors have a native a mechanism to overwrite their intrinsic calibration and/or stereo calibration (e.g., the calibration stored in the EEPROM).
The overwrite process is performed before using the extrinsic URDF calibration file with Isaac applications.
The resulting URDF still complies with the Isaac Requirements for URDF files (stereo calibration is not included in the robot URDF).
Calibration transformations for all sensors must include 6 Degrees of Freedom (DoF), unless certain DoF are not observable during the data recording (see following points).
Perform 6-DoF sensor-to-robot calibration and encode the result in the transformation to
base_link
, unless certain DoF are not observable during the data recording (see following points).Fix nominal transformations (from
/tf_static
) for the DoF that are not observable (or unreliable) during the data recording.Unobservable DoF depend on the calibration process, robot motion (if any), and calibration target design and motion (if any), among others.
Some specific examples for wheeled robots include :
IMU: Axes that are not excited during data recording.
base_link
: X and Y-translation and yaw rotation for robots with unreliable odometry.
Perform sensor-to-ground calibration. See clarifications below:
Ground calibration refers to the 3-DoF transformation between a sensor and the ground plane: Z-translation, and pitch and yaw rotations.
The ground plane should be computed from sensor data.
The transformation(s) between
base_link
and the robot sensors must be modified so thatbase_link
is on the ground, with its X-Y axes representing the ground plane.Ground calibration must not modify the transformation between individual sensors. It must only modify the transformation between all sensors (as a rigid body) and
base_link
, such that ground points perceived by sensors lie on the X-Y plane of thebase_link
frame.
Using Nominals
It is recommended that you always use the isaac_calibration.urdf
file generated in the calibration
instructions above, because it accurately reflects the true extrinsics of your physical robot.
However, as a backup option for Nova Carter and Nova Orin Developer Kit, nominal
xacro files are also available:
Nova Carter: nova_carter.urdf.xacro.
Nova Orin Developer Kit: nova_developer_kit_macro.urdf.xacro.
By default, these nominal values are used by Isaac applications, if a calibrated URDF file is not present in the system.
Note
If the Nova Orin Developer Kit is mounted on a robot and you intend to use nominal values, it is still necessary to provide a URDF encoding its position on the robot.