diff --git a/.cspell.json b/.cspell.json
index 4cb33a5a..2a97aa78 100644
--- a/.cspell.json
+++ b/.cspell.json
@@ -37,6 +37,7 @@
"imread",
"imshow",
"imwrite",
+ "innoviz",
"intrinsics",
"kalman",
"keyframes",
@@ -76,7 +77,10 @@
"representer",
"reprojected",
"reprojection",
+ "reprojections",
"rosbag",
+ "ros2",
+ "ROS2",
"rosidl",
"ruamel",
"rvec",
diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml
index 469af9da..3c662f63 100644
--- a/.github/workflows/build-and-test-differential.yaml
+++ b/.github/workflows/build-and-test-differential.yaml
@@ -11,12 +11,8 @@ jobs:
fail-fast: false
matrix:
rosdistro:
- - galactic
- humble
include:
- - rosdistro: galactic
- container: ros:galactic
- build-depends-repos: build_depends.repos
- rosdistro: humble
container: ros:humble
build-depends-repos: build_depends.repos
@@ -61,29 +57,3 @@ jobs:
fail_ci_if_error: false
verbose: true
flags: differential
-
- clang-tidy-differential:
- runs-on: ubuntu-latest
- container: ros:galactic
- needs: build-and-test-differential
- steps:
- - name: Check out repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Remove exec_depend
- uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1
-
- - name: Get modified packages
- id: get-modified-packages
- uses: autowarefoundation/autoware-github-actions/get-modified-packages@v1
-
- - name: Run clang-tidy
- if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }}
- uses: autowarefoundation/autoware-github-actions/clang-tidy@v1
- with:
- rosdistro: galactic
- target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }}
- clang-tidy-config-url: https://raw.githubusercontent.com/autowarefoundation/autoware/main/.clang-tidy
- build-depends-repos: build_depends.repos
diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml
index f631c3d6..228b547e 100644
--- a/.github/workflows/build-and-test.yaml
+++ b/.github/workflows/build-and-test.yaml
@@ -15,12 +15,8 @@ jobs:
fail-fast: false
matrix:
rosdistro:
- - galactic
- humble
include:
- - rosdistro: galactic
- container: ros:galactic
- build-depends-repos: build_depends.repos
- rosdistro: humble
container: ros:humble
build-depends-repos: build_depends.repos
diff --git a/.github/workflows/check-build-depends.yaml b/.github/workflows/check-build-depends.yaml
index f712275d..81618a1d 100644
--- a/.github/workflows/check-build-depends.yaml
+++ b/.github/workflows/check-build-depends.yaml
@@ -3,18 +3,24 @@ name: check-build-depends
on:
pull_request:
paths:
- - build_depends.repos
+ - build_depends*.repos
jobs:
check-build-depends:
runs-on: ubuntu-latest
- container: ros:galactic
+ container: ${{ matrix.container }}
+ strategy:
+ fail-fast: false
+ matrix:
+ rosdistro:
+ - humble
+ include:
+ - rosdistro: humble
+ container: ros:humble
+ build-depends-repos: build_depends.repos
steps:
- - name: Cancel previous runs
- uses: styfle/cancel-workflow-action@0.12.1
-
- name: Check out repository
- uses: actions/checkout@v4
+ uses: actions/checkout@v3
- name: Remove exec_depend
uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1
@@ -26,6 +32,6 @@ jobs:
- name: Build
uses: autowarefoundation/autoware-github-actions/colcon-build@v1
with:
- rosdistro: galactic
+ rosdistro: ${{ matrix.rosdistro }}
target-packages: ${{ steps.get-self-packages.outputs.self-packages }}
- build-depends-repos: build_depends.repos
+ build-depends-repos: ${{ matrix.build-depends-repos }}
diff --git a/README.md b/README.md
index aa79ee42..b2a1da5a 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,426 @@
-# calibration_tools
+# Sensor Calibration Tools
-Calibration tools used for autonomous driving
+Calibration tools for sensors used in autonomous driving and robotics (camera, lidar, and radar).
-## Requirement
+## Table of contents
-- Ubuntu22.04
-- Ros Humble
+- [Sensor Calibration Tools](#sensor-calibration-tools)
+ - [Table of contents](#table-of-contents)
+ - [Installation](#installation)
+ - [Requirements](#requirements)
+ - [Installation alongside autoware](#installation-alongside-autoware)
+ - [Standalone installation (for non-autoware users)](#standalone-installation-for-non-autoware-users)
+ - [Standalone installation using Docker (for non-autoware users)](#standalone-installation-using-docker-for-non-autoware-users)
+ - [Available tools](#available-tools)
+ - [Extrinsic calibration tools](#extrinsic-calibration-tools)
+ - [Intrinsic calibration tools](#intrinsic-calibration-tools)
+ - [Design](#design)
+ - [Calibrator node](#calibrator-node)
+ - [Sensor calibration manager](#sensor-calibration-manager)
+ - [Projects and calibrators](#projects-and-calibrators)
+ - [Calibrator interface](#calibrator-interface)
+ - [Launch files](#launch-files)
+ - [Launching the sensor calibration manager](#launching-the-sensor-calibration-manager)
+ - [Integration](#integration)
+ - [Using your vehicle/robot](#using-your-vehiclerobot)
+ - [Create a new project](#create-a-new-project)
+ - [Integrate a new calibrator](#integrate-a-new-calibrator)
+ - [Troubleshooting & known issues](TROUBLESHOOTING.md)
-## Installation procedures
+## Installation
+
+### Requirements
+
+- Ubuntu 22.04
+- ROS2 Humble
+
+### Installation alongside autoware
After installing [autoware](https://github.com/tier4/autoware) (please see [source-installation](https://autowarefoundation.github.io/autoware-documentation/main/installation/autoware/source-installation/) page), execute the following commands:
```bash
cd autoware
-wget https://raw.githubusercontent.com/tier4/CalibrationTools/tier4/universe/calibration_tools.repos
+wget https://raw.githubusercontent.com/tier4/CalibrationTools/tier4/universe/calibration_tools_autoware.repos
vcs import src < calibration_tools.repos
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```
-## Implemented calibration tools
+### Standalone installation (for non-autoware users)
+
+The sensor calibration tools are usually used as part of the autoware ecosystem. However, they can also be used for projects outside autoware, or even outside autonomous driving. Note: due to its use in autoware, even if it is possible to use the sensor calibration tools independently, due to some light dependencies, parts of autoware still need to be downloaded, even if they are not all compiled.
+
+The following commands present an example of how to install the sensor calibration tools and their dependencies assuming you have a ROS2 workspace called `workspace` (if the workspace is new, the user must also create the `src` directory inside the `workspace`):
+
+```bash
+# Install vcs (if needed, follow the instructions from https://github.com/dirk-thomas/vcstool)
+sudo apt-get install python3-vcstool
+
+# Download the calibration tools and its dependencies
+cd workspace
+wget https://raw.githubusercontent.com/tier4/CalibrationTools/tier4/universe/calibration_tools_standalone.repos
+vcs import src < calibration_tools_standalone.repos
+
+# Install all the dependencies from rosdep
+rosdep install -y --from-paths `colcon list --packages-up-to sensor_calibration_tools -p` --ignore-src
+
+# Build the sensor calibration tools. sensor_calibration_tools is a meta package that guarantees that only the related packages are compiled
+colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-up-to sensor_calibration_tools
+```
+
+### Standalone installation using Docker (for non-autoware users)
+
+With a similar motivation to that of the previous Section, in some cases, a native build is not possible nor convenient. To accommodate those situations, we also offer the sensor calibration tools as a docker image:
+
+```bash
+# Build
+DOCKER_BUILDKIT=1 docker build --ssh default -t ghcr.io/tier4/sensor-calibration-tools:2.0 -f docker/Dockerfile ..
+
+# Run - Modify if needed
+docker run --gpus all --net=host -e ROS_DOMAIN_ID=$ROS_DOMAIN_ID -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device=/dev/dri:/dev/dri -it ghcr.io/tier4/sensor-calibration-tools:2.0 /bin/bash
+
+# If user encounters issues like "Authorization required", use one of the alternatives below.
+# Solution 1 (Not recommended):
+xhost +local:docker
+
+# Solution 2:
+touch /tmp/.docker.xauth
+chmod a+r /tmp/.docker.xauth
+
+xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f /tmp/.docker.xauth nmerge -
+
+docker run --gpus all --net=host \
+ -e ROS_DOMAIN_ID=$ROS_DOMAIN_ID \
+ -e DISPLAY=$DISPLAY \
+ -e XAUTHORITY=/tmp/.docker.xauth \
+ -v /tmp/.X11-unix:/tmp/.X11-unix \
+ -v /tmp/.docker.xauth:/tmp/.docker.xauth \
+ --device=/dev/dri:/dev/dri \
+ -it ghcr.io/tier4/sensor-calibration-tools:2.0 /bin/bash
+```
+
+## Available tools
+
+### Extrinsic calibration tools
+
+| Name | Sensors calibrated | Feature type | Calibration type | Documentation | Tutorial |
+| ----------------------------------- | ------------------ | --------------------------- | ------------------ | ----------------------------------------------------------- | ------------------------------------------------------- |
+| ground plane calibrator | base-lidar | ground | roll, pitch, z | N/A | N/A |
+| interactive camera-lidar calibrator | camera-lidar | manual correspondences | full pose | N/A | N/A |
+| lidar-lidar 2d calibrator | lidar-lidar | natural features | x, y, yaw | N/A | N/A |
+| mapping calibrator (lidar-lidar) | lidar-lidar | natural features | full pose | [Link](calibrators/mapping_based_calibrator/README.md) | [Link](docs/tutorials/mapping_based_calibrator.md) |
+| mapping calibrator (base-lidar) | base-lidar | natural features and ground | roll, pitch, and z | N/A | N/A |
+| marker radar-lidar calibrator | radar-lidar | marker | x, y, yaw | [Link](calibrators/marker_radar_lidar_calibrator/README.md) | [Link](docs/tutorials/marker_radar_lidar_calibrator.md) |
+| tag-based PnP calibrator | camera-lidar | marker | full pose | [Link](calibrators/tag_based_pnp_calibrator/README.md) | [Link](docs/tutorials/tag_based_pnp_calibrator.md) |
+| tag-based SfM calibrator | camera-lidar-base | marker | full pose | [Link](calibrators/tag_based_sfm_calibrator/README.md) | [Link](docs/tutorials/tag_based_sfm_calibrator.md) |
+
+### Intrinsic calibration tools
+
+| Name | Sensors calibrated | Feature type | Calibration type | Documentation | Tutorial |
+| ---------------------------- | ------------------ | ------------------ | ------------------- | ------------- | -------- |
+| camera intrinsics calibrator | camera intrinsics | calibration boards | OpenCV camera model | N/A | N/A |
+
+## Design
+
+The sensor calibration tools repository provides multiple alternatives for both intrinsic and extrinsic calibration. That being said, the rest of this document focuses only on extrinsic calibration since camera intrinsic calibration is a direct and easy-to-understand process.
+
+The architecture of the extrinsic calibration process consists of two entities: the calibrator node itself and the sensor calibration manager (additional nodes may be used, but they do not participate directly in the calibration process). In what follows, we proceed to detail the roles of each one of these elements.
+
+### Calibrator node
+
+The calibrator node is a regular node that implements the [ExtrinsicCalibrator](common/tier4_calibration_msgs/srv/ExtrinsicCalibrator.srv) service:
+
+```text
+---
+tier4_calibration_msgs/CalibrationResult[] results
+```
+
+where [CalibrationResult](common/tier4_calibration_msgs/msg/CalibrationResult.msg) contains a transformation between frames, a status flag, and optional scores and text messages for evaluation and debug purposes.
+
+```text
+geometry_msgs/TransformStamped transform_stamped
+bool success
+float32 score
+std_msgs/String message
+```
+
+The design is intended to decouple the calibrator node and its internal logic as much as possible from the details of a particular calibration use-case and the `tf` structure used.
+The code of the calibrator itself is agnostic to everything other than its particular task, with the service request not even containing the frames to calibrate. This way, all use-case-specific concerns are specified during node and launcher configuration implemented in the `sensor_calibration_manager` package, achieving a high level of separation of concerns and code reusability.
+
+### Sensor calibration manager
+
+Although the calibrator process can be performed directly via launching the calibrator node (which involves non-trivial parameterization) and using the service interface using the CLI (`ros2 service call ...`), it is highly recommended to automate the process using the `sensor_calibration_manager` package.
+The `sensor_calibration_manager` implements a UI that allows the user to select a particular combination of `project` and `calibrator`, makes sure that the required `tf` and services are available, and processes/saves the calibration results.
+
+#### Projects and calibrators
+
+At TIER IV, we currently run several projects that use various types of sensors. However, we do not create calibrators nodes for each particular project, and instead reuse the same code, only modifying the parameters and helper nodes. To achieve this, in the `sensor_calibration_manager` package, we introduce the concepts of `projects` and `calibrators`. In this context, a `project` consists of a list of `calibrators` (note that in this context `calibrators` are different from calibrator nodes), with the same calibrator (semantically) being able to belong to multiple projects.
+
+An example of the files involved in this scheme is:
+
+```text
+cd sensor_calibration_manager/sensor_calibration_manager/calibrators && find .
+./projectA/
+./projectA/calibratorA.py
+./projectA/calibratorB.py
+./projectA/__init__.py
+./projectB/
+./projectB/calibratorA.py
+./projectB/calibratorB.py
+./projectB/__init__.py
+./projectC/
+./projectC/calibratorC.py
+./projectC/__init__.py
+./__init__.py
+```
+
+In this example, the calibrators folder is placed inside the `sensor_calibration_manager` package, each `project` is organized in its own folder (e.g., `projectA`, `projectB`, and `projectC`), and inside each `project` folder, one or more `calibrators` are represented via python files (e.g., `calibratorA.py`, `calibratorB.py`, and `calibratorC.py`).
+
+- Note how some `calibrators` are present in more than one `project`. This essentially means that said `calibrator` can be used in multiple `projects`, albeit with its own set of configuration files (more on this later). For example, we would like to calibrate buses and robo-taxis with the `tag-based PnP calibrator` method.
+- `__init__.py` files are used to register the `projects` and `calibrators` within the `sensor_calibration_manager` package. How to write these files is explained in the [Integration](#integration) Section.
+
+#### Calibrator interface
-### sensor
+A calibrator interface is the representation of the calibration process inside the `sensor_calibration_manager` package. It specifies its `project`, the `calibrator` name, the `tf`s that are required during the calibration process, and the expected frames that the calibrator node should return.
-We provide calibration tool for sensor pairs like LiDAR - LiDAR, LiDAR - Camera, etc.
+Following the previous example, the `calibratorA.py` file could be implemented as follows:
-[README](sensor/README.md)
+```python
+@CalibratorRegistry.register_calibrator(
+ project_name="projectA", calibrator_name="calibratorA"
+)
+class CalibratorA(CalibratorBase):
+ required_frames = ["calibration_parent_frame", "calibration_child_frame", "auxiliar_frame"]
-### system - tunable static tf broadcaster
+ def __init__(self, ros_interface: RosInterface, **kwargs):
+ super().__init__(ros_interface)
-GUI to modify the parameters of generic TFs.
+ self.add_calibrator(
+ service_name="the_name_of_the_calibration_service",
+ expected_calibration_frames=[
+ FramePair(parent="calibration_parent_frame", child="calibration_child_frame"),
+ ],
+ )
+
+```
+
+In addition to specifying `required_frames` and `services_name`, the calibrator interfaces are also used to post-process the calibration results if needed to conform to robotics frame conventions and other project-specific requirements.
+
+For example, camera-lidar calibration returns the `tf` from the `optical_link` to the `lidar` frame itself. However, in most scenarios, instead of the `optical_link`, the `camera_link` is preferred in configuration files (the `camera_link` has different axes), and for some lidars, integrators would prefer to use their `base_link` or footprint (not to be confused with the vehicle's `base_link`) since it allows them to work better with CAD files.
+
+At TIER IV, most sensors are mounted in a structure called `sensor_kit` and most `tfs` that correspond to sensor calibration either start or end at this frame (e.g., `base_link` to `sensor_kit` or `sensor_kit` to `lidar_base_link`).
+
+In particular, for the case of camera-lidar, the `tf` that represents the camera-lidar calibration in most of our projects is `sensor_kit_base_link` to `cameraX/camera_link`. To transform the `tf` that the calibrator returns (`cameraX/camera_optical_link` to `lidar`) to the one we need to save, the post-process step can be implemented as follows:
+
+```python
+# Taken from sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py
+def post_process(self, calibration_transforms: Dict[str, Dict[str, np.array]]):
+ optical_link_to_lidar_transform = calibration_transforms[
+ f"{self.camera_name}/camera_optical_link"
+ ]["velodyne_top"]
+ sensor_kit_to_lidar_transform = self.get_transform_matrix(
+ "sensor_kit_base_link", "velodyne_top"
+ )
+ camera_to_optical_link_transform = self.get_transform_matrix(
+ f"{self.camera_name}/camera_link", f"{self.camera_name}/camera_optical_link"
+ )
+ sensor_kit_camera_link_transform = np.linalg.inv(
+ camera_to_optical_link_transform
+ @ optical_link_to_lidar_transform
+ @ np.linalg.inv(sensor_kit_to_lidar_transform)
+ )
+
+ result = {
+ "sensor_kit_base_link": {
+ f"{self.camera_name}/camera_link": sensor_kit_camera_link_transform
+ }
+ }
+ return result
+```
+
+\*Note: in this example, `sensor_kit_to_lidar_transform` is assumed as known and is fixed, since it corresponds to a previous lidar-lidar calibration result or it is a hardcoded value.
+
+#### Launch files
+
+The calibrator interface does not implement any of the ROS logic in terms of the involved nodes. This part of the process is implemented by regular launch files that are called by the `sensor_calibration_manager` package.
+
+Following the previous example, the launcher structure would be as follows:
+
+```text
+launch/
+launch/projectA/
+launch/projectA/calibratorA.launch.xml
+launch/projectA/calibratorB.launch.xml
+launch/projectB/
+launch/projectB/calibratorA.launch.xml
+launch/projectB/calibratorB.launch.xml
+launch/projectC/
+launch/projectC/calibratorC.launch.xml
+```
+
+\*Note: a `calibrator interface` with the values `project_name="projectA"` and `calibrator_name="calibratorA"` will launch `launch/projectA/calibratorA.launch.xml`
+
+The launch file can have arguments with and without default arguments that will be automatically transformed into a configurable UI so the user can set them during start-up.
+One point of note is that the service specified in the calibrator interface must be offered by a node in the launch file.
+
+\*Note: the values of the arguments defined in the launcher file are accessible to the `calibration interface` via `kwargs`.
+
+#### Launching the sensor calibration manager
+
+To use the calibration manager, execute the following command (after sourcing the ROS workspace):
+
+```bash
+ros2 run sensor_calibration_manager sensor_calibration_manager
+```
+
+The following window will be displayed:
+
+
+
+
+
+Then, the user must select a combination of `project` and `calibrator` and press `Continue`, which will display the following menu:
+
+
+
+
+
+Here, the user must configure the launcher arguments as required. Since we are using the combination of `default_project` and `tag_based_pnp_calibrator`, the launcher file being parameterized under the hood is `sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml`. Once the user finishes setting the parameter, he must click the `Launch` button.
+
+After this, the sensor calibrator manager will execute the previous launch file with the corresponding parameters and internally use `sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py` as its calibrator interface. The following window will be displayed:
+
+
+
+
+
+If the calibrator node launches successfully, its service becomes available, and the required `tf` are all present, the `calibrate` button should become enabled. Clicking this calls the calibration service, and starts the process.
+
+For visualization purposes, the sensor calibration manager displays the required `tf` specified in the calibrator interface as shown in the following image:
+
+
+
+
+
+Once the calibration finishes, the result from the `ExtrinsicCalibrator` is displayed in the `Calibration tree` widget as shown in the following image:
+
+
+
+
+
+If the calibrator interface had post-processing steps, the `Final TF tree` widget would show the processed results. In this case, since there is not a post-process step, both widgets are the same.
+
+Finally, to save the results, press the `save calibration` button.
+
+
+
+
+
+## Integration
+
+### Using your vehicle/robot
+
+Although we provide several projects and examples, in most cases the user would need to modify several parts of this repository to create their calibration projects. To ease this process, we also created a `default_project` that exposes most of each calibrator's parameters so that users can use this repository without creating any new files. In turn, however, they must properly configure most of the calibrator's options in the `Launcher configuration` widget, which is mostly done automatically in our internal projects.
+
+### Create a new project
+
+If the default project is not enough or does not meet the needs of the user (for example, if they are going to start projects that require running the tools frequently), it is relatively easy to create new projects and calibrator interfaces. In what follows, we will create a new project titled `my_new_project` with a calibrator called `my_new_calibrator`.
+
+First, to make `my_new_project` known within the `sensor_calibration_manager` package, add the following line to `sensor_calibration_manager/sensor_calibration_manager/calibrators/__init__.py`:
+
+```python
+from .my_new_project import * # noqa: F401, F403
+```
+
+This will make the UI attempt to load all the calibration interfaces of `my_new_project`.
+Then, create a file called `sensor_calibration_manager/sensor_calibration_manager/calibrators/my_new_project/__init__.py`.
+
+```python
+from .my_new_calibrator import MyNewCalibrator
+
+__all__ = [
+ "MyNewCalibrator",
+]
+```
+
+This will make `MyNewCalibrator` to be imported when importing `my_new_project`.
+After this, create a file called `sensor_calibration_manager/sensor_calibration_manager/calibrators/my_new_project/my_new_calibrator.py` with the following contents:
+
+```python
+from sensor_calibration_manager.calibrator_base import CalibratorBase
+from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
+from sensor_calibration_manager.ros_interface import RosInterface
+from sensor_calibration_manager.types import FramePair
+
+
+@CalibratorRegistry.register_calibrator(
+ project_name="my_new_project", calibrator_name="my_new_calibrator"
+)
+class MyNewCalibrator(CalibratorBase):
+ required_frames = []
+
+ def __init__(self, ros_interface: RosInterface, **kwargs):
+ super().__init__(ros_interface)
+
+ self.source_frame: str = kwargs["source_frame"]
+ self.target_frame: str = kwargs["target_frame"]
+
+ self.required_frames.extend([self.base_frame, self.source_frame, self.target_frame])
+
+ self.add_calibrator(
+ service_name="calibrate_service_name",
+ expected_calibration_frames=[
+ FramePair(parent=self.target_frame, child=self.source_frame),
+ ],
+ )
+
+```
+
+This calibrator will expect a calibrator between `source_frame` and `target_frame`, which are parameters provided by the user through the launcher file.
+
+Finally, the user must create the correspondent launch file `sensor_calibration_manager/launch/my_new_project/my_new_calibrator.launch.xml`.
+The launcher itself must contain the following arguments to match the calibrator interface:
+
+```xml
+
+
+```
+
+Default values are optional, and somewhere within the launch file, the user needs to add a node that provides the `calibrate_service_name` to match the calibrator interface. Complete examples of the contents of the launcher and calibration interfaces can be found in our current `projects` and `calibrators`.
+
+### Integrate a new calibrator
+
+In the previous Section, we created a new calibrator interface and added it to the sensor calibration manager. However, that assumes that the user will use one of the calibrator packages offered by the sensor calibration tools.
+
+In the case the user wants to integrate his own algorithms, he must comply with the following the instructions, which assume the reader knows and is used to creating ROS2 packages.
+
+- Create a ROS2 package called `my_new_calibrator_package`. The node itself needs to be part of a multi-thread executor with at least two threads. This is due to the calibration service call only returning once the calibration process finishes.
+- Add a dependency to the `tier4_calibration_msgs` package in `package.xml` to use the calibration services.
+- In the node's header file add a calibration service.
+- In most cases, creating a group exclusive to the services is also required.
+
+In the header file:
+
+```c++
+...
+rclcpp::Service::SharedPtr service_server_;
+rclcpp::CallbackGroup::SharedPtr srv_callback_group_
+...
+```
+
+In the source file:
+
+```c++
+...
+// The service server runs in a dedicated thread since it is a blocking call
+srv_callback_group_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
+
+service_server_ = this->create_service(
+ "extrinsic_calibration_service_name",
+ std::bind(
+ &MyNewCalibratorPackage::requestReceivedCallback, this, std::placeholders::_1,
+ std::placeholders::_2),
+ rmw_qos_profile_services_default, srv_callback_group_);
+ ...
+```
-[README](system/tunable_static_tf_broadcaster/README.md)
+In addition to this, the user must implement `requestReceivedCallback` to comply with the interface.
diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md
new file mode 100644
index 00000000..142d894f
--- /dev/null
+++ b/TROUBLESHOOTING.md
@@ -0,0 +1,17 @@
+# Troubleshooting & known issues
+
+## Numpy errors
+
+If the user should encounter the following error:
+
+```text
+AttributeError: module 'numpy' has no attribute 'float'.
+`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
+The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
+ https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations. Did you mean: 'cfloat'?
+```
+
+It is highly due to a mismatch between the `numpy` and `transforms3d` versions in your system.
+The simplest solution would be to upgrade `transforms3d` with `pip install transforms3d --upgrade`. Alternatively, the use can downgrade his version of `numpy` but doing so is more likely to incur on other issues.
+
+At the time of writing this page, compatible versions are `numpy==1.26.4` and `transforms3d==0.4.2`
diff --git a/build_depends.repos b/build_depends.repos
index ceb76596..eed3d7d1 100644
--- a/build_depends.repos
+++ b/build_depends.repos
@@ -5,16 +5,12 @@ repositories:
version: main
autoware/universe:
type: git
- url: https://github.com/tier4/autoware.universe.git
- version: tier4/main
+ url: https://github.com/autowarefoundation/autoware.universe.git
+ version: main
autoware/tier4_autoware_msgs:
type: git
url: https://github.com/tier4/tier4_autoware_msgs.git
version: tier4/universe
- autoware/auto_msgs:
- type: git
- url: https://github.com/tier4/autoware_auto_msgs.git
- version: tier4/main
missing_packages/astuff_sensor_msgs:
type: git
url: https://github.com/astuff/astuff_sensor_msgs.git
diff --git a/calibration_tools.repos b/calibration_tools_autoware.repos
similarity index 100%
rename from calibration_tools.repos
rename to calibration_tools_autoware.repos
diff --git a/calibration_tools_standalone.repos b/calibration_tools_standalone.repos
new file mode 100644
index 00000000..54bdad32
--- /dev/null
+++ b/calibration_tools_standalone.repos
@@ -0,0 +1,49 @@
+repositories:
+ calibration_tools:
+ type: git
+ url: https://github.com/tier4/CalibrationTools.git
+ version: tier4/universe
+ autoware/common:
+ type: git
+ url: https://github.com/autowarefoundation/autoware_common.git
+ version: main
+ autoware/autoware_internal_msgs:
+ type: git
+ url: https://github.com/autowarefoundation/autoware_internal_msgs.git
+ version: main
+ autoware/autoware_msgs:
+ type: git
+ url: https://github.com/autowarefoundation/autoware_msgs.git
+ version: main
+ autoware/tier4_autoware_msgs:
+ type: git
+ url: https://github.com/tier4/tier4_autoware_msgs.git
+ version: tier4/universe
+ autoware/universe:
+ type: git
+ url: https://github.com/autowarefoundation/autoware.universe.git
+ version: main
+ vendor/lidartag:
+ type: git
+ url: https://github.com/tier4/LiDARTag.git
+ version: humble
+ vendor/lidartag_msgs:
+ type: git
+ url: https://github.com/tier4/LiDARTag_msgs.git
+ version: tier4/universe
+ vendor/apriltag_msgs:
+ type: git
+ url: https://github.com/christianrauch/apriltag_msgs.git
+ version: 2.0.0
+ vendor/apriltag_ros:
+ type: git
+ url: https://github.com/christianrauch/apriltag_ros.git
+ version: e814e9e5d5f1bfb60a4aa685d30977c632bbc540
+ vendor/ros2_numpy:
+ type: git
+ url: https://github.com/Box-Robotics/ros2_numpy.git
+ version: humble
+ vendor/ndt_omp:
+ type: git
+ url: https://github.com/tier4/ndt_omp.git
+ version: tier4/main
diff --git a/sensor/extrinsic_manual_calibrator/COLCON_IGNORE b/calibrators/README.md
similarity index 100%
rename from sensor/extrinsic_manual_calibrator/COLCON_IGNORE
rename to calibrators/README.md
diff --git a/sensor/extrinsic_manual_calibrator/CMakeLists.txt b/calibrators/extrinsic_manual_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/extrinsic_manual_calibrator/CMakeLists.txt
rename to calibrators/extrinsic_manual_calibrator/CMakeLists.txt
diff --git a/sensor/extrinsic_map_based_calibrator/COLCON_IGNORE b/calibrators/extrinsic_manual_calibrator/COLCON_IGNORE
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/COLCON_IGNORE
rename to calibrators/extrinsic_manual_calibrator/COLCON_IGNORE
diff --git a/sensor/extrinsic_manual_calibrator/include/extrinsic_manual_calibrator/extrinsic_manual_calibrator_node.hpp b/calibrators/extrinsic_manual_calibrator/include/extrinsic_manual_calibrator/extrinsic_manual_calibrator_node.hpp
similarity index 100%
rename from sensor/extrinsic_manual_calibrator/include/extrinsic_manual_calibrator/extrinsic_manual_calibrator_node.hpp
rename to calibrators/extrinsic_manual_calibrator/include/extrinsic_manual_calibrator/extrinsic_manual_calibrator_node.hpp
diff --git a/sensor/extrinsic_manual_calibrator/launch/calibrator.launch.xml b/calibrators/extrinsic_manual_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/extrinsic_manual_calibrator/launch/calibrator.launch.xml
rename to calibrators/extrinsic_manual_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/extrinsic_manual_calibrator/package.xml b/calibrators/extrinsic_manual_calibrator/package.xml
similarity index 95%
rename from sensor/extrinsic_manual_calibrator/package.xml
rename to calibrators/extrinsic_manual_calibrator/package.xml
index 4e7140e6..45283015 100644
--- a/sensor/extrinsic_manual_calibrator/package.xml
+++ b/calibrators/extrinsic_manual_calibrator/package.xml
@@ -11,11 +11,11 @@
autoware_cmake
+ autoware_universe_utilsrclcpptf2tf2_geometry_msgstf2_ros
- tier4_autoware_utilstier4_calibration_msgstunable_static_tf_broadcaster
diff --git a/sensor/extrinsic_manual_calibrator/src/extrinsic_manual_calibrator_node.cpp b/calibrators/extrinsic_manual_calibrator/src/extrinsic_manual_calibrator_node.cpp
similarity index 95%
rename from sensor/extrinsic_manual_calibrator/src/extrinsic_manual_calibrator_node.cpp
rename to calibrators/extrinsic_manual_calibrator/src/extrinsic_manual_calibrator_node.cpp
index a59b9635..03fad648 100644
--- a/sensor/extrinsic_manual_calibrator/src/extrinsic_manual_calibrator_node.cpp
+++ b/calibrators/extrinsic_manual_calibrator/src/extrinsic_manual_calibrator_node.cpp
@@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include
#include
-#include
#include
@@ -92,7 +92,7 @@ geometry_msgs::msg::Pose ExtrinsicManualCalibratorNode::getTfParameters(
pose.position.x = params.get().at(0).as_double();
pose.position.y = params.get().at(1).as_double();
pose.position.z = params.get().at(2).as_double();
- pose.orientation = tier4_autoware_utils::createQuaternionFromRPY(
+ pose.orientation = autoware::universe_utils::createQuaternionFromRPY(
params.get().at(3).as_double(), params.get().at(4).as_double(), params.get().at(5).as_double());
return pose;
}
@@ -100,7 +100,7 @@ void ExtrinsicManualCalibratorNode::setTfParameters(
const rclcpp::AsyncParametersClient::SharedPtr & client, const geometry_msgs::msg::Pose & pose)
{
const auto xyz = pose.position;
- const auto rpy = tier4_autoware_utils::getRPY(pose.orientation);
+ const auto rpy = autoware::universe_utils::getRPY(pose.orientation);
auto results = client->set_parameters(
{rclcpp::Parameter("tf_x", xyz.x), rclcpp::Parameter("tf_y", xyz.y),
rclcpp::Parameter("tf_z", xyz.z), rclcpp::Parameter("tf_roll", rpy.x),
diff --git a/sensor/extrinsic_map_based_calibrator/CMakeLists.txt b/calibrators/extrinsic_map_based_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/CMakeLists.txt
rename to calibrators/extrinsic_map_based_calibrator/CMakeLists.txt
diff --git a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/__init__.py b/calibrators/extrinsic_map_based_calibrator/COLCON_IGNORE
similarity index 100%
rename from sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/__init__.py
rename to calibrators/extrinsic_map_based_calibrator/COLCON_IGNORE
diff --git a/sensor/extrinsic_map_based_calibrator/config/aip_x1/extrinsic_map_based_calib.yaml b/calibrators/extrinsic_map_based_calibrator/config/aip_x1/extrinsic_map_based_calib.yaml
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/aip_x1/extrinsic_map_based_calib.yaml
rename to calibrators/extrinsic_map_based_calibrator/config/aip_x1/extrinsic_map_based_calib.yaml
diff --git a/sensor/extrinsic_map_based_calibrator/config/aip_x1/map_based_calib.rviz b/calibrators/extrinsic_map_based_calibrator/config/aip_x1/map_based_calib.rviz
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/aip_x1/map_based_calib.rviz
rename to calibrators/extrinsic_map_based_calibrator/config/aip_x1/map_based_calib.rviz
diff --git a/sensor/extrinsic_map_based_calibrator/config/aip_x2/extrinsic_map_based_calib.yaml b/calibrators/extrinsic_map_based_calibrator/config/aip_x2/extrinsic_map_based_calib.yaml
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/aip_x2/extrinsic_map_based_calib.yaml
rename to calibrators/extrinsic_map_based_calibrator/config/aip_x2/extrinsic_map_based_calib.yaml
diff --git a/sensor/extrinsic_map_based_calibrator/config/aip_x2/map_based_calib.rviz b/calibrators/extrinsic_map_based_calibrator/config/aip_x2/map_based_calib.rviz
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/aip_x2/map_based_calib.rviz
rename to calibrators/extrinsic_map_based_calibrator/config/aip_x2/map_based_calib.rviz
diff --git a/sensor/extrinsic_map_based_calibrator/config/aip_xx1/extrinsic_map_based_calib.yaml b/calibrators/extrinsic_map_based_calibrator/config/aip_xx1/extrinsic_map_based_calib.yaml
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/aip_xx1/extrinsic_map_based_calib.yaml
rename to calibrators/extrinsic_map_based_calibrator/config/aip_xx1/extrinsic_map_based_calib.yaml
diff --git a/sensor/extrinsic_map_based_calibrator/config/aip_xx1/map_based_calib.rviz b/calibrators/extrinsic_map_based_calibrator/config/aip_xx1/map_based_calib.rviz
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/aip_xx1/map_based_calib.rviz
rename to calibrators/extrinsic_map_based_calibrator/config/aip_xx1/map_based_calib.rviz
diff --git a/sensor/extrinsic_map_based_calibrator/config/extrinsic_map_based_calib.yaml b/calibrators/extrinsic_map_based_calibrator/config/extrinsic_map_based_calib.yaml
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/extrinsic_map_based_calib.yaml
rename to calibrators/extrinsic_map_based_calibrator/config/extrinsic_map_based_calib.yaml
diff --git a/sensor/extrinsic_map_based_calibrator/config/map_based_calib.rviz b/calibrators/extrinsic_map_based_calibrator/config/map_based_calib.rviz
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/config/map_based_calib.rviz
rename to calibrators/extrinsic_map_based_calibrator/config/map_based_calib.rviz
diff --git a/sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_calibrator.hpp b/calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_calibrator.hpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_calibrator.hpp
rename to calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_calibrator.hpp
diff --git a/sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_preprocessing.hpp b/calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_preprocessing.hpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_preprocessing.hpp
rename to calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/extrinsic_map_based_preprocessing.hpp
diff --git a/sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/grid_search_matching.hpp b/calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/grid_search_matching.hpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/grid_search_matching.hpp
rename to calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/grid_search_matching.hpp
diff --git a/sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/pointcloud_matcher.hpp b/calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/pointcloud_matcher.hpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/pointcloud_matcher.hpp
rename to calibrators/extrinsic_map_based_calibrator/include/extrinsic_map_based_calibrator/pointcloud_matcher.hpp
diff --git a/sensor/extrinsic_map_based_calibrator/launch/calibrator.launch.xml b/calibrators/extrinsic_map_based_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/launch/calibrator.launch.xml
rename to calibrators/extrinsic_map_based_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/extrinsic_map_based_calibrator/launch/map.launch.py b/calibrators/extrinsic_map_based_calibrator/launch/map.launch.py
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/launch/map.launch.py
rename to calibrators/extrinsic_map_based_calibrator/launch/map.launch.py
diff --git a/sensor/extrinsic_map_based_calibrator/package.xml b/calibrators/extrinsic_map_based_calibrator/package.xml
similarity index 96%
rename from sensor/extrinsic_map_based_calibrator/package.xml
rename to calibrators/extrinsic_map_based_calibrator/package.xml
index 9afb7bbe..d291bb93 100644
--- a/sensor/extrinsic_map_based_calibrator/package.xml
+++ b/calibrators/extrinsic_map_based_calibrator/package.xml
@@ -12,6 +12,7 @@
autoware_cmake
+ autoware_universe_utilseigengeometry_msgsmessage_filters
@@ -22,7 +23,6 @@
std_msgstf2tf2_geometry_msgs
- tier4_autoware_utilstier4_calibration_msgsament_lint_auto
diff --git a/sensor/extrinsic_map_based_calibrator/src/extrinsic_map_based_calibrator.cpp b/calibrators/extrinsic_map_based_calibrator/src/extrinsic_map_based_calibrator.cpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/src/extrinsic_map_based_calibrator.cpp
rename to calibrators/extrinsic_map_based_calibrator/src/extrinsic_map_based_calibrator.cpp
diff --git a/sensor/extrinsic_map_based_calibrator/src/extrinsic_map_based_preprocessing.cpp b/calibrators/extrinsic_map_based_calibrator/src/extrinsic_map_based_preprocessing.cpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/src/extrinsic_map_based_preprocessing.cpp
rename to calibrators/extrinsic_map_based_calibrator/src/extrinsic_map_based_preprocessing.cpp
diff --git a/sensor/extrinsic_map_based_calibrator/src/grid_search_matching.cpp b/calibrators/extrinsic_map_based_calibrator/src/grid_search_matching.cpp
similarity index 100%
rename from sensor/extrinsic_map_based_calibrator/src/grid_search_matching.cpp
rename to calibrators/extrinsic_map_based_calibrator/src/grid_search_matching.cpp
diff --git a/sensor/ground_plane_calibrator/CMakeLists.txt b/calibrators/ground_plane_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/ground_plane_calibrator/CMakeLists.txt
rename to calibrators/ground_plane_calibrator/CMakeLists.txt
diff --git a/sensor/ground_plane_calibrator/include/ground_plane_calibrator/ground_plane_calibrator.hpp b/calibrators/ground_plane_calibrator/include/ground_plane_calibrator/ground_plane_calibrator.hpp
similarity index 98%
rename from sensor/ground_plane_calibrator/include/ground_plane_calibrator/ground_plane_calibrator.hpp
rename to calibrators/ground_plane_calibrator/include/ground_plane_calibrator/ground_plane_calibrator.hpp
index 44ac2406..cce6b0d4 100644
--- a/sensor/ground_plane_calibrator/include/ground_plane_calibrator/ground_plane_calibrator.hpp
+++ b/calibrators/ground_plane_calibrator/include/ground_plane_calibrator/ground_plane_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,8 +16,8 @@
#define GROUND_PLANE_CALIBRATOR__GROUND_PLANE_CALIBRATOR_HPP_
#include
+#include
#include
-#include
#include
#include
#include
@@ -46,6 +46,7 @@
namespace ground_plane_calibrator
{
+using autoware::kalman_filter::KalmanFilter;
using PointType = pcl::PointXYZ;
using tier4_ground_plane_utils::GroundPlaneExtractorParameters;
diff --git a/sensor/ground_plane_calibrator/include/ground_plane_calibrator/utils.hpp b/calibrators/ground_plane_calibrator/include/ground_plane_calibrator/utils.hpp
similarity index 97%
rename from sensor/ground_plane_calibrator/include/ground_plane_calibrator/utils.hpp
rename to calibrators/ground_plane_calibrator/include/ground_plane_calibrator/utils.hpp
index fa2ecb10..5740a298 100644
--- a/sensor/ground_plane_calibrator/include/ground_plane_calibrator/utils.hpp
+++ b/calibrators/ground_plane_calibrator/include/ground_plane_calibrator/utils.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/ground_plane_calibrator/launch/calibrator.launch.xml b/calibrators/ground_plane_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/ground_plane_calibrator/launch/calibrator.launch.xml
rename to calibrators/ground_plane_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/ground_plane_calibrator/package.xml b/calibrators/ground_plane_calibrator/package.xml
similarity index 93%
rename from sensor/ground_plane_calibrator/package.xml
rename to calibrators/ground_plane_calibrator/package.xml
index 65738128..1d37f809 100644
--- a/sensor/ground_plane_calibrator/package.xml
+++ b/calibrators/ground_plane_calibrator/package.xml
@@ -12,11 +12,12 @@
autoware_cmake
+ autoware_kalman_filter
+ autoware_universe_utilseigengeometry_msgsimage_geometryimage_transport
- kalman_filterpcl_conversionspcl_rosrclcpp
@@ -26,7 +27,6 @@
tf2_eigentf2_geometry_msgstf2_ros
- tier4_autoware_utilstier4_calibration_msgstier4_ground_plane_utilsvisualization_msgs
diff --git a/sensor/ground_plane_calibrator/rviz/default.rviz b/calibrators/ground_plane_calibrator/rviz/default.rviz
similarity index 100%
rename from sensor/ground_plane_calibrator/rviz/default.rviz
rename to calibrators/ground_plane_calibrator/rviz/default.rviz
diff --git a/sensor/ground_plane_calibrator/src/ground_plane_calibrator.cpp b/calibrators/ground_plane_calibrator/src/ground_plane_calibrator.cpp
similarity index 98%
rename from sensor/ground_plane_calibrator/src/ground_plane_calibrator.cpp
rename to calibrators/ground_plane_calibrator/src/ground_plane_calibrator.cpp
index 63d74df5..1c743233 100644
--- a/sensor/ground_plane_calibrator/src/ground_plane_calibrator.cpp
+++ b/calibrators/ground_plane_calibrator/src/ground_plane_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include
#include
#include
-#include
#include
@@ -276,9 +276,9 @@ void ExtrinsicGroundPlaneCalibrator::filterGroundModelEstimation(
Eigen::Vector3d estimated_translation;
auto estimated_rpy =
- tier4_autoware_utils::getRPY(tf2::toMsg(estimated_base_to_lidar_transform).orientation);
+ autoware::universe_utils::getRPY(tf2::toMsg(estimated_base_to_lidar_transform).orientation);
auto initial_rpy =
- tier4_autoware_utils::getRPY(tf2::toMsg(initial_base_to_lidar_transform_).orientation);
+ autoware::universe_utils::getRPY(tf2::toMsg(initial_base_to_lidar_transform_).orientation);
if (verbose_) {
RCLCPP_INFO(
diff --git a/sensor/ground_plane_calibrator/src/main.cpp b/calibrators/ground_plane_calibrator/src/main.cpp
similarity index 97%
rename from sensor/ground_plane_calibrator/src/main.cpp
rename to calibrators/ground_plane_calibrator/src/main.cpp
index f5b62376..7b1f0234 100644
--- a/sensor/ground_plane_calibrator/src/main.cpp
+++ b/calibrators/ground_plane_calibrator/src/main.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/__init__.py b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/__init__.py
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/__init__.py
rename to calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/__init__.py
diff --git a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/calibrator.py b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/calibrator.py
similarity index 99%
rename from sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/calibrator.py
rename to calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/calibrator.py
index c9d51bba..76c48d21 100644
--- a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/calibrator.py
+++ b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/image_view.py b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/image_view.py
similarity index 99%
rename from sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/image_view.py
rename to calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/image_view.py
index 896c458e..d4326d2c 100644
--- a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/image_view.py
+++ b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/image_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/interactive_calibrator.py b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/interactive_calibrator.py
similarity index 99%
rename from sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/interactive_calibrator.py
rename to calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/interactive_calibrator.py
index ee572013..921ac4e8 100644
--- a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/interactive_calibrator.py
+++ b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/interactive_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -182,6 +182,7 @@ def calibration_intrinsics_callback():
self.optimized_camera_info = camera_lidar_calibrate_intrinsics(
np.array(self.object_calibration_points + self.external_object_calibration_points),
np.array(self.image_calibration_points + self.external_image_calibration_points),
+ self.camera_info,
)
self.use_optimized_intrinsics_checkbox.setEnabled(True)
diff --git a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/ros_interface.py b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/ros_interface.py
similarity index 99%
rename from sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/ros_interface.py
rename to calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/ros_interface.py
index a34f3a7c..d3be2bfe 100644
--- a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/ros_interface.py
+++ b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/ros_interface.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/utils.py b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/utils.py
similarity index 98%
rename from sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/utils.py
rename to calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/utils.py
index ec31f747..a06a463b 100644
--- a/sensor/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/utils.py
+++ b/calibrators/interactive_camera_lidar_calibrator/interactive_camera_lidar_calibrator/utils.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/interactive_camera_lidar_calibrator/package.xml b/calibrators/interactive_camera_lidar_calibrator/package.xml
similarity index 100%
rename from sensor/interactive_camera_lidar_calibrator/package.xml
rename to calibrators/interactive_camera_lidar_calibrator/package.xml
diff --git a/sensor/interactive_camera_lidar_calibrator/resource/interactive_camera_lidar_calibrator b/calibrators/interactive_camera_lidar_calibrator/resource/interactive_camera_lidar_calibrator
similarity index 100%
rename from sensor/interactive_camera_lidar_calibrator/resource/interactive_camera_lidar_calibrator
rename to calibrators/interactive_camera_lidar_calibrator/resource/interactive_camera_lidar_calibrator
diff --git a/sensor/interactive_camera_lidar_calibrator/setup.cfg b/calibrators/interactive_camera_lidar_calibrator/setup.cfg
similarity index 100%
rename from sensor/interactive_camera_lidar_calibrator/setup.cfg
rename to calibrators/interactive_camera_lidar_calibrator/setup.cfg
diff --git a/sensor/interactive_camera_lidar_calibrator/setup.py b/calibrators/interactive_camera_lidar_calibrator/setup.py
similarity index 100%
rename from sensor/interactive_camera_lidar_calibrator/setup.py
rename to calibrators/interactive_camera_lidar_calibrator/setup.py
diff --git a/sensor/interactive_camera_lidar_calibrator/test/test_pep257.py b/calibrators/interactive_camera_lidar_calibrator/test/test_pep257.py
similarity index 100%
rename from sensor/interactive_camera_lidar_calibrator/test/test_pep257.py
rename to calibrators/interactive_camera_lidar_calibrator/test/test_pep257.py
diff --git a/sensor/intrinsic_camera_calibrator/ceres_intrinsic_camera_calibrator/.tmp b/calibrators/intrinsic_camera_calibrator/ceres_intrinsic_camera_calibrator/.tmp
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/ceres_intrinsic_camera_calibrator/.tmp
rename to calibrators/intrinsic_camera_calibrator/ceres_intrinsic_camera_calibrator/.tmp
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/config/intrinsics_calibrator.yaml b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/config/intrinsics_calibrator.yaml
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/config/intrinsics_calibrator.yaml
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/config/intrinsics_calibrator.yaml
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/__init__.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/__init__.py
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/__init__.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/__init__.py
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/apriltag_grid_detection.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/apriltag_grid_detection.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/apriltag_grid_detection.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/apriltag_grid_detection.py
index bfc0208b..9fb1a89b 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/apriltag_grid_detection.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/apriltag_grid_detection.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/array_board_detection.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/array_board_detection.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/array_board_detection.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/array_board_detection.py
index 45ba7010..dfbd8672 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/array_board_detection.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/array_board_detection.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/board_detection.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/board_detection.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/board_detection.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/board_detection.py
index 4c1fa4c4..bb02b831 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/board_detection.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/board_detection.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/chess_board_detection.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/chess_board_detection.py
similarity index 96%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/chess_board_detection.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/chess_board_detection.py
index b5753930..3afaa33f 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/chess_board_detection.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/chess_board_detection.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/dotboard_detection.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/dotboard_detection.py
similarity index 96%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/dotboard_detection.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/dotboard_detection.py
index 40469334..fed71069 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/dotboard_detection.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detections/dotboard_detection.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/__init__.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/__init__.py
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/__init__.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/__init__.py
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/apriltag_grid_detector.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/apriltag_grid_detector.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/apriltag_grid_detector.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/apriltag_grid_detector.py
index 935c5e2b..ac952e0f 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/apriltag_grid_detector.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/apriltag_grid_detector.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector.py
index 357d1085..7f644dcb 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector_factory.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector_factory.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector_factory.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector_factory.py
index e7132a02..7cd6b127 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector_factory.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/board_detector_factory.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/chessboard_detector.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/chessboard_detector.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/chessboard_detector.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/chessboard_detector.py
index efccfe90..eae003f3 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/chessboard_detector.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/chessboard_detector.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/dotboard_detector.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/dotboard_detector.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/dotboard_detector.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/dotboard_detector.py
index 1acbcc85..1f2128ca 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/dotboard_detector.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_detectors/dotboard_detector.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -120,6 +120,10 @@ def detect(detection_image, detector):
if not resized_detection or max(h, w) <= resized_max_resolution:
(ok, corners) = detect(grayscale, full_res_detector)
+ if not ok:
+ self.detection_results_signal.emit(img, None, stamp)
+ return
+
else:
# Resize
resized = cv2.resize(img, (resized_w, resized_h), interpolation=cv2.INTER_NEAREST)
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/apriltag_grid_parameters.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/apriltag_grid_parameters.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/apriltag_grid_parameters.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/apriltag_grid_parameters.py
index 4277935d..092b0945 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/apriltag_grid_parameters.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/apriltag_grid_parameters.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters.py
index 520b7504..8676df33 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters_factory.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters_factory.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters_factory.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters_factory.py
index 2b135d2d..5af4476d 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters_factory.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/board_parameters/board_parameters_factory.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/boards.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/boards.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/boards.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/boards.py
index 185db396..0f71ac45 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/boards.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/boards.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator.py
index 9d8ea6e5..15cc6cde 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator_factory.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator_factory.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator_factory.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator_factory.py
index a94d8673..7afc6d67 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator_factory.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/calibrator_factory.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/ceres_calibrator.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/ceres_calibrator.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/ceres_calibrator.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/ceres_calibrator.py
index 8109304f..cd10278b 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/ceres_calibrator.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/ceres_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/opencv_calibrator.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/opencv_calibrator.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/opencv_calibrator.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/opencv_calibrator.py
index dcc750e0..86ce559b 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/opencv_calibrator.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/opencv_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/utils.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/utils.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/utils.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/utils.py
index f9c65abd..320dec3e 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/utils.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/calibrators/utils.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_calibrator.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_calibrator.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_calibrator.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_calibrator.py
index d24bf0a7..f77df4d9 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_calibrator.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_model.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_model.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_model.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_model.py
index cf9edb8d..1c3bba0e 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_model.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/camera_model.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_collector.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_collector.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_collector.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_collector.py
index f740567d..4c3b1dce 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_collector.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_collector.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/__init__.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/__init__.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/__init__.py
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source.py
index 67305953..7665fa49 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source_factory.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source_factory.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source_factory.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source_factory.py
index 8421a8e7..c2a87772 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source_factory.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/data_source_factory.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/image_files_data_source.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/image_files_data_source.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/image_files_data_source.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/image_files_data_source.py
index 75cce3e5..a4582ae6 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/image_files_data_source.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/image_files_data_source.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_bag_data_source.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_bag_data_source.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_bag_data_source.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_bag_data_source.py
index 74adfe6b..b0c98b2d 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_bag_data_source.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_bag_data_source.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_topic_data_source.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_topic_data_source.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_topic_data_source.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_topic_data_source.py
index 8c600aa3..c2827752 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_topic_data_source.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/ros_topic_data_source.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/video_file_data_source.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/video_file_data_source.py
similarity index 95%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/video_file_data_source.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/video_file_data_source.py
index beebc61d..a471be5e 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/video_file_data_source.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/data_sources/video_file_data_source.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/parameter.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/parameter.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/parameter.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/parameter.py
index a35a7c1a..df27a7f3 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/parameter.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/parameter.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/types.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/types.py
similarity index 97%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/types.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/types.py
index e71aea1c..1552b08c 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/types.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/types.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/utils.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/utils.py
similarity index 98%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/utils.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/utils.py
index 76ba328d..f50a8443 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/utils.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/utils.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/data_collector_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/data_collector_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/data_collector_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/data_collector_view.py
index 9ee09492..71f0f61b 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/data_collector_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/data_collector_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_files_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_files_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_files_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_files_view.py
index 2d3b7ff4..0ed08348 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_files_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_files_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_view.py
index 1de55838..2223e37a 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/image_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/initialization_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/initialization_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/initialization_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/initialization_view.py
index 02230174..450e80d0 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/initialization_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/initialization_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/parameter_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/parameter_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/parameter_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/parameter_view.py
index 2dfff052..d786fdde 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/parameter_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/parameter_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_bag_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_bag_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_bag_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_bag_view.py
index 28ad40d8..7bd4fc36 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_bag_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_bag_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_topic_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_topic_view.py
similarity index 99%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_topic_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_topic_view.py
index 52d4c6b2..c1f030ae 100644
--- a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_topic_view.py
+++ b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/ros_topic_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/video_file_view.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/video_file_view.py
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/video_file_view.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/intrinsic_camera_calibrator/views/video_file_view.py
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/launch/calibrator.launch.xml b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/launch/calibrator.launch.xml
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/package.xml b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/package.xml
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/package.xml
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/package.xml
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/resource/intrinsic_camera_calibrator b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/resource/intrinsic_camera_calibrator
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/resource/intrinsic_camera_calibrator
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/resource/intrinsic_camera_calibrator
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.cfg b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.cfg
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.cfg
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.cfg
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.py
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/setup.py
diff --git a/sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/test/test_pep257.py b/calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/test/test_pep257.py
similarity index 100%
rename from sensor/intrinsic_camera_calibrator/intrinsic_camera_calibrator/test/test_pep257.py
rename to calibrators/intrinsic_camera_calibrator/intrinsic_camera_calibrator/test/test_pep257.py
diff --git a/sensor/lidar_to_lidar_2d_calibrator/CMakeLists.txt b/calibrators/lidar_to_lidar_2d_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/lidar_to_lidar_2d_calibrator/CMakeLists.txt
rename to calibrators/lidar_to_lidar_2d_calibrator/CMakeLists.txt
diff --git a/sensor/lidar_to_lidar_2d_calibrator/include/lidar_to_lidar_2d_calibrator/lidar_to_lidar_2d_calibrator.hpp b/calibrators/lidar_to_lidar_2d_calibrator/include/lidar_to_lidar_2d_calibrator/lidar_to_lidar_2d_calibrator.hpp
similarity index 98%
rename from sensor/lidar_to_lidar_2d_calibrator/include/lidar_to_lidar_2d_calibrator/lidar_to_lidar_2d_calibrator.hpp
rename to calibrators/lidar_to_lidar_2d_calibrator/include/lidar_to_lidar_2d_calibrator/lidar_to_lidar_2d_calibrator.hpp
index 2f806136..217f3996 100644
--- a/sensor/lidar_to_lidar_2d_calibrator/include/lidar_to_lidar_2d_calibrator/lidar_to_lidar_2d_calibrator.hpp
+++ b/calibrators/lidar_to_lidar_2d_calibrator/include/lidar_to_lidar_2d_calibrator/lidar_to_lidar_2d_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,7 +16,7 @@
#define LIDAR_TO_LIDAR_2D_CALIBRATOR__LIDAR_TO_LIDAR_2D_CALIBRATOR_HPP_
#include
-#include
+#include
#include
#include
#include
@@ -47,6 +47,7 @@
namespace lidar_to_lidar_2d_calibrator
{
+using autoware::kalman_filter::KalmanFilter;
using PointType = pcl::PointXYZ;
/**
diff --git a/sensor/lidar_to_lidar_2d_calibrator/launch/calibrator.launch.xml b/calibrators/lidar_to_lidar_2d_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/lidar_to_lidar_2d_calibrator/launch/calibrator.launch.xml
rename to calibrators/lidar_to_lidar_2d_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/lidar_to_lidar_2d_calibrator/package.xml b/calibrators/lidar_to_lidar_2d_calibrator/package.xml
similarity index 92%
rename from sensor/lidar_to_lidar_2d_calibrator/package.xml
rename to calibrators/lidar_to_lidar_2d_calibrator/package.xml
index b94aedcd..1e32452a 100755
--- a/sensor/lidar_to_lidar_2d_calibrator/package.xml
+++ b/calibrators/lidar_to_lidar_2d_calibrator/package.xml
@@ -12,11 +12,12 @@
autoware_cmake
+ autoware_kalman_filter
+ autoware_universe_utilseigengeometry_msgsimage_geometryimage_transport
- kalman_filterpcl_conversionspcl_rosrclcpp
@@ -26,7 +27,6 @@
tf2_eigentf2_geometry_msgstf2_ros
- tier4_autoware_utilstier4_calibration_msgsvisualization_msgs
diff --git a/sensor/lidar_to_lidar_2d_calibrator/rviz/default.rviz b/calibrators/lidar_to_lidar_2d_calibrator/rviz/default.rviz
similarity index 100%
rename from sensor/lidar_to_lidar_2d_calibrator/rviz/default.rviz
rename to calibrators/lidar_to_lidar_2d_calibrator/rviz/default.rviz
diff --git a/sensor/lidar_to_lidar_2d_calibrator/src/lidar_to_lidar_2d_calibrator.cpp b/calibrators/lidar_to_lidar_2d_calibrator/src/lidar_to_lidar_2d_calibrator.cpp
similarity index 98%
rename from sensor/lidar_to_lidar_2d_calibrator/src/lidar_to_lidar_2d_calibrator.cpp
rename to calibrators/lidar_to_lidar_2d_calibrator/src/lidar_to_lidar_2d_calibrator.cpp
index 5381753b..566efe91 100644
--- a/sensor/lidar_to_lidar_2d_calibrator/src/lidar_to_lidar_2d_calibrator.cpp
+++ b/calibrators/lidar_to_lidar_2d_calibrator/src/lidar_to_lidar_2d_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include
#include
#include
-#include
#include
#include
@@ -331,7 +331,7 @@ void LidarToLidar2DCalibrator::calibrationTimerCallback()
// Optional filtering
if (filter_estimations_) {
// We force our RPY to avoid convention errors
- auto estimated_rpy = tier4_autoware_utils::getRPY(tf2::toMsg(icp_affine).orientation);
+ auto estimated_rpy = autoware::universe_utils::getRPY(tf2::toMsg(icp_affine).orientation);
Eigen::Vector3d x(estimated_rpy.z, icp_affine.translation().x(), icp_affine.translation().y());
Eigen::DiagonalMatrix p0(initial_angle_cov_, initial_xy_cov_, initial_xy_cov_);
@@ -348,8 +348,9 @@ void LidarToLidar2DCalibrator::calibrationTimerCallback()
filtered_affine.translation().x() = kalman_filter_.getXelement(1);
filtered_affine.translation().y() = kalman_filter_.getXelement(2);
- geometry_msgs::msg::Quaternion quaternion_msg = tier4_autoware_utils::createQuaternionFromRPY(
- estimated_rpy.x, estimated_rpy.y, estimated_rpy.z);
+ geometry_msgs::msg::Quaternion quaternion_msg =
+ autoware::universe_utils::createQuaternionFromRPY(
+ estimated_rpy.x, estimated_rpy.y, estimated_rpy.z);
Eigen::Quaterniond quaternion_eigen(
quaternion_msg.w, quaternion_msg.x, quaternion_msg.y, quaternion_msg.z);
diff --git a/sensor/lidar_to_lidar_2d_calibrator/src/main.cpp b/calibrators/lidar_to_lidar_2d_calibrator/src/main.cpp
similarity index 97%
rename from sensor/lidar_to_lidar_2d_calibrator/src/main.cpp
rename to calibrators/lidar_to_lidar_2d_calibrator/src/main.cpp
index 7700f07d..2583d168 100644
--- a/sensor/lidar_to_lidar_2d_calibrator/src/main.cpp
+++ b/calibrators/lidar_to_lidar_2d_calibrator/src/main.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/CMakeLists.txt b/calibrators/mapping_based_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/mapping_based_calibrator/CMakeLists.txt
rename to calibrators/mapping_based_calibrator/CMakeLists.txt
diff --git a/calibrators/mapping_based_calibrator/README.md b/calibrators/mapping_based_calibrator/README.md
new file mode 100644
index 00000000..e66e2860
--- /dev/null
+++ b/calibrators/mapping_based_calibrator/README.md
@@ -0,0 +1,275 @@
+# mapping_based_calibrator
+
+A tutorial for this calibrator can be found [here](../../docs/tutorials/mapping_based_calibrator.md)
+
+## Purpose
+
+The package `mapping_based_calibrator` performs extrinsic calibration between 3d lidar sensors, as well as the (partial) calibration between a single 3d lidar and `base_link`.
+
+## Inner-workings / Algorithms
+
+### lidar-lidar calibration
+
+The calibrator is designed to estimate the transformation between multiple lidar sensors. It does so by moving the robot/vehicle, creating a trajectory in which lidars observe the same features, and formulating the calibration problem as a pointcloud registration one.
+
+One of the lidars is used to map the trajectory (denoted as the `mapping lidar`), and once a map created with this lidar, the other lidars (denoted as `calibration lidars`) are registered against an augmented `mapping lidar` pointcloud (through the mapping process), which is equivalent to lidar-lidar calibration (between the `mapping lidar` and each of the `calibration lidars` individually).
+
+The calibration process encompasses three main steps: constructing a map with the `mapping lidar` via moving the vehicle, preprocessing and selecting the calibration data, and finally performing lidar-lidar calibration via pointcloud registration.
+
+General notes about the environment, trajectory, and sensors used:
+
+- The environment should contain features appropriate for mapping (e.g., an open space with no walls is inadequate).
+- The data from the lidars needs to be synchronized since we pair and interpolate data from different sensors.
+- Since lidar scans get distorted with the vehicle's movement, the trajectory followed by the vehicle should be as slow and continuous as possible. Failure to do this has a detrimental impact on the calibration process.
+- In addition to mapping, the different lidars must observe common, highly distinctive features to perform pointcloud registration among them. Good examples are objects with a lack of symmetry, and clear 3d shapes (as opposed to 2d objects like walls).
+- The mapping lidar is usually chosen as the one with the highest resolution, range, and field of view.
+- The resolution and range of the lidars used have a great impact on how or whether this method can be used. We do not make guarantees about any set of combinations, and in most cases, parameters will need to be modified to maintain a good performance.
+
+Note: although this package can perform calibration between the `mapping lidar` and several `calibration lidars`, the documentation will assume only one `calibration lidar` is used. In the presence of multiple `calibration lidars`, the process is done in parallel in an independent fashion.
+
+#### Step 1: Map construction
+
+As mentioned in the previous section, one of the lidars is termed the `mapping lidar` (set in the launchers via the `mapping_pointcloud` argument), and while the robot/vehicle moves, its data is used to construct a map.
+
+The mapping process is implemented via direct pointcloud registration between individual scans of the `mapping lidar` using either NDT[1] or GICP[2] (the algorithm can be set in the launcher). The output of this step is a series of registered pointclouds (raw pointcloud and its pose in the map) dubbed `frames` (or `keyframes`).
+
+However, not all pointclouds coming from the `mapping lidar` are used in the map creation, since there is a chance of data redundancy, which is known to difficult data processing and the registration process itself. For this reason, we consider the following rules when mapping:
+
+- An incoming lidar scan is compared against an aggregated pointcloud of the latest `local_map_num_keyframes` `keyframes`.
+- `keyframes` are lidar scans sampled uniformly every `new_keyframe_min_distance` meters.
+- Incoming lidars that are not deemed `keyframes`, are saved as `frames` if their distance to the latest accepted `frame` is over `new_frame_min_distance` meters. Otherwise, the incoming scan is discarded.
+- If the vehicle stops (and this fact is detected), a special `stopped frame` is saved, since this data is useful for calibration (still data).
+- If the trajectory followed by the `frames` is deemed non-continuous (e.g., high accelerations or data loss), the `frame` at which this fact is detected is deemed a `lost frame` and the new incoming scan will not compare against this or previous frames (essentially restarting the mapping process). Note: although in normal mapping applications this is not acceptable, for calibration purposes we only need sequences of registered pointclouds so this is still allowed. However, whenever possible the user should restart the mapping process if he identifies this issue.
+
+#### Step 2: Calibration data preparation
+
+The data required for calibration is created throughout the mapping process and right before the calibration itself. In particular, the mapping and calibration lidar are expected to have different timestamps so they can not be directly registered. Additionally, the mapping process produces a great amount of potential combinations of pointclouds to register, so the data best suited for calibration needs to be chosen.
+
+##### Data interpolation
+
+As explained in the previous section, pointclouds from the `mapping lidar` and `calibration lidar` have different timestamps which makes registration directly unfeasible. To address this problem, whenever a `keyframe` from the `mapping lidar` is generated, the temporally closest `calibration lidar` pointcloud is associated to it, and the pose of the `mapping lidar` pointcloud is interpolated to the stamp of the `calibration lidar` pointcloud using the map (adjacent frames to the `keyframe`).
+
+However, the interpolation is only an approximation and its use induces an interpolation error that can be detrimental to calibration. For this reason, interpolation statistics like the interpolation time, distance, angle, and estimated dynamics are computed.
+
+The output of this step is a list of what we call `calibration frames`, consisting of the `mapping lidar` `keyframe`, the `calibration lidar` pointcloud, the interpolated pose, and the interpolation statistics.
+
+##### Data selection
+
+At this point, we have obtained a series of `calibration frames` that can be used to perform lidar calibration. However, their contents could have little to no useful information (calibration-wise), their data could be compromised due to an incorrect mapping, or their interpolation error could be non-negligible. For these reasons, we select the calibration data using the following criteria:
+
+- All `calibration frames` "close" to `lost frames` are discarded. The term "close" in this context refers to the fact that the `frames` near the `calibration lidar` `keyframe` from the `calibration frame` are used to augment said pointcloud. This step makes sure no invalid data is used (mapping-wise).
+- The interpolation statistics are used to discard `calibration frames`. High interpolation times, distances, angles, speed, and acceleration are not accepted (thresholds are set via parameters).
+- `calibration frames` have varying levels of "information" in them, and in some cases, that information may not be useful for calibration. To select the frames more suited for calibration information-wise, the following criteria are used:
+ - The Principal Component Analysis (PCA) is applied to the `calibration lidar` pointcloud of the `calibration frames`. In this context, the higher the smallest component of PCA is, the more suited a pointcloud is for calibration.
+ - Then, the `calibration frames` are sorted in descending order and they are greedily added to the final calibration set until a maximum budget is reached.
+ - However, `calibration frames` will be skipped if another one near it has already been added (using distance criteria in the map).
+
+##### Data preprocessing
+
+When doing source-to-target pointcloud registration, all points in the source pointcloud are projected into the target one, and each source point forms a pair with its closest target one. In the case of sparse pointclouds from lidar scans, this causes convergence issues that are very common in the case of algorithms like `ICP` and still cause problems on others like `GICP`.
+
+For this reason, instead of registering the `calibration lidar` points into the `mapping lidar` ones, we first augment the `mapping lidar` pointclouds with their neighbors in the map within a vicinity. This augmented pointcloud has a very high number of points, which makes pointcloud registration intractable. To solve this, we use voxel subsampling before pointcloud registration.
+
+#### Step 3: Pointcloud registration
+
+Lidar-to-lidar calibration is solved implicitly via the pointcloud registration of `calibration lidar` pointclouds into the augmented `mapping lidar` pointclouds. Each pair of pointclouds produces a registered pose, essentially the calibration pose. Among all of these resulting poses, the one that presents a lower overall error (source to target error among all `calibration frames`) is the one chosen as the output calibration result.
+
+However, as registration algorithms are very sensitive to their initial guess and parameters, we use multiple registrators (`ICP`, `GICP`, and `NDT` with different parameters) in a sequential fashion similar to an ensemble, using as the initial guess at every step the best calibration pose so far.
+
+In addition to calibrating using `calibration frame` independently, we also use `Batched ICP`, which allows us to perform ICP using all the `calibration frames` of each lidar simultaneously.
+
+### base-lidar calibration
+
+In addition of lidar-lidar calibration, we can also utilize the map generated by the `mapping lidar` to partially calibrate the transformation between the `mapping lidar` and the `base_link`. This possible if the assumption that the area around of the vehicle forms a plane holds true.
+
+#### Step 1: Map construction
+
+The first step of base-lidar calibration is identical to the [Step 1](#step-1-map-construction) of `lidar-lidar calibration`.
+
+#### Step 2: Extract ground plane from the pointcloud
+
+After constructing the map, and computing the augmented pointcloud from `mapping lidar`, which is identical to the [Step 2](#step-2-calibration-data-preparation), a RANSAC-based plane estimation algorithm is used to extract the ground plane pointcloud and its mathematical model.
+
+#### Step 3: Estimate transformation
+
+To estimate the transformation between the `mapping lidar` and the `base_link`, the tool needs to calculate the transformation between the lidar and the ground pose, as well as the transformation between the ground pose and the `base_link`.
+
+The transformation between the lidar and the ground pose is calculated by utilizing the normal vector and a point on the ground plane, both obtained in the last step. To estimate the transformation between the ground pose and the `base_link`, the tool first determines the initial ground-pose-to-base-link using the initial lidar-to-base-link and lidar-to-ground-pose transformations. Then, the tool projects this initial ground-pose-to-base-link transformation onto the xy plane to estimate the transformation between the ground pose and the `base_link`. The final lidar to `base_link` pose can be obtained by composing the previous poses.
+
+## ROS Interfaces
+
+### Input
+
+| Name | Type | Description |
+| -------------------------------- | ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
+| `calibration_camera_info_topics` | `sensor_msgs::msg::CameraInfo` | The intrinsic parameters of calibration cameras. `calibration_camera_info_topics` is provided via parameters (currently not used). |
+| `calibration_image_topics` | `sensor_msgs::msg::CompressedImage` | Calibration cameras' image topics. `calibration_image_topics` is provided via parameters (currently not used). |
+| `mapping_pointcloud` | `sensor_msgs::msg::PointCloud2` | Pointcloud's topic used for mapping. It is recommended to select the lidar that has the highest resolution and best FOV. |
+| `calibration_pointcloud_topics` | `sensor_msgs::msg::PointCloud2` | Pointclouds' topics used for calibrating with the `mapping pointcloud`. `calibration_pointcloud_topics` is provided via parameters. |
+| `detected_objects` | `autoware_perception_msgs::msg::DetectedObjects` | Messages containing detected objects, used in the filtering procedure. |
+| `predicted_objects` | `autoware_perception_msgs::msg::PredictedObjects` | Messages that contain predicted object paths and positions, used in the filtering procedure. |
+
+### Output
+
+| Name | Type | Description |
+| --------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------- |
+| `output_map` | `sensor_msgs::msg::PointCloud2` | Output map constructed from the `mapping_pointcloud`. |
+| `frame_path` | `nav_msgs::msg::Path` | The actual path of the `mapping_pointcloud`. |
+| `frame_predicted_path` | `nav_msgs::msg::Path` | The predicted path of the `mapping_pointcloud`. |
+| `keyframe_path` | `nav_msgs::msg::Path` | The keyframe path of the `mapping_pointcloud`. |
+| `keyframe_markers` | `visualization_msgs::msg::MarkerArray` | Keyframe markers. |
+| `initial_source_aligned_map` | `sensor_msgs::msg::PointCloud2` | Initial map from calibration lidars. |
+| `calibrated_source_aligned_map` | `sensor_msgs::msg::PointCloud2` | Calibrated map from calibration lidars. |
+| `target_map` | `sensor_msgs::msg::PointCloud2` | Target map from the `mapping lidar`, used for comparing with the `calibrated_source_aligned_map`. |
+| `target_markers` | `visualization_msgs::msg::MarkerArray` | Markers for the camera calibrator (currently not used). |
+| `base_lidar_augmented_pointcloud` | `sensor_msgs::msg::PointCloud2` | The ground pointcloud extracted from the augmented pointcloud. |
+| `ground_pointcloud` | `sensor_msgs::msg::PointCloud2` | The ground pointcloud extracted from the calibrated pointcloud. |
+
+### Services
+
+| Name | Type | Description |
+| ----------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `extrinsic_calibration` | `tier4_calibration_msgs::` `srv::ExtrinsicCalibrator` | Generic calibration service. The call is blocked until the calibration process finishes. |
+| `stop_mapping` | `std_srvs::srv::Empty` | Stops building the map and starts the calibration process. |
+| `load_database` | `std_srvs::srv::Empty` | Loads lidar and camera calibration frames from the database (for developers). |
+| `save_database` | `std_srvs::srv::Empty` | Saves lidar and camera calibration frames to the database (for developers). |
+
+## Parameters
+
+### Core Parameters
+
+| Name | Type | Default Value | Description |
+| ---------------------------------------- | --------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `calibrate_base_frame` | `bool` | `false` | Flag to optionally calibrate the base frame. (base_link). |
+| `base_frame` | `std::string` | | The frame name of the base frame used in base-lidar calibration. |
+| `map_frame` | `std::string` | | The frame name of the `map`. |
+| `calibration_camera_optical_link_frames` | `std::vector` | | The list of frame names for `calibration camera`. (currently not used) |
+| `calibration_lidar_frames` | `std::vector` | | The list of frame names for `calibration lidars`. |
+| `calibration_camera_info_topics` | `std::vector` | | The list of camera info topics for `calibration camera`. (currently not used) |
+| `calibration_image_topics` | `std::vector` | | The list of camera image topics for `calibration camera`. (currently not used) |
+| `calibration_pointcloud_topics` | `std::vector` | | The list of pointcloud topics for `calibration lidars`. |
+| `mapping_lidar_frame` | `std::string` | | The frame name of the `mapping_lidar`. |
+| `mapping_registrator` | `std::string` | `NDT` / `GICP` | The type of the PCL registration algorithm used for mapping. |
+| `mapping_verbose` | `bool` | `false` | Verbose output flag for mapping. |
+| `use_rosbag` | `bool` | `true` | Flag to determine if data should be read from a rosbag file. |
+| `mapping_max_frames` | `int` | `500` | The maximum number of frames to use for mapping. If the number of frames is larger than this value, the mapper stops and the calibration starts. |
+| `local_map_num_keyframes` | `int` | `15` | The number of keyframes stored in the local map. |
+| `dense_pointcloud_num_keyframes` | `int` | `10` | Dense pointcloud for calibration is generated by integrating the pointclouds in the range of [keyframe_id - `dense_pointcloud_num_keyframes`, keyframe_id + `dense_pointcloud_num_keyframes`]. |
+| `mapping_min_range` | `double` | `0.5` | The minimum range in meters of each lidar pointcloud for mapping. |
+| `mapping_max_range` | `double` | `60.0` | The maximum range in meters of each lidar pointcloud for mapping. |
+| `min_mapping_pointcloud_size` | `int` | `10000` | The minimum size of the pointcloud required for mapping. |
+| `min_calibration_pointcloud_size` | `int` | `500` | The minimum size of the pointcloud that is necessary for estimating transformation. |
+| `mapping_lost_timeout` | `double` | `1.0` | Sensor's timeout in seconds to consider the mapping process is failed. |
+
+### Mapping Parameters
+
+| Name | Type | Default Value | Description |
+| ------------------------------------ | -------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `mapper_resolution` | `double` | `5.0` | Resolution for `pclomp::NormalDistributionsTransform` algorithm. |
+| `mapper_step_size` | `double` | `0.1` | Step size for `pclomp::NormalDistributionsTransform` algorithm. |
+| `mapper_max_iterations` | `int` | `35` | The maximum number of iterations for `pclomp::NormalDistributionsTransform` and `pcl::GeneralizedIterativeClosestPoint` algorithm. |
+| `mapper_epsilon` | `double` | `0.01` | Epsilon value for `pclomp::NormalDistributionsTransform` and `pcl::GeneralizedIterativeClosestPoint` algorithm. |
+| `mapper_num_threads` | `int` | `8` | The number of threads to use for `pclomp::NormalDistributionsTransform` algorithm. |
+| `mapper_max_correspondence_distance` | `double` | `0.1` | Maximum correspondence distance in meters for `pcl::GeneralizedIterativeClosestPoint` algorithm. |
+| `mapping_viz_leaf_size` | `double` | `0.15` | Leaf size in meters for `pcl::VoxelGrid` to voxelize the mapping pointcloud. |
+| `calibration_viz_leaf_size` | `double` | `0.15` | Leaf size in meters for `pcl::VoxelGridTriplets` to voxelize the calibration pointcloud. |
+| `leaf_size_input` | `double` | `0.1` | Leaf size in meters for `pcl::VoxelGrid` to voxelize the input pointcloud. |
+| `leaf_size_local_map` | `double` | `0.1` | Leaf size in meters for `pcl::VoxelGrid` to voxelize the local map. |
+| `leaf_size_dense_map` | `double` | `0.05` | Leaf size in meters for `pcl::VoxelGrid` to voxelize the dense map. |
+| `new_keyframe_min_distance` | `double` | `1.0` | Minimum distance in meters between consecutive keyframes. |
+| `new_frame_min_distance` | `double` | `0.05` | Minimum distance in meters of a new frame needs to be apart from the last to be processed. |
+| `frame_stopped_distance` | `double` | `0.02` | Threshold distance in meters to determine if the frame has stopped moving. |
+| `frames_since_stopped_force_frame` | `int` | `5` | If the number of stopped frames is equal to this value, we set it as `keyframe_and_stop frame`. |
+| `calibration_skip_keyframes` | `int` | `5` | The number of initial keyframes that are skipped for calibration. |
+
+### Calibration Criteria Parameters
+
+| Name | Type | Default Value | Description |
+| -------------------------------------------- | -------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
+| `max_allowed_interpolated_time` | `double` | `0.05` | Maximum allowable time in seconds for frame interpolated time in standard criteria. |
+| `max_allowed_interpolated_distance` | `double` | `0.05` | Maximum allowable distance in meters for frame interpolated distance in standard criteria. |
+| `max_allowed_interpolated_angle` | `double` | `1.0` | Maximum allowable angle in degrees for frame interpolated angle in standard criteria. |
+| `max_allowed_interpolated_speed` | `double` | `3.0` | Maximum allowable speed in meters/second for frame interpolated speed in standard criteria. |
+| `max_allowed_interpolated_accel` | `double` | `0.4` | Maximum allowable acceleration in meters/second^2 for frame interpolated acceleration in standard criteria. |
+| `max_allowed_interpolated_distance_straight` | `double` | `0.08` | Maximum allowable distance in meters for frame interpolated distance in straight criteria. |
+| `max_allowed_interpolated_angle_straight` | `double` | `0.5` | Maximum allowable angle in degrees for frame interpolated angle in straight criteria. |
+| `max_allowed_interpolated_speed_straight` | `double` | `5.0` | Maximum allowable speed in meters/second for frame interpolated speed in straight criteria. |
+| `max_allowed_interpolated_accel_straight` | `double` | `0.1` | Maximum allowable acceleration in meters/second^2 for frame interpolated acceleration in straight criteria. |
+| `filter_detections` | `bool` | `true` | Flag to enable filtering of detection to improve calibration accuracy and reduce noise. |
+| `detection_max_time_tolerance` | `double` | `0.5` | Maximum time tolerance in seconds for obtaining all detections close in time to the source pointcloud. |
+| `detection_size_tolerance` | `double` | `0.4` | Tolerance for detection size in meters to account for measurement errors and environmental factors. |
+| `lost_frame_max_angle_diff` | `double` | `25.0` | Maximum allowable angular difference in degrees between keyframes to consider a frame as lost, used in handling outliers in frame processing. |
+| `lost_frame_interpolation_error` | `double` | `0.05` | Maximum allowable interpolation error in meters between keyframes to consider a frame as lost, used in handling outliers in frame processing. |
+| `lost_frame_max_acceleration` | `double` | `8.0` | Maximum allowable acceleration in meters/second between keyframes to consider a frame as lost, used in handling outliers in frame processing. |
+| `viz_max_range` | `double` | `80.0` | Maximum range in meters for visualization purposes, setting the boundary for displayable data. |
+| `crop_z_calibration_pointclouds` | `bool` | `true` | Flag to enable cropping of the Z-axis in calibration pointclouds. |
+| `crop_z_calibration_pointclouds_value` | `double` | `2.0` | Value of cropping the Z-axis in the calibration pointcloud. |
+| `calibration_use_only_stopped` | `bool` | `false` | Flag to use only data from stopped frames. |
+| `calibration_use_only_last_frames` | `bool` | `false` | Flag to use only last frames for calibration. |
+| `max_calibration_range` | `double` | `80.0` | Maximum range in meters to consider for calibration purposes, defining the spatial boundary for calibration data. |
+| `min_calibration_range` | `double` | `1.5` | Minimum range in meters to consider for calibration purposes, defining the spatial boundary for calibration data. |
+| `calibration_min_pca_eigenvalue` | `double` | `0.25` | If the eigenvalue of a pointcloud is less than this value, it will be filtered out. |
+| `calibration_min_distance_between_frames` | `double` | `5.0` | Threshold for the minimum distance in meters between frames. |
+| `calibration_eval_max_corr_distance` | `double` | `0.1` | Maximum correspondence distance in meters for source pointcloud and target pointcloud. |
+
+### Calibration Parameters
+
+| Name | Type | Default Value | Description |
+| -------------------------- | -------- | ------------- | ------------------------------------------------------------------------------------------------------------------------ |
+| `solver_iterations` | `int` | `200` | Number of iterations for the PCL registration algorithm during calibration, affecting the convergence rate and accuracy. |
+| `max_corr_dist_coarse` | `double` | `0.5` | Maximum coarse correspondence distance in meters for the PCL registration algorithm during calibration. |
+| `max_corr_dist_fine` | `double` | `0.1` | Maximum fine correspondence distance in meters for the PCL registration algorithm during calibration. |
+| `max_corr_dist_ultra_fine` | `double` | `0.05` | Maximum ultra fine correspondence distance in meters for the PCL registration algorithm during calibration. |
+
+### Lidar Calibration Parameters
+
+| Name | Type | Default Value | Description |
+| ------------------------------ | ----- | ------------- | --------------------------------------------------------------------- |
+| `lidar_calibration_min_frames` | `int` | `2` | The minimum number of calibration frames to use in lidar calibration. |
+| `lidar_calibration_max_frames` | `int` | `10` | The maximum number of calibration frames to use in lidar calibration. |
+
+### Camera Calibration Parameters (currently not used)
+
+| Name | Type | Default Value | Description |
+| ------------------------------- | -------- | ------------- | ---------------------------------------------------------------- |
+| `camera_calibration_min_frames` | `int` | `1` | The minimum number of frames to consider for camera calibration. |
+| `camera_calibration_max_frames` | `int` | `10` | The maximum number of frames to use in camera calibration. |
+| `pc_features_min_distance` | `double` | `0.2` | Near plane distance in meters for `pcl::FrustumCulling`. |
+| `pc_features_max_distance` | `double` | `40.0` | Far plane distance in meters for `pcl::FrustumCulling`. |
+
+### Base-Lidar Calibration Parameters
+
+| Name | Type | Default Value | Description |
+| ---------------------------------------- | -------- | ------------- | --------------------------------------------------------------------------------------------------------------- |
+| `base_lidar_crop_box_min_x` | `double` | `-20.0` | Minimum x-coordinate in meters for the cropping box in base-lidar calibration to focus on relevant data areas. |
+| `base_lidar_crop_box_min_y` | `double` | `-20.0` | Minimum y-coordinate in meters for the cropping box in base-lidar calibration to focus on relevant data areas. |
+| `base_lidar_crop_box_min_z` | `double` | `-20.0` | Minimum z-coordinate in meters for the cropping box in base-lidar calibration to focus on relevant data areas. |
+| `base_lidar_crop_box_max_x` | `double` | `20.0` | Maximum x-coordinate in meters for the cropping box in base-lidar calibration to focus on relevant data areas. |
+| `base_lidar_crop_box_max_y` | `double` | `20.0` | Maximum y-coordinate in meters for the cropping box in base-lidar calibration to focus on relevant data areas. |
+| `base_lidar_crop_box_max_z` | `double` | `20.0` | Maximum z-coordinate in meters for the cropping box in base-lidar calibration to focus on relevant data areas. |
+| `base_lidar_max_inlier_distance` | `double` | `0.01` | Maximum inlier distance in meters for ground extraction by using `pcl::SACSegmentation`. |
+| `base_lidar_max_iterations` | `int` | `1000` | The maximum number of iterations for ground extraction by using `pcl::SACSegmentation`. |
+| `base_lidar_min_plane_points` | `int` | `1000` | The minimum number of points required in a pointcloud, ensuring sufficient data for applying ground extraction. |
+| `base_lidar_min_plane_points_percentage` | `double` | `10.0` | The minimum percentage of the ground plane points in a pointcloud. |
+| `base_lidar_max_cos_distance` | `double` | `0.5` | Maximum cosine distance for applying ground plane extraction. |
+| `base_lidar_overwrite_xy_yaw` | `bool` | `false` | Flag to allow overwriting the x, y, and yaw value during base-lidar calibration. |
+
+## Known issues/limitations
+
+- As described in [Step 2](#step-2-calibration-data-preparation), the calibrator interpolates the pose of the `mapping lidar` at the timestamp of the `calibration lidars`. Therefore, the calibrator has strict sensor synchronization requirements.
+- It is required that the `mapping lidar` has a high resolution. For the `calibration lidar`, both high and low resolutions are acceptable. Therefore, vehicles with only low-resolution lidars cannot use the calibrator.
+- A good initial calibration is required for this calibrator (due to the nature of pointcloud registration).
+
+## Pro tips/recommendations
+
+- It is recommended to select the lidar that has the highest resolution and best FOV as the `mapping lidar`.
+- To build the map accurately, drive your vehicle at the lowest feasible speed, such as 2 km/h. Driving too fast can distort the point cloud, negatively impacting the map's accuracy.
+- The surroundings of the calibration area are crucial for creating an accurate map and estimating transformations. Therefore, it is essential to ensure that the environment is rich in natural landmarks suitable for registration-based mapping and calibration in all directions, as shown in the image below. This richness in natural landmarks helps the lidar capture sufficient details beyond simple features like lane surfaces or walls, thereby enhancing the accuracy and reliability of the mapping and calibration processes.
+
+
+
+
+
+[1] Peter Biber and Wolfgang Straßer, "The normal distributions transform: A new approach to laser scan matching" in Proceedings 2003 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2003).
+
+[2] Aleksandr V. Segal, Dirk Haehnel, and Sebastian Thrun, "Generalized-ICP" in Robotics: Science and Systems 2009..
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/base_lidar_calibrator.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/base_lidar_calibrator.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/base_lidar_calibrator.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/base_lidar_calibrator.hpp
index 7056d844..c2437c57 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/base_lidar_calibrator.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/base_lidar_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/calibration_mapper.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/calibration_mapper.hpp
similarity index 99%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/calibration_mapper.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/calibration_mapper.hpp
index 6e5cc27d..71c9cd03 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/calibration_mapper.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/calibration_mapper.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/camera_calibrator.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/camera_calibrator.hpp
similarity index 99%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/camera_calibrator.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/camera_calibrator.hpp
index 829dbc4d..13e93273 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/camera_calibrator.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/camera_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/best_frames_filter.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/best_frames_filter.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/best_frames_filter.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/best_frames_filter.hpp
index c3188fed..45f37057 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/best_frames_filter.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/best_frames_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/dynamics_filter.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/dynamics_filter.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/dynamics_filter.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/dynamics_filter.hpp
index 4362d07a..b9d06c7f 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/dynamics_filter.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/dynamics_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/filter.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/filter.hpp
similarity index 97%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/filter.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/filter.hpp
index fda62d38..3ad5d454 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/filter.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/lost_state_filter.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/lost_state_filter.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/lost_state_filter.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/lost_state_filter.hpp
index 2abff29c..22320fbe 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/lost_state_filter.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/lost_state_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/object_detection_filter.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/object_detection_filter.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/object_detection_filter.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/object_detection_filter.hpp
index 0ea0f112..7604be7c 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/object_detection_filter.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/object_detection_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/sequential_filter.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/sequential_filter.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/sequential_filter.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/sequential_filter.hpp
index c30e2178..8dfae118 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/filters/sequential_filter.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/filters/sequential_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/lidar_calibrator.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/lidar_calibrator.hpp
similarity index 99%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/lidar_calibrator.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/lidar_calibrator.hpp
index a444cf17..7c2e18aa 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/lidar_calibrator.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/lidar_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/mapping_based_calibrator.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/mapping_based_calibrator.hpp
similarity index 91%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/mapping_based_calibrator.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/mapping_based_calibrator.hpp
index 89904eec..1f0ed12c 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/mapping_based_calibrator.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/mapping_based_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -26,8 +26,8 @@
#include
#include
-#include
-#include
+#include
+#include
#include
#include
#include
@@ -75,14 +75,14 @@ class ExtrinsicMappingBasedCalibrator : public rclcpp::Node
* @param[in] objects Calibration pointcloud msg
*/
void detectedObjectsCallback(
- const autoware_auto_perception_msgs::msg::DetectedObjects::SharedPtr objects);
+ const autoware_perception_msgs::msg::DetectedObjects::SharedPtr objects);
/*!
* Message callback for detected objects
* @param[in] objects Calibration pointcloud msg
*/
void predictedObjectsCallback(
- const autoware_auto_perception_msgs::msg::PredictedObjects::SharedPtr objects);
+ const autoware_perception_msgs::msg::PredictedObjects::SharedPtr objects);
/*!
* Callback to set parameters using the ROS interface
@@ -111,9 +111,9 @@ class ExtrinsicMappingBasedCalibrator : public rclcpp::Node
std::map calibration_image_subs_;
std::map calibration_pointcloud_subs_;
PointSubscription::SharedPtr mapping_pointcloud_sub_;
- rclcpp::Subscription::SharedPtr
+ rclcpp::Subscription::SharedPtr
detected_objects_sub_;
- rclcpp::Subscription::SharedPtr
+ rclcpp::Subscription::SharedPtr
predicted_objects_sub_;
rclcpp::Service::SharedPtr service_server_;
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/sensor_calibrator.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/sensor_calibrator.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/sensor_calibrator.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/sensor_calibrator.hpp
index 00ca1a57..2f756e56 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/sensor_calibrator.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/sensor_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/serialization.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/serialization.hpp
similarity index 99%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/serialization.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/serialization.hpp
index 4b31991b..7e406c42 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/serialization.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/serialization.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/types.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/types.hpp
similarity index 99%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/types.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/types.hpp
index 6ecede5e..150af1c4 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/types.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/types.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/utils.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/utils.hpp
similarity index 99%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/utils.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/utils.hpp
index bf12057b..d20f8c71 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/utils.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/utils.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/voxel_grid_filter_wrapper.hpp b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/voxel_grid_filter_wrapper.hpp
similarity index 98%
rename from sensor/mapping_based_calibrator/include/mapping_based_calibrator/voxel_grid_filter_wrapper.hpp
rename to calibrators/mapping_based_calibrator/include/mapping_based_calibrator/voxel_grid_filter_wrapper.hpp
index 7ae62c00..2eaf18c2 100644
--- a/sensor/mapping_based_calibrator/include/mapping_based_calibrator/voxel_grid_filter_wrapper.hpp
+++ b/calibrators/mapping_based_calibrator/include/mapping_based_calibrator/voxel_grid_filter_wrapper.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/launch/calibrator.launch.xml b/calibrators/mapping_based_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/mapping_based_calibrator/launch/calibrator.launch.xml
rename to calibrators/mapping_based_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/mapping_based_calibrator/package.xml b/calibrators/mapping_based_calibrator/package.xml
similarity index 91%
rename from sensor/mapping_based_calibrator/package.xml
rename to calibrators/mapping_based_calibrator/package.xml
index fc6149da..615ab7c9 100644
--- a/sensor/mapping_based_calibrator/package.xml
+++ b/calibrators/mapping_based_calibrator/package.xml
@@ -12,12 +12,13 @@
autoware_cmake
- autoware_auto_perception_msgs
+ autoware_kalman_filter
+ autoware_perception_msgs
+ autoware_universe_utilseigengeometry_msgsimage_geometryimage_transport
- kalman_filterlibboost-filesystemlibboost-serializationlibpcl-all-dev
@@ -35,7 +36,6 @@
tf2_geometry_msgstf2_rostf2_sensor_msgs
- tier4_autoware_utilstier4_calibration_msgstier4_calibration_pcl_extensionstier4_ground_plane_utils
diff --git a/sensor/mapping_based_calibrator/rviz/default.rviz b/calibrators/mapping_based_calibrator/rviz/default.rviz
similarity index 100%
rename from sensor/mapping_based_calibrator/rviz/default.rviz
rename to calibrators/mapping_based_calibrator/rviz/default.rviz
diff --git a/sensor/mapping_based_calibrator/src/base_lidar_calibrator.cpp b/calibrators/mapping_based_calibrator/src/base_lidar_calibrator.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/base_lidar_calibrator.cpp
rename to calibrators/mapping_based_calibrator/src/base_lidar_calibrator.cpp
index aa328a27..84d2e89c 100644
--- a/sensor/mapping_based_calibrator/src/base_lidar_calibrator.cpp
+++ b/calibrators/mapping_based_calibrator/src/base_lidar_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/calibration_mapper.cpp b/calibrators/mapping_based_calibrator/src/calibration_mapper.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/calibration_mapper.cpp
rename to calibrators/mapping_based_calibrator/src/calibration_mapper.cpp
index 1ee056dc..2ed92255 100644
--- a/sensor/mapping_based_calibrator/src/calibration_mapper.cpp
+++ b/calibrators/mapping_based_calibrator/src/calibration_mapper.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/camera_calibrator.cpp b/calibrators/mapping_based_calibrator/src/camera_calibrator.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/camera_calibrator.cpp
rename to calibrators/mapping_based_calibrator/src/camera_calibrator.cpp
index 1d392abb..950dbe32 100644
--- a/sensor/mapping_based_calibrator/src/camera_calibrator.cpp
+++ b/calibrators/mapping_based_calibrator/src/camera_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/filters/best_frames_filter.cpp b/calibrators/mapping_based_calibrator/src/filters/best_frames_filter.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/filters/best_frames_filter.cpp
rename to calibrators/mapping_based_calibrator/src/filters/best_frames_filter.cpp
index 8a563f33..a01ece24 100644
--- a/sensor/mapping_based_calibrator/src/filters/best_frames_filter.cpp
+++ b/calibrators/mapping_based_calibrator/src/filters/best_frames_filter.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/filters/dynamics_filter.cpp b/calibrators/mapping_based_calibrator/src/filters/dynamics_filter.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/filters/dynamics_filter.cpp
rename to calibrators/mapping_based_calibrator/src/filters/dynamics_filter.cpp
index 20185f8a..1ea59e0f 100644
--- a/sensor/mapping_based_calibrator/src/filters/dynamics_filter.cpp
+++ b/calibrators/mapping_based_calibrator/src/filters/dynamics_filter.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/filters/lost_state_filter.cpp b/calibrators/mapping_based_calibrator/src/filters/lost_state_filter.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/filters/lost_state_filter.cpp
rename to calibrators/mapping_based_calibrator/src/filters/lost_state_filter.cpp
index deefbd07..ca93885f 100644
--- a/sensor/mapping_based_calibrator/src/filters/lost_state_filter.cpp
+++ b/calibrators/mapping_based_calibrator/src/filters/lost_state_filter.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/filters/object_detection_filter.cpp b/calibrators/mapping_based_calibrator/src/filters/object_detection_filter.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/filters/object_detection_filter.cpp
rename to calibrators/mapping_based_calibrator/src/filters/object_detection_filter.cpp
index 9fc7a6af..95670838 100644
--- a/sensor/mapping_based_calibrator/src/filters/object_detection_filter.cpp
+++ b/calibrators/mapping_based_calibrator/src/filters/object_detection_filter.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/lidar_calibrator.cpp b/calibrators/mapping_based_calibrator/src/lidar_calibrator.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/lidar_calibrator.cpp
rename to calibrators/mapping_based_calibrator/src/lidar_calibrator.cpp
index 08e64e4f..4da58ab4 100644
--- a/sensor/mapping_based_calibrator/src/lidar_calibrator.cpp
+++ b/calibrators/mapping_based_calibrator/src/lidar_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/main.cpp b/calibrators/mapping_based_calibrator/src/main.cpp
similarity index 97%
rename from sensor/mapping_based_calibrator/src/main.cpp
rename to calibrators/mapping_based_calibrator/src/main.cpp
index b0ab0a01..745c5aaa 100644
--- a/sensor/mapping_based_calibrator/src/main.cpp
+++ b/calibrators/mapping_based_calibrator/src/main.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/mapping_based_calibrator.cpp b/calibrators/mapping_based_calibrator/src/mapping_based_calibrator.cpp
similarity index 98%
rename from sensor/mapping_based_calibrator/src/mapping_based_calibrator.cpp
rename to calibrators/mapping_based_calibrator/src/mapping_based_calibrator.cpp
index c34d22f5..39d6a73e 100644
--- a/sensor/mapping_based_calibrator/src/mapping_based_calibrator.cpp
+++ b/calibrators/mapping_based_calibrator/src/mapping_based_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -148,7 +148,7 @@ ExtrinsicMappingBasedCalibrator::ExtrinsicMappingBasedCalibrator(
mapping_parameters_->frame_stopped_distance_ =
this->declare_parameter("frame_stopped_distance", 0.02);
mapping_parameters_->frames_since_stop_force_frame_ =
- this->declare_parameter("frames_since_stoped_force_frame", 5);
+ this->declare_parameter("frames_since_stopped_force_frame", 5);
mapping_parameters_->calibration_skip_keyframes_ =
this->declare_parameter("calibration_skip_keyframes", 5);
@@ -377,14 +377,13 @@ ExtrinsicMappingBasedCalibrator::ExtrinsicMappingBasedCalibrator(
"mapping_pointcloud", rclcpp::SensorDataQoS().keep_all(),
std::bind(&CalibrationMapper::mappingPointCloudCallback, mapper_, std::placeholders::_1));
- detected_objects_sub_ =
- this->create_subscription(
- "detected_objects", rclcpp::SensorDataQoS().keep_all(),
- std::bind(
- &ExtrinsicMappingBasedCalibrator::detectedObjectsCallback, this, std::placeholders::_1));
+ detected_objects_sub_ = this->create_subscription(
+ "detected_objects", rclcpp::SensorDataQoS().keep_all(),
+ std::bind(
+ &ExtrinsicMappingBasedCalibrator::detectedObjectsCallback, this, std::placeholders::_1));
predicted_objects_sub_ =
- this->create_subscription(
+ this->create_subscription(
"predicted_objects", rclcpp::SensorDataQoS().keep_all(),
std::bind(
&ExtrinsicMappingBasedCalibrator::predictedObjectsCallback, this, std::placeholders::_1));
@@ -629,7 +628,7 @@ void ExtrinsicMappingBasedCalibrator::requestReceivedCallback(
}
void ExtrinsicMappingBasedCalibrator::detectedObjectsCallback(
- const autoware_auto_perception_msgs::msg::DetectedObjects::SharedPtr objects)
+ const autoware_perception_msgs::msg::DetectedObjects::SharedPtr objects)
{
// Convert objects into ObjectBB
ObjectsBB new_objects;
@@ -654,7 +653,7 @@ void ExtrinsicMappingBasedCalibrator::detectedObjectsCallback(
}
void ExtrinsicMappingBasedCalibrator::predictedObjectsCallback(
- const autoware_auto_perception_msgs::msg::PredictedObjects::SharedPtr objects)
+ const autoware_perception_msgs::msg::PredictedObjects::SharedPtr objects)
{
// Convert objects into ObjectBB
ObjectsBB new_objects;
diff --git a/sensor/mapping_based_calibrator/src/sensor_calibrator.cpp b/calibrators/mapping_based_calibrator/src/sensor_calibrator.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/sensor_calibrator.cpp
rename to calibrators/mapping_based_calibrator/src/sensor_calibrator.cpp
index 13f6ae63..1ab023ae 100644
--- a/sensor/mapping_based_calibrator/src/sensor_calibrator.cpp
+++ b/calibrators/mapping_based_calibrator/src/sensor_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/mapping_based_calibrator/src/utils.cpp b/calibrators/mapping_based_calibrator/src/utils.cpp
similarity index 99%
rename from sensor/mapping_based_calibrator/src/utils.cpp
rename to calibrators/mapping_based_calibrator/src/utils.cpp
index 68c63125..1449fbaa 100644
--- a/sensor/mapping_based_calibrator/src/utils.cpp
+++ b/calibrators/mapping_based_calibrator/src/utils.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/marker_radar_lidar_calibrator/CMakeLists.txt b/calibrators/marker_radar_lidar_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/marker_radar_lidar_calibrator/CMakeLists.txt
rename to calibrators/marker_radar_lidar_calibrator/CMakeLists.txt
diff --git a/calibrators/marker_radar_lidar_calibrator/README.md b/calibrators/marker_radar_lidar_calibrator/README.md
new file mode 100644
index 00000000..97f6f5f6
--- /dev/null
+++ b/calibrators/marker_radar_lidar_calibrator/README.md
@@ -0,0 +1,202 @@
+# marker_radar_lidar_calibrator
+
+A tutorial for this calibrator can be found [here](../../docs/tutorials/marker_radar_lidar_calibrator.md)
+
+## Purpose
+
+The package `marker_radar_lidar_calibrator` performs extrinsic calibration between radar and 3d lidar sensors used in autonomous driving and robotics.
+
+Currently, the calibrator only supports radars whose detection interface includes distance and azimuth angle, but do not offer elevation angle. For example, ARS408 radars can be calibrated with this tool. Also, note that the 3d lidar should have a high enough resolution to present several returns on the [radar reflector](#radar-reflector) (calibration target).
+
+## Inner-workings / Algorithms
+
+The calibrator computes the center of the reflectors from the pointcloud and pairs them to the radar objects/tracks. Afterwards, both an SVD-based and a yaw-only rotation estimation algorithm are applied to these matched points to estimate the rigid transformation between sensors.
+
+Due to the complexity of the problem, the process in split in the following steps: constructing a background model, extracting the foreground to detect reflectors, matching and filtering the lidar and radar detections, and estimating the rigid transformation between the radar and lidar sensors.
+
+In what follows, we proceed to explain each step, making a point to put emphasis on the parts that the user must take into consideration to use phis package effectively.
+
+\*Note: although the radar can provide either detections and/or objects/tracks, we treat them as points in this package, and as such may refer to the radar pointcloud when needed.
+
+### Step 1: Background model construction
+
+Detecting corner reflectors in an unknown environment, without imposing impractical restrictions on the reflectors themselves, the operators, or the environment, it a challenging problem. From the perspective of the lidar, radar reflectors may be confused with the floor or other metallic objects, and from the radar's perspective, although corner reflectors are detected by the sensor (the user must confirm it themselves before attempting to use this tool!), other objects are also detected, with no practical way to tell them apart most of the time.
+
+For these reasons, we avoid addressing the full problem an instead leverage the use of background models. To do this, the user must first present the sensors an environment with no radar reflectors nor any dynamic objects (mostly persons) in the space that is to be used for calibration. The tool will collect data for a set period of time or until there is no new information. For each modality, this data is then turned into voxels, marking the space of each occupied voxel as `background` in the following steps.
+
+### Step 2: Foreground extraction and reflector detection
+
+Once the background models for both sensors have been prepared, new data gets filtered using the background models to leave only the foreground.
+
+Before placing radar reflectors, the foreground data should ideally be empty, and once placing them, only the reflectors and the people holding them should appear as foreground. In practice, however, even small variations in the load of the vehicle can cause ground points to escape the background models and be marked as foreground (a phenomenon exclusive to the lidars). To address this issue, we also employ a RANSAC-based ground segmentation algorithm to avoid these ground points being processed in downstream steps.
+
+All foreground radar objects are automatically categorized as potential reflector detections. For foreground lidar points, however, the [reflector](#radar-reflector) detection process involves more steps:
+
+- We first apply a clustering algorithm on the lidar foreground points and discard clusters with a number of points below a predefined threshold.
+- Compute the highest point of each cluster and discard it if the highest point exceeds `reflector_max_height`. This is required to discard the clusters corresponding to users (we assume the operators are taller than the reflectors).
+- Finally, we average all points within a `reflector_radius` from the highest point to estimate the center point of the reflector.
+
+The following images illustrate the background construction and foreground extraction process respectively. Although the radar pre-processing is presented, the process remains the same for the lidar.
+
+During background model construction (left image), the blue voxels (presented as 2d grid for visualization purposes) are marked as background since sensor data is present in said voxels.
+
+Once background model construction finishes and the foreground extraction process begins (right image), only points that fall outside previous background-marked voxels are considered as foreground. In this example, the points hitting the corner reflector and a human are marked as foreground (note that those points' voxels, here marked in green are disjoint with those of the background).
+
+
+
+
+
+
+
+
Background model construction.
+
Foreground extraction
+
+
+
+### Step 3: Matching and filtering
+
+The output of the previous step consists of two lists of points of potentials radar reflector candidates for each sensor. However, it is not possible to directly match points among these lists, and they are expected to contain a high number of false positives on both sensors.
+
+To address this issue, we rely on a heuristic that leverages the accuracy of initial calibration. Usually, robot/vehicle CAD designs allow an initial calibration with an accuracy of a few centimeters/degrees, and direct sensor calibration is only used to refine it.
+
+Using the initial radar-lidar calibration, we project each lidar corner reflector candidate into the radar coordinates and for each candidate we compute the closest candidate from the other modality. We consider real radar-lidar pairs of corner reflectors those pairs who are mutually their closest candidate.
+
+Matches using this heuristic can still contain incorrect pairs and false positives, which is why we employ a Kalman filter to both improve the estimations and check for temporal consistency (false positives are not usually consistent in time).
+
+Once matches' estimations converge (using a covariance matrix criteria), they are added to the calibration list.
+
+### Step 4: Rigid transformation estimation
+
+After matching detection pairs, we apply rigid transformation estimation algorithms to those pairs to estimate the transformation between the radar and lidar sensors. We currently support two algorithms: a 2d SVD-based method and a yaw-only rotation method.
+
+### 2d SVD-based method
+
+In this method, we reduce the problem to a 2d transformation estimation since radar detections lack a z component (elevation is fixed to zero).
+
+However, because lidar detections are in the lidar frame and likely involve a 3d transformation (non-zero roll and\or pitch) to the radar frame, we transform the lidar detections to a frame dubbed the `radar parallel` frame and then set their z component to zero. The `radar parallel` frame has only a 2d transformation (x, y, yaw) relative to the radar frame. By dropping the z-component we explicitly give up on computing a 3D pose, which was not possible due to the nature of the radar.
+
+In autonomous vehicles, radars are mounted in a way designed to minimize pitch and roll angles, maximizing their performance and measurement range. This means the radar sensors are aligned as parallel as possible to the ground plane, making the `base_link` a suitable choice for the `radar parallel` frame.
+
+\*\*Note: this assumes that the lidar to `radar parallel` frame is either hardcoded or previously calibrated
+
+Next, we apply the SVD-based rigid transformation estimation algorithm between the lidar detections in the radar parallel frame and the radar detections in the radar frame. This allows us to estimate the transformation between the lidar and radar by multiplying the radar-to-radar-parallel transformation (calibrated) with the radar-parallel-to-lidar transformation (known before-handed). The SVD-based algorithm, provided by PCL, leverages SVD to find the optimal rotation component and then computes the translation component based on the rotation.
+
+### Yaw-only rotation method
+
+This method, on the other hand, utilizes the initial radar-to-lidar transformation to calculate lidar detections in the radar frame. We then calculate the average yaw angle difference of all pairs, considering only yaw rotation between the lidar and radar detections in the radar frame, to estimate a yaw-only rotation transformation in the radar frame. Finally, we estimate the transformation between the lidar and radar by multiplying the yaw-only rotation transformation with the initial radar-to-lidar transformation.
+
+Generally, the 2d SVD-based method is preferred when valid; otherwise, the yaw-only rotation method is used as the calibration output.
+
+### Diagram
+
+Below, you can see how the algorithm is implemented in the `marker_radar_lidar_calibrator` package.
+
+
+
+## ROS Interfaces
+
+### Input
+
+| Name | Type | Description |
+| ------------------------ | ------------------------------- | ------------------------- |
+| `input_lidar_pointcloud` | `sensor_msgs::msg::PointCloud2` | Lidar pointcloud's topic. |
+| `input_radar_msg` | `radar_msgs::msg::RadarTracks` | Radar objects' topic. |
+
+### Output
+
+| Name | Type | Description |
+| ----------------------------- | -------------------------------------- | --------------------------------------------------------- |
+| `lidar_background_pointcloud` | `sensor_msgs::msg::PointCloud2` | Lidar's background pointcloud. |
+| `lidar_foreground_pointcloud` | `sensor_msgs::msg::PointCloud2` | Lidar's foreground pointcloud. |
+| `lidar_colored_clusters` | `sensor_msgs::msg::PointCloud2` | Lidar's colored pointcloud clusters. |
+| `lidar_detection_markers` | `visualization_msgs::msg::MarkerArray` | Lidar detections. |
+| `radar_background_pointcloud` | `sensor_msgs::msg::PointCloud2` | Radar's background pointcloud from the radar. |
+| `radar_foreground_pointcloud` | `sensor_msgs::msg::PointCloud2` | Radar's foreground pointcloud from the radar. |
+| `radar_detection_markers` | `visualization_msgs::msg::MarkerArray` | Radar detections. |
+| `matches_markers` | `visualization_msgs::msg::MarkerArray` | Matched lidar and radar detections. |
+| `tracking_markers` | `visualization_msgs::msg::MarkerArray` | Reflectors' tracks. |
+| `text_markers` | `visualization_msgs::msg::Marker` | Calibration metrics' markers. |
+| `calibration_metrics` | `std_msgs::msg::Float32MultiArray` | Calibration metrics as vector for visualization purposes. |
+
+### Services
+
+| Name | Type | Description |
+| -------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `extrinsic_calibration` | `tier4_calibration_msgs::` `srv::ExtrinsicCalibrator` | Generic calibration service. The call is blocked until the calibration process finishes. |
+| `extract_background_model` | `std_srvs::srv::Empty` | Starts to extract the background model from radar and lidar data. |
+| `add_lidar_radar_pair` | `std_srvs::srv::Empty` | Adds lidar-radar pairs for calibration. |
+| `delete_lidar_radar_pair` | `std_srvs::srv::Empty` | Deletes the latest lidar-radar pair. |
+| `send_calibration` | `std_srvs::srv::Empty` | Finishes the calibration process and sends the calibration result to the sensor calibration manager. |
+
+## Parameters
+
+### Core Parameters
+
+| Name | Type | Default Value | Description |
+| ------------------------------------------- | ------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `radar_parallel_frame` | `std::string` | `base_link` | Auxiliar frame used in the 2d SVD-based method. |
+| `msg_type` | `std::string` | `radar tracks` / `radar scan` | The type of input radar objects. (Not available yet, currently only support radar tracks.) |
+| `transformation_type` | `std::string` | `yaw_only_rotation_2d` / `svd_2d` / `svd_3d` / `roll_zero_3d` | Specifies the algorithm used to optimize the transformation between the radar frame and the radar parallel frame. (Not available yet.) |
+| `use_lidar_initial_crop_box_filter` | `bool` | `true` | Enables or disables the initial cropping filter for lidar data processing. |
+| `lidar_initial_crop_box_min_x` | `double` | `-50.0` | Minimum x-coordinate in meters for the initial lidar calibration area. |
+| `lidar_initial_crop_box_min_y` | `double` | `-50.0` | Minimum y-coordinate in meters for the initial lidar calibration area. |
+| `lidar_initial_crop_box_min_z` | `double` | `-50.0` | Minimum z-coordinate in meters for the initial lidar calibration area. |
+| `lidar_initial_crop_box_max_x` | `double` | `50.0` | Maximum x-coordinate in meters for the initial lidar calibration area. |
+| `lidar_initial_crop_box_max_y` | `double` | `50.0` | Maximum y-coordinate in meters for the initial lidar calibration area. |
+| `lidar_initial_crop_box_max_z` | `double` | `50.0` | Maximum z-coordinate in meters for the initial lidar calibration area. |
+| `use_radar_initial_crop_box_filter` | `bool` | `true` | Enables or disables the initial cropping filter for radar data processing. |
+| `radar_initial_crop_box_min_x` | `double` | `-50.0` | Minimum x-coordinate in meters for the initial radar calibration area. |
+| `radar_initial_crop_box_min_y` | `double` | `-50.0` | Minimum y-coordinate in meters for the initial radar calibration area. |
+| `radar_initial_crop_box_min_z` | `double` | `-50.0` | Minimum z-coordinate in meters for the initial radar calibration area. |
+| `radar_initial_crop_box_max_x` | `double` | `50.0` | Maximum x-coordinate in meters for the initial radar calibration area. |
+| `radar_initial_crop_box_max_y` | `double` | `50.0` | Maximum y-coordinate in meters for the initial radar calibration area. |
+| `radar_initial_crop_box_max_z` | `double` | `50.0` | Maximum z-coordinate in meters for the initial radar calibration area. |
+| `lidar_background_model_leaf_size` | `double` | `0.1` | Voxel size in meters for the lidar background model. |
+| `radar_background_model_leaf_size` | `double` | `0.1` | Voxel size in meters for the radar background model. |
+| `max_calibration_range` | `double` | `50.0` | Maximum range for calibration in meters. |
+| `background_model_timeout` | `double` | `5.0` | The background model will terminate if there are no new points in the background within this period, measured in seconds. |
+| `min_foreground_distance` | `double` | `0.4` | Minimum distance in meters for extracting foreground points. |
+| `background_extraction_timeout` | `double` | `15.0` | Timeout in seconds for background extraction processes. |
+| `ransac_threshold` | `double` | `0.2` | Distance threshold in meters for the ground segmentation model. |
+| `ransac_max_iterations` | `int` | `100` | The maximum number of iterations for the ground segmentation model. |
+| `lidar_cluster_max_tolerance` | `double` | `0.5` | Maximum cluster tolerance in meters for extracting lidar cluster. |
+| `lidar_cluster_min_points` | `int` | `3` | The minimum number of points required to form a valid lidar cluster. |
+| `lidar_cluster_max_points` | `int` | `2000` | The maximum number of points allowed in a lidar cluster. |
+| `radar_cluster_max_tolerance` | `double` | `0.5` | Maximum cluster tolerance in meters for extracting radar cluster. |
+| `radar_cluster_min_points` | `int` | `1` | The minimum number of points required to form a valid radar cluster. |
+| `radar_cluster_max_points` | `int` | `10` | The maximum number of points allowed in a radar cluster. |
+| `reflector_radius` | `double` | `0.1` | The radius of the reflector in meters. |
+| `reflector_max_height` | `double` | `1.2` | The maximum height in meters of the reflector in meters. |
+| `max_matching_distance` | `double` | `1.0` | Maximum distance threshold in meters for matching lidar and radar. |
+| `max_initial_calibration_translation_error` | `double` | `1.0` | Maximum allowable translation error in meters in the calibration process. If this error exceeds the specified value, a warning message will appear in the console. |
+| `max_initial_calibration_rotation_error` | `double` | `45.0` | Maximum allowable rotation error in degrees in the calibration process. If this error exceeds the specified value, a warning message will appear in the console. |
+| `max_number_of_combination_samples` | `int` | `10000` | The maximum number of samples from combinations that are used for cross-validation during the calibration process. |
+
+## Requirements
+
+### Radar reflector
+
+The type of reflector shown in the image below is crucial for our calibration because it has a highly reliable and consistent response to radar waves. The triangular shape, often composed of three metal plates arranged in a prism form, ensures that the reflector returns signals in specific, predictable ways.
+
+It is recommended that the user mount the radar reflector on a tripod and ensure it remains stable and secure. Additionally, nothing should be attached above the radar reflector; it must be the highest object on the entire calibration target. Furthermore, make sure the height of the radar reflector does not exceed the `reflector_max_height` parameter.
+
+
+
+
+
+## Known issues/limitations
+
+- While extracting the background model, ensure that no reflector, person, or moving object is present in the calibration area.
+
+- The calibrator provides a button to delete any mismatched pairs (e.g., an object detected by both radar and lidar). However, some outliers may not be easily detectable by human eyes, leading to inaccurate results as the calibration proceeds even with these anomalies present. Future enhancements will aim to improve outlier detection, thereby refining the calibration accuracy.
+
+- The calibrator should be able to handle different lidar and radar sensors. So far, We calibrated the Velodyne VLS-128 lidar sensor, Pandar-40P lidar sensor, and ARS 408 radar sensor with good calibration results.
+
+## Pro tips/recommendations
+
+- During calibration, all radar reflectors and the radar itself must lie on the same plane. This requirement does not apply to the lidar.
+- Position the reflectors at various locations within the lidar's and radar's field of view (FOV). Additionally, ensure that the center of each radar reflector always faces the radar sensor, as illustrated in the image below.
+
+
+
+
diff --git a/sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.hpp b/calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.hpp
similarity index 99%
rename from sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.hpp
rename to calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.hpp
index fd44ee99..d7c9fd82 100644
--- a/sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.hpp
+++ b/calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -169,7 +169,6 @@ class ExtrinsicReflectorBasedCalibrator : public rclcpp::Node
double radar_background_model_leaf_size;
double max_calibration_range;
double background_model_timeout;
- double max_match_yaw_distance;
double min_foreground_distance; // needs to be about at least double the leaf size
double background_extraction_timeout;
double ransac_threshold;
diff --git a/sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/track.hpp b/calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/track.hpp
similarity index 95%
rename from sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/track.hpp
rename to calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/track.hpp
index d6a7a968..769278f7 100644
--- a/sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/track.hpp
+++ b/calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/track.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -16,8 +16,8 @@
#define MARKER_RADAR_LIDAR_CALIBRATOR__TRACK_HPP_
#include
+#include
#include
-#include
#include
#include
@@ -26,6 +26,8 @@
namespace marker_radar_lidar_calibrator
{
+using autoware::kalman_filter::KalmanFilter;
+
class Track
{
public:
diff --git a/sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/types.hpp b/calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/types.hpp
similarity index 98%
rename from sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/types.hpp
rename to calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/types.hpp
index a5700ad1..8caa0e93 100644
--- a/sensor/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/types.hpp
+++ b/calibrators/marker_radar_lidar_calibrator/include/marker_radar_lidar_calibrator/types.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/marker_radar_lidar_calibrator/launch/calibrator.launch.xml b/calibrators/marker_radar_lidar_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/marker_radar_lidar_calibrator/launch/calibrator.launch.xml
rename to calibrators/marker_radar_lidar_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/__init__.py b/calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/__init__.py
similarity index 100%
rename from sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/__init__.py
rename to calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/__init__.py
diff --git a/sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/calibrator_ui.py b/calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/calibrator_ui.py
similarity index 99%
rename from sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/calibrator_ui.py
rename to calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/calibrator_ui.py
index 3c8698b7..d2c2e5be 100644
--- a/sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/calibrator_ui.py
+++ b/calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/calibrator_ui.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/ros_interface.py b/calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/ros_interface.py
similarity index 99%
rename from sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/ros_interface.py
rename to calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/ros_interface.py
index e736c6a2..a0407c45 100644
--- a/sensor/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/ros_interface.py
+++ b/calibrators/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator/ros_interface.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/marker_radar_lidar_calibrator/package.xml b/calibrators/marker_radar_lidar_calibrator/package.xml
similarity index 93%
rename from sensor/marker_radar_lidar_calibrator/package.xml
rename to calibrators/marker_radar_lidar_calibrator/package.xml
index 3c4059b9..19f0bee2 100644
--- a/sensor/marker_radar_lidar_calibrator/package.xml
+++ b/calibrators/marker_radar_lidar_calibrator/package.xml
@@ -13,9 +13,10 @@
autoware_cmake
+ autoware_kalman_filter
+ autoware_universe_utilseigengeometry_msgs
- kalman_filterpcl_conversionspcl_rosradar_msgs
@@ -27,7 +28,6 @@
tf2_eigentf2_geometry_msgstf2_ros
- tier4_autoware_utilstier4_calibration_msgsvisualization_msgs
diff --git a/sensor/marker_radar_lidar_calibrator/rviz/default.rviz b/calibrators/marker_radar_lidar_calibrator/rviz/default.rviz
similarity index 100%
rename from sensor/marker_radar_lidar_calibrator/rviz/default.rviz
rename to calibrators/marker_radar_lidar_calibrator/rviz/default.rviz
diff --git a/sensor/marker_radar_lidar_calibrator/scripts/calibrator_ui_node.py b/calibrators/marker_radar_lidar_calibrator/scripts/calibrator_ui_node.py
similarity index 97%
rename from sensor/marker_radar_lidar_calibrator/scripts/calibrator_ui_node.py
rename to calibrators/marker_radar_lidar_calibrator/scripts/calibrator_ui_node.py
index 7fb8c626..1c18b179 100755
--- a/sensor/marker_radar_lidar_calibrator/scripts/calibrator_ui_node.py
+++ b/calibrators/marker_radar_lidar_calibrator/scripts/calibrator_ui_node.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/marker_radar_lidar_calibrator/scripts/metrics_plotter_node.py b/calibrators/marker_radar_lidar_calibrator/scripts/metrics_plotter_node.py
similarity index 96%
rename from sensor/marker_radar_lidar_calibrator/scripts/metrics_plotter_node.py
rename to calibrators/marker_radar_lidar_calibrator/scripts/metrics_plotter_node.py
index dc0e9be2..eeeb92fb 100755
--- a/sensor/marker_radar_lidar_calibrator/scripts/metrics_plotter_node.py
+++ b/calibrators/marker_radar_lidar_calibrator/scripts/metrics_plotter_node.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -71,6 +71,10 @@ def plot_label_and_set_xy_lim(self):
self.subplot3.set_xlabel("number of tracks")
self.subplot3.set_ylabel("yaw error [deg]")
+ max_ylim0 = (
+ max(self.crossval_distance_error_list) if self.crossval_distance_error_list else 5
+ )
+ max_ylim1 = max(self.crossval_yaw_error_list) if self.crossval_yaw_error_list else 1
max_ylim2 = (
max(self.calibration_distance_error_list) if self.calibration_distance_error_list else 5
)
@@ -92,6 +96,8 @@ def plot_label_and_set_xy_lim(self):
self.subplot2.set_xlim(2.9, avg_xlim + 0.3)
self.subplot3.set_xlim(2.9, avg_xlim + 0.3)
+ self.subplot0.set_ylim(0, max_ylim0 + 5)
+ self.subplot1.set_ylim(0, max_ylim1 + 0.1)
self.subplot2.set_ylim(0, max_ylim2 + 5)
self.subplot3.set_ylim(0, max_ylim3 + 0.1)
diff --git a/sensor/marker_radar_lidar_calibrator/src/main.cpp b/calibrators/marker_radar_lidar_calibrator/src/main.cpp
similarity index 97%
rename from sensor/marker_radar_lidar_calibrator/src/main.cpp
rename to calibrators/marker_radar_lidar_calibrator/src/main.cpp
index 65ef82a9..19fa49e9 100644
--- a/sensor/marker_radar_lidar_calibrator/src/main.cpp
+++ b/calibrators/marker_radar_lidar_calibrator/src/main.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/marker_radar_lidar_calibrator/src/marker_radar_lidar_calibrator.cpp b/calibrators/marker_radar_lidar_calibrator/src/marker_radar_lidar_calibrator.cpp
similarity index 99%
rename from sensor/marker_radar_lidar_calibrator/src/marker_radar_lidar_calibrator.cpp
rename to calibrators/marker_radar_lidar_calibrator/src/marker_radar_lidar_calibrator.cpp
index 0c81978c..d942c7cf 100644
--- a/sensor/marker_radar_lidar_calibrator/src/marker_radar_lidar_calibrator.cpp
+++ b/calibrators/marker_radar_lidar_calibrator/src/marker_radar_lidar_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+#include
#include
#include
-#include
#include
#include
@@ -89,7 +89,6 @@ rcl_interfaces::msg::SetParametersResult ExtrinsicReflectorBasedCalibrator::para
UPDATE_PARAM(p, max_calibration_range);
UPDATE_PARAM(p, background_model_timeout);
- UPDATE_PARAM(p, max_match_yaw_distance);
UPDATE_PARAM(p, min_foreground_distance);
UPDATE_PARAM(p, background_extraction_timeout);
UPDATE_PARAM(p, ransac_threshold);
@@ -218,8 +217,6 @@ ExtrinsicReflectorBasedCalibrator::ExtrinsicReflectorBasedCalibrator(
lidar_process_cov, radar_process_cov, lidar_convergence_thresh, radar_convergence_thresh,
timeout_thresh, parameters_.max_matching_distance);
- markers_pub_ = this->create_publisher("markers", 10);
-
lidar_background_pub_ =
this->create_publisher("lidar_background_pointcloud", 10);
lidar_foreground_pub_ =
@@ -669,6 +666,11 @@ std::vector ExtrinsicReflectorBasedCalibrator::extractReflector
background_msg.header = radar_header_;
radar_background_pub_->publish(background_msg);
+ sensor_msgs::msg::PointCloud2 foreground_msg;
+ pcl::toROSMsg(*radar_pointcloud_ptr, foreground_msg);
+ foreground_msg.header = radar_header_;
+ radar_foreground_pub_->publish(foreground_msg);
+
return detections;
}
@@ -1261,7 +1263,7 @@ void ExtrinsicReflectorBasedCalibrator::estimateTransformation(
full_radar_to_radar_parallel_transformation.cast());
// Check that it is actually a 2D transformation
- auto calibrated_2d_radar_to_radar_parallel_rpy = tier4_autoware_utils::getRPY(
+ auto calibrated_2d_radar_to_radar_parallel_rpy = autoware::universe_utils::getRPY(
tf2::toMsg(calibrated_2d_radar_to_radar_parallel_transformation).orientation);
double calibrated_2d_radar_to_radar_parallel_z =
calibrated_2d_radar_to_radar_parallel_transformation.translation().z();
@@ -1560,7 +1562,7 @@ void ExtrinsicReflectorBasedCalibrator::visualizationMarkers(
marker.scale.y = parameters_.reflector_radius;
marker.scale.z = parameters_.reflector_radius;
marker.color.a = 0.6;
- marker.color.r = 1.0;
+ marker.color.r = 0.0;
marker.color.g = 0.0;
marker.color.b = 1.0;
lidar_detections_marker_array.markers.push_back(marker);
diff --git a/sensor/marker_radar_lidar_calibrator/src/track.cpp b/calibrators/marker_radar_lidar_calibrator/src/track.cpp
similarity index 98%
rename from sensor/marker_radar_lidar_calibrator/src/track.cpp
rename to calibrators/marker_radar_lidar_calibrator/src/track.cpp
index f2ce0a62..5e98cb0e 100644
--- a/sensor/marker_radar_lidar_calibrator/src/track.cpp
+++ b/calibrators/marker_radar_lidar_calibrator/src/track.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
// limitations under the License.
#include
-#include
+#include
#include
#include
diff --git a/sensor/tag_based_pnp_calibrator/CMakeLists.txt b/calibrators/tag_based_pnp_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/tag_based_pnp_calibrator/CMakeLists.txt
rename to calibrators/tag_based_pnp_calibrator/CMakeLists.txt
diff --git a/calibrators/tag_based_pnp_calibrator/README.md b/calibrators/tag_based_pnp_calibrator/README.md
new file mode 100644
index 00000000..a9a26290
--- /dev/null
+++ b/calibrators/tag_based_pnp_calibrator/README.md
@@ -0,0 +1,142 @@
+# tag_based_pnp_calibrator
+
+A tutorial for this calibrator can be found [here](../../docs/tutorials/tag_based_pnp_calibrator.md).
+
+## Purpose
+
+The package `tag_based_pnp_calibrator` performs extrinsic calibration between camera and 3d lidar sensors used in autonomous driving and robotics.
+
+Note that the 3d lidar should have a resolution that is high enough to detect the lidartag [1] or be among the [compatible](https://github.com/tier4/LiDARTag/tree/humble/config) models.
+
+## Inner-workings / Algorithms
+
+The `tag_based_pnp_calibrator` package utilizes the PnP (Perspective-n-Point) algorithm, a computer vision technique that is used to estimate the transformation between a set of correspondences of 2d and 3d points (in this case 2d points come from the camera and 3d points come from the lidar). This package also makes use of the `apriltag_ros` and `lidartag` packages, which are executed automatically by this package's launcher files.
+
+The `apriltag_ros` package detects `apriltag` markers from an image and outputs the detection results. Conversely, the `lidartag` package detects `lidartag` markers and outputs its detection results. `apriltag` and `lidartag` differ in that in every `lidartag` there is an `apriltag` payload, but the opposite is not guaranteed. It follows that for the same physical marker, the detection's sizes are different, which is compensated during calibration.
+
+The `tag_based_pnp_calibrator` utilizes the detections from both the `apriltag_ros` and `lidartag` packages, employing a Kalman filter to monitor these detections. If the detections converge, the calibrator applies the SQPnP [2] algorithm provided by OpenCV to estimate the transformation between the image points from the `apriltag` markers and the object points from the `lidartag` markers, which is effectively the transformation from camera to lidar.
+
+### Diagram
+
+The following figure presents a diagram of the nodes, launchers and relevant methods involved in the calibration process:
+
+
+
+## ROS Interfaces
+
+### Input
+
+| Name | Type | Description |
+| --------------------------- | -------------------------------------------- | -------------------------------------------------------- |
+| `camera_info` | `sensor_msgs::msg::CameraInfo` | Intrinsic parameters of the camera. |
+| `lidartag/detections_array` | `lidartag_msgs::msg::LidarTagDetectionArray` | Lidartag detections published by `lidartag` package. |
+| `apriltag/detection_array` | `apriltag_msgs::msg::AprilTagDetectionArray` | Apriltag detections published by `apriltag_ros` package. |
+
+### Output
+
+| Name | Type | Description |
+| ---------------------- | ------------------------------------------------ | ----------------------------------------- |
+| `filtered_projections` | `visualization_msgs::msg::MarkerArray` | Calibration markers for visualization. |
+| `calibration_points` | `tier4_calibration_msgs::msg::CalibrationPoints` | Corresponding points used in calibration. |
+
+### Services
+
+| Name | Type | Description |
+| ----------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `extrinsic_calibration` | `tier4_calibration_msgs::` `srv::ExtrinsicCalibrator` | Generic calibration service. The call is blocked until the calibration process finishes. |
+
+## Parameters
+
+### Core Parameters
+
+| Name | Type | Default Value | Description |
+| --------------------------------------------- | --------------------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `calib_rate` | `double` | `10.0` | The frequency in Hz at which the calibration callback is invoked. |
+| `base_frame` | `std::string` | `base_link` | The `base_frame` is used for visualization. |
+| `min_tag_size` | `double` | `0.6` | The size of the apriltag in meters (payload). |
+| `max_tag_distance` | `double` | `20.0` | Maximum allowed distance in meters from the camera to the tags. |
+| `max_allowed_homography_error` | `double` | `0.5` | Apriltag detections are discarded if the homography error is larger than `max_allowed_homography_error`. |
+| `use_receive_time` | `bool` | `false` | Flag to determine whether to use the receive time instead of the header timestamps. |
+| `use_rectified_image` | `bool` | `true` | Flag to determine whether the input images are treated as rectified or not. |
+| `calibration_crossvalidation_training_ratio` | `double` | `0.7` | The ratio of data used for training versus validation during the calibration's cross-validation process. |
+| `calibration_convergence_min_pairs` | `int` | `9` | The minimum number of apriltag and lidartag detection pairs required to consider the calibration process as potentially converged. |
+| `calibration_convergence_min_area_percentage` | `double` | `0.005` | The minimum ratio of the area that needs to be covered by detections. |
+| `min_pnp_points` | `int` | `8` | The minimum number of points required for the Perspective-n-Point problem used in calibration to solve the pose estimation. |
+| `min_convergence_time` | `double` | `6.0` | Minimum time in seconds required for the active hypotheses to be considered as converged. |
+| `max_no_observation_time` | `double` | `3.0` | Hypotheses can timeout when a new observation arrives and the time difference (dt) in seconds exceeds the `max_no_observation_time` threshold for the same tag ID, or when the time difference in seconds between the latest observation and the earlier observation surpasses the threshold. |
+| `new_hypothesis_distance` | `double` | `1.5` | A new hypothesis is only created from a detection, when its distance with other hypotheses is larger than this threshold (in meters). |
+| `tag_ids` | `std::vector` | `[0, 1, 2, 3, 4, 5]` | The list of tag IDs that are used in the calibration process. |
+| `tag_sizes` | `std::vector` | `[0.6, 0.6, 0.6, 0.6, 0.6, 0.6]` | Payload sizes in meters corresponding to the tag IDs defined in `tag_ids`. |
+| `lidartag_max_convergence_translation` | `double` | `0.05` | Threshold in meters for the translation component of the Kalman filter's covariance matrix to consider the hypothesis as converged. |
+| `lidartag_max_convergence_translation_dot` | `double` | `0.03` | Threshold in meters/second for the velocity component of the Kalman filter's covariance matrix to consider the hypothesis as converged. |
+| `lidartag_max_convergence_rotation` | `double` | `3.0` | Threshold in degrees for the rotation component of the Kalman filter's covariance matrix to consider the hypothesis as converged. |
+| `lidartag_max_convergence_rotation_dot` | `double` | `2.5` | Threshold in degrees/second for the angular velocity component of the Kalman filter's covariance matrix to consider the hypothesis as converged. |
+| `lidartag_new_hypothesis_translation` | `double` | `0.1` | Translation threshold in meters for generating a new hypothesis in lidartag tracking. |
+| `lidartag_new_hypothesis_rotation` | `double` | `15.0` | Rotation threshold in degrees for generating a new hypothesis in lidartag tracking. |
+| `lidartag_measurement_noise_translation` | `double` | `0.05` | Lidartag's measurement noise (translation) in meters used in the Kalman filter's measurement noise covariance matrix (R). |
+| `lidartag_measurement_noise_rotation` | `double` | `5.0` | Lidartag's measurement noise (rotation) in degrees used in the Kalman filter's measurement noise covariance matrix (R). |
+| `lidartag_process_noise_translation` | `double` | `0.01` | Lidartag's process noise (translation) in meters used in the Kalman filter's process noise covariance matrix (Q). |
+| `lidartag_process_noise_translation_dot` | `double` | `0.001` | Lidartag's process noise (translation velocity) in meters/second used in the Kalman filter's process noise covariance matrix (Q). |
+| `lidartag_process_noise_rotation` | `double` | `1.0` | Lidartag's process noise (rotation) in degrees used in the Kalman filter's process noise covariance matrix (Q). |
+| `lidartag_process_noise_rotation_dot` | `double` | `0.1` | Lidartag's process noise (rotation velocity) in degrees/second used in the Kalman filter's process noise covariance matrix (Q). |
+| `apriltag_max_convergence_translation` | `double` | `2.0` | Maximum threshold in pixels for corners Kalman filter's covariance matrix to consider the hypothesis as converged. |
+| `apriltag_new_hypothesis_translation` | `double` | `20.0` | Translation threshold in pixels for generating a new hypothesis in apriltag tracking. |
+| `apriltag_measurement_noise_translation` | `double` | `0.2` | Apriltag's measurement noise (translation) in meters used in the Kalman filter's measurement noise covariance matrix (R). |
+| `apriltag_process_noise_translation` | `double` | `0.02` | Apriltag's process noise (translation) in meters used in the Kalman filter's process noise covariance matrix (Q). |
+
+## Requirements
+
+### lidartag
+
+To perform camera-lidar calibration using this tool, it is necessary to prepare lidartags and lidars with intensity measures. To ensure that no object obstructs the tag detection and to achieve the most stable detection possible, it is highly recommended to also prepare fixed mounts for these tags, as shown below.
+
+Note that the lidartags we used have a size of 0.8 meters (edge size). This means their apriltag payload is 0.6 meters (black frame's edge size). We have also tried with lidartags with smaller sizes (e.g., edge size of 0.6 meters), but to use them the user is required to set several parameters by himself.
+
+
+
+
+
+## Calibration process
+
+A complete example with real data is provided in our [tutorial](../../docs/tutorials/tag_based_pnp_calibrator.md), so we recommend users interested in this tools to get hands-on-experience directly with that example. Nevertheless, the calibration process consists of the following steps:
+
+- Place the available tags within the field-of-view of the sensors (see the [Pro tips/recommendations](#pro-tipsrecommendations) for more information).
+- Ensure that both sensors detect the tags, and wait until the detections converge.
+- Once the detections are added to the calibration data, move the tags to a new location, making sure to fulfill the `new_hypothesis_distance` criteria.
+- If needed, just after moving the tag, stop its oscillations with your hand.
+- Repeat the process until `calibration_convergence_min_pairs` pairs have been obtained and the calibration process finishes.
+
+## Known issues/limitations
+
+- The tool uses a basic OpenCV camera model for calibration.
+- Only lidars with an intensity channel can be used (lidartag requirement).
+
+## Pro tips/recommendations
+
+- During calibration, ensure that the lidar scan covers the tag similar to the first example shown in the image below. However, if the tag resolution is low, as in the second example, and the lidar detects the tag, it may still be acceptable, yet should be avoided when possible. The third example demonstrates a scenario where the lidar scan fails to cover the tag, resulting in the inability to detect the lidartag.
+
+
+
+
+
+- It is highly recommended to place the tag perpendicular to the lidar as shown in the following image:
+
+
+
+
+
+- As in the previous image, it is is important to spread the tag samples throughout the calibration area, making sure it covers the field-of-view of the camera, and encompasses multiple distances to minimize the error incurred due to imperfect camera models.
+
+## Regarding the reprojection error and its relation to the calibration error
+
+This method formulates camera-lidar as an optimization problem that minimizes the reprojection error between camera and lidar points. Achieving perfect reprojection error would imply a perfect calibration (pose between sensors), but that can only be achieved when both detectors and the camera model are also perfect. If this is not the case, even though the reprojection errors acts as a proxy for the real 3d pose error, there is no direct correspondence / translation.
+
+In our experiments using lenses with an horizontal field-of-view between 30 and 90 degrees, up to 2 radial distortion coefficients, and HD resolution, we can achieve sub pixel reprojection error upon convergence.
+
+For higher resolution cameras, usually the reprojection error increases almost linearly with the resolution, indicating that the bottleneck lies between the lidar detection accuracy and the lens model. When using wider lenses, more complex camera models are needed. If this requisite is not met, the reprojection error will likely not converge to an adequate value or may even cause the optimizer to fail.
+
+## References
+
+[1] Jiunn-Kai (Bruce) Huang, Shoutian Wang, Maani Ghaffari, and Jessy W. Grizzle, "LiDARTag: A Real-Time Fiducial Tag System for Point Clouds," in IEEE Robotics and Automation Letters. Volume: 6, Issue: 3, July 2021.
+
+[2] G. Terzakis and M. Lourakis, "A Consistently Fast and Globally Optimal Solution to the Perspective-n-Point Problem" in ECCV 2020. Lecture Notes in Computer Science, vol 12346.
diff --git a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/brute_force_matcher.hpp b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/brute_force_matcher.hpp
similarity index 97%
rename from sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/brute_force_matcher.hpp
rename to calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/brute_force_matcher.hpp
index 53c4a1bd..c4a5e4bd 100644
--- a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/brute_force_matcher.hpp
+++ b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/brute_force_matcher.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/calibration_estimator.hpp b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/calibration_estimator.hpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/calibration_estimator.hpp
rename to calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/calibration_estimator.hpp
index 8447d96a..4bc3c596 100644
--- a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/calibration_estimator.hpp
+++ b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/calibration_estimator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_based_pnp_calibrator.hpp b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_based_pnp_calibrator.hpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_based_pnp_calibrator.hpp
rename to calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_based_pnp_calibrator.hpp
index aa266f9e..b21eb4c1 100644
--- a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_based_pnp_calibrator.hpp
+++ b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_based_pnp_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_calibrator_visualizer.hpp b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_calibrator_visualizer.hpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_calibrator_visualizer.hpp
rename to calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_calibrator_visualizer.hpp
index b3a376ce..e55cc515 100644
--- a/sensor/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_calibrator_visualizer.hpp
+++ b/calibrators/tag_based_pnp_calibrator/include/tag_based_pnp_calibrator/tag_calibrator_visualizer.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/launch/apriltag_16h5.launch.py b/calibrators/tag_based_pnp_calibrator/launch/apriltag_16h5.launch.py
similarity index 100%
rename from sensor/tag_based_pnp_calibrator/launch/apriltag_16h5.launch.py
rename to calibrators/tag_based_pnp_calibrator/launch/apriltag_16h5.launch.py
diff --git a/sensor/tag_based_pnp_calibrator/launch/calibrator.launch.xml b/calibrators/tag_based_pnp_calibrator/launch/calibrator.launch.xml
similarity index 86%
rename from sensor/tag_based_pnp_calibrator/launch/calibrator.launch.xml
rename to calibrators/tag_based_pnp_calibrator/launch/calibrator.launch.xml
index 4cec786a..4af18237 100644
--- a/sensor/tag_based_pnp_calibrator/launch/calibrator.launch.xml
+++ b/calibrators/tag_based_pnp_calibrator/launch/calibrator.launch.xml
@@ -3,16 +3,34 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
diff --git a/sensor/tag_based_pnp_calibrator/package.xml b/calibrators/tag_based_pnp_calibrator/package.xml
similarity index 96%
rename from sensor/tag_based_pnp_calibrator/package.xml
rename to calibrators/tag_based_pnp_calibrator/package.xml
index dff93dcf..8a0e04a5 100644
--- a/sensor/tag_based_pnp_calibrator/package.xml
+++ b/calibrators/tag_based_pnp_calibrator/package.xml
@@ -13,6 +13,7 @@
autoware_cmakeapriltag_msgs
+ autoware_universe_utilscv_bridgegeometry_msgsimage_geometry
@@ -29,7 +30,6 @@
tf2_eigentf2_geometry_msgstf2_ros
- tier4_autoware_utilstier4_calibration_msgstier4_tag_utilsvisualization_msgs
diff --git a/sensor/tag_based_pnp_calibrator/rviz/default_profile.rviz b/calibrators/tag_based_pnp_calibrator/rviz/default_profile.rviz
similarity index 100%
rename from sensor/tag_based_pnp_calibrator/rviz/default_profile.rviz
rename to calibrators/tag_based_pnp_calibrator/rviz/default_profile.rviz
diff --git a/sensor/tag_based_pnp_calibrator/src/brute_force_matcher.cpp b/calibrators/tag_based_pnp_calibrator/src/brute_force_matcher.cpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/src/brute_force_matcher.cpp
rename to calibrators/tag_based_pnp_calibrator/src/brute_force_matcher.cpp
index 16c6d415..dc4fda5f 100644
--- a/sensor/tag_based_pnp_calibrator/src/brute_force_matcher.cpp
+++ b/calibrators/tag_based_pnp_calibrator/src/brute_force_matcher.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/src/calibration_estimator.cpp b/calibrators/tag_based_pnp_calibrator/src/calibration_estimator.cpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/src/calibration_estimator.cpp
rename to calibrators/tag_based_pnp_calibrator/src/calibration_estimator.cpp
index ca6e4be6..044b40c9 100644
--- a/sensor/tag_based_pnp_calibrator/src/calibration_estimator.cpp
+++ b/calibrators/tag_based_pnp_calibrator/src/calibration_estimator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/src/main.cpp b/calibrators/tag_based_pnp_calibrator/src/main.cpp
similarity index 97%
rename from sensor/tag_based_pnp_calibrator/src/main.cpp
rename to calibrators/tag_based_pnp_calibrator/src/main.cpp
index 9be49c1e..8564de47 100644
--- a/sensor/tag_based_pnp_calibrator/src/main.cpp
+++ b/calibrators/tag_based_pnp_calibrator/src/main.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/src/tag_based_pnp_calibrator.cpp b/calibrators/tag_based_pnp_calibrator/src/tag_based_pnp_calibrator.cpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/src/tag_based_pnp_calibrator.cpp
rename to calibrators/tag_based_pnp_calibrator/src/tag_based_pnp_calibrator.cpp
index b46997ad..bc6a383a 100644
--- a/sensor/tag_based_pnp_calibrator/src/tag_based_pnp_calibrator.cpp
+++ b/calibrators/tag_based_pnp_calibrator/src/tag_based_pnp_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_pnp_calibrator/src/tag_calibrator_visualizer.cpp b/calibrators/tag_based_pnp_calibrator/src/tag_calibrator_visualizer.cpp
similarity index 99%
rename from sensor/tag_based_pnp_calibrator/src/tag_calibrator_visualizer.cpp
rename to calibrators/tag_based_pnp_calibrator/src/tag_calibrator_visualizer.cpp
index fbde860b..32d09924 100644
--- a/sensor/tag_based_pnp_calibrator/src/tag_calibrator_visualizer.cpp
+++ b/calibrators/tag_based_pnp_calibrator/src/tag_calibrator_visualizer.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/CMakeLists.txt b/calibrators/tag_based_sfm_calibrator/CMakeLists.txt
similarity index 100%
rename from sensor/tag_based_sfm_calibrator/CMakeLists.txt
rename to calibrators/tag_based_sfm_calibrator/CMakeLists.txt
diff --git a/calibrators/tag_based_sfm_calibrator/README.md b/calibrators/tag_based_sfm_calibrator/README.md
new file mode 100644
index 00000000..7d18300c
--- /dev/null
+++ b/calibrators/tag_based_sfm_calibrator/README.md
@@ -0,0 +1,243 @@
+# tag_based_sfm_calibrator
+
+A tutorial for this calibrator can be found [here](../../docs/tutorials/tag_based_sfm_calibrator.md).
+
+## 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](https://github.com/tier4/LiDARTag))
+
+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_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_calibration_msgs::` `srv::FilesListSrv` | Provides a list of external camera images' files for each `scene` |
+| `add_calibration_sensor_` `detections_to_new_scene` | `tier4_calibration_msgs::srv::Empty` | Creates a new `scene` from the latest detections received by the node |
+| `load_external_camera_intrinsics` | `tier4_calibration_msgs::srv::FilesSrv` | Provides a file containing previously computed external camera intrinsics |
+| `save_external_camera_intrinsics` | `tier4_calibration_msgs::srv::FilesSrv` | Provides a path to save the computed external camera intrinsics |
+| `calibrate_external_camera_intrinsics` | `tier4_calibration_msgs::srv::FilesSrv` | Provides a list of files of external camera images to perform intrinsic calibration for the external camera |
+| `process_scenes` | `tier4_calibration_msgs::srv::Empty` | Processes all the obtained `scenes`, mainly applying the tag detector to the external images |
+| `calibrate` | `tier4_calibration_msgs::srv::Empty` | Uses the processed `scenes` to perform `bundling adjustment` optimization |
+| `load_database` | `tier4_calibration_msgs::srv::FilesSrv` | For debugging purposes. Loads a processed database of `scenes` |
+| `save_database` | `tier4_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` | | List of the calibration lidars' frames |
+| `calibration_camera_frames` | `std::vector` | | 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` | | 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` | | 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` | | 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 |
+| `left_wheel_tag_id` | `int` | | The left wheel tag ID |
+| `right_wheel_tag_id` | `int` | | The right wheel tag ID |
+| `ba.optimize_intrinsics` | `bool` | | Flag to optimize the external camera intrinsics during bundle optimization |
+| `ba.share_intrinsics` | `bool` | | Flag to share intrinsics between different external camera images |
+| `ba.force_shared_ground_plane` | `bool` | | Flag to force the use of a shared ground plane model among the ground tags during bundle optimization |
+| `ba.virtual_lidar_f` | `double` | | The focal length of the virtual pinhole model for lidars used in the bundle adjustment optimization |
+| `ba.calibration_camera_` `optimization_weight` | `double` | | The weight of the camera calibration term in the bundle adjustment optimization |
+| `ba.calibration_lidar_` `optimization_weight` | `double` | | The weight of the lidar calibration term in the bundle adjustment optimization |
+| `ba.external_camera_` `optimization_weight` | `double` | | The weight of the external camera calibration term in the bundle adjustment optimization |
+| `ba.fixed_ground_plane_model` | `bool` | `false` | Flag to fix the ground plane model during the optimization using the values from the initial calibration |
+| `initial_intrinsic_calibration.` `board_type` | `std::string` | | The type of calibration board used for the initial intrinsic calibration for the external camera. Valid values are `apriltag` and `chessboard` |
+| `initial_intrinsic_calibration.` `tangent_distortion` | `bool` | | Flag to enable tangent distortion in the initial intrinsic calibration for the external camera |
+| `initial_intrinsic_calibration.` `radial_distortion_coeffs` | `int` | | The number of radial distortion coefficients used in the initial intrinsic calibration for the external camera |
+| `initial_intrinsic_` `calibration.debug` | `bool` | | Flag to enable debug mode in the initial the intrinsic calibration for the external camera |
+| `initial_intrinsic_` `calibration.tag.family` | `std::string` | | The family name of the tags used in the initial intrinsic calibration for the external camera |
+| `initial_intrinsic_` `calibration.` `tag.rows` | `int` | | The number of rows in the tags used in the initial intrinsic calibration for the external camera |
+| `initial_intrinsic_` `calibration.tag.cols` | `int` | | The number of columns in the tags used in the initial intrinsic calibration for the external camera |
+| `initial_intrinsic_` `calibration.tag.size` | `double` | | The size of the tags used in the initial intrinsic calibration in meters for the external camera |
+| `initial_intrinsic_` `calibration.tag.spacing` | `double` | | The spacing between tags used in the initial intrinsic calibration in meters for the external camera |
+| `initial_intrinsic_` `calibration.tag.ids` | `std::vector` | `[0]` | The tag IDs used in the initial intrinsic calibration for the external camera. Only used when `board_type` equals `apriltag` |
+| `initial_intrinsic_` `calibration.board_cols` | `int` | | The number of columns in the calibration board used for the initial intrinsic calibration for the external camera. Only used when `board_type` equals `chessboard` |
+| `initial_intrinsic_` `calibration.board_rows` | `int` | | The number of rows in the calibration board used for the initial intrinsic calibration for the external camera. Only used when `board_type` equals `chessboard` |
+| `apriltag.max_hamming` | `int` | | The maximum allowed Hamming distance ins bits for apriltag detection |
+| `apriltag.min_margin` | `double` | | The minimum required margin in pixels for apriltag detection |
+| `apriltag.max_out_of_plane_angle` | `double` | | The maximum allowed out-of-plane angle in degrees for apriltag detection |
+| `apriltag.max_reprojection_error` | `double` | | The maximum allowed reprojection error in pixels for apriltag detection |
+| `apriltag.max_homography_error` | `double` | | The maximum allowed homography error for apriltag detection |
+| `apriltag.quad_decimate` | `double` | | The decimation factor for quad detection in apriltag detection |
+| `apriltag.quad_sigma` | `double` | | The sigma value for quad detection in apriltag detection |
+| `apriltag.nthreads` | `int` | | The number of threads to use for apriltag detection |
+| `apriltag.debug` | `bool` | | Flag to enable debug mode in apriltag detection |
+| `apriltag.refine_edges` | `bool` | | Flag to enable edge refinement in apriltag detection |
+
+## Requirements
+
+The following figure presents the elements involved in the calibration process:
+
+
+
+### Waypoint tag
+
+Waypoint tags are meant to be detected by both lidars and cameras.
+Since lidar can not detect the tags if they are in the same plane as other elements, an additional structure is needed to allow the detector algorithm to segment it from other objects (see Figure 2).
+
+Considerations:
+
+- Among all the tags in the environment, waypoints are the only ones that can be moved during experiments (please read the provided tutorial and the concept of scenes).
+- The orientation of the waypoint tags should be so that the line that connects the calibration sensors and the waypoint tag is perpendicular to the waypoint tag plane. This is recommended since lidartag detection presents worse performance when this is not the case (more than the detector, it is a limitation of most lidars).
+- We so far have used 800mmx800mm (complete side lengths, as opposed to the inner apriltag payload) waypoints, and have worked well for most lidars/configurations in our projects.
+ There should be at least one waypoint tag no matter the desired calibration type. However, in practice, the more waypoint tags (tags that the calibration sensors can detect) the faster the calibration process becomes.
+
+### Wheel tag
+
+Wheel tags are what allow us to find the `base_link` via solving the bundle adjustment problem.
+
+Considerations:
+
+- They usually can not be detected by the calibration sensors (instead they are detected by the external camera).
+- Since the number of images that contain wheel tags is expected to be low, it is convenient to use grids of individual tags to increase the number of features (tag corners) corresponding to the wheels. An example of a 2x2 tag is presented in Figure 3.
+- Since the wheel tags determine the base link, their center should coincide with the axle as much as possible (at least in the x-axis seen from the `base_link`).
+
+### Ground tag
+
+Ground tags are essential during the calibration of the `base_link` since it defines the plane that the `base_link` lives in (an example is presented in Figure 4).
+
+Considerations:
+
+- The surface (ground) in which the vehicle and the ground tags are placed needs to be as flat as possible (plane).
+- For this particular tag, the width of the tag is relevant. If it can not be assumed to be null, the final `base_link` pose needs to be adjusted manually manually. E.g., if the pose from `base_link` to lidar is `z=1m` and the tag width is 1cm, the real pose would be `z=1.01m`.
+- The ground tags can be printed using normal paper and then attached via tape to the floor. The user needs to be careful not to move them during the experiment (in particular since it is very easy to step on them).
+- The ground tags can be laminated for reuse, but the reflections caused by it can make it difficult or impossible to perform detection.
+
+### Auxiliary tag
+
+Auxiliary tags are tags that do not have restrictions on their placement and use and were added to improve the observation distribution in the bundle adjustment graph. If it were not for the auxiliary tags, most of the tags would be on a single plane, save a few observations corresponding to the waypoints and the wheel tags.
+
+Considerations:
+
+- It is recommended to place them in positions and orientations without sufficient samples otherwise. Good candidates are walls, for which an example is presented in Figure 5.
+
+### External camera
+
+The role of the external camera is to connect the sensors and their detections creating the graph required for bundle adjustment.
+
+Considerations:
+
+- The camera must behave like a pinhole + distortion model. That is to say, the lenses must be "fixed" during the experiment.
+- The highest "real" resolution the better. So far we have tried with Nikon DSLRs (half frame) with moving and fixed lenses, and a simple point-and-shot camera.
+- In the [pro-tips / recommendations](#pro-tipsrecommendations) section, more suggestions regarding the camera settings are provided.
+
+### Initial (external) camera intrinsics calibration board
+
+To use the external camera in bundle adjustment, it is necessary to know, to a certain degree, its intrinsics.
+Any intrinsic calibration board that can be used for this purpose is acceptable, but circle-patterned chess boards and apriltags are supported directly by this tool. If you do not have these boards, you will need to calibrate your camera independently and provide directly the camera intrinsics.
+
+
+
+
+
+
+
+
+
+
Figure 2. Waypoint tag
+
Figure 3. Wheel tag
+
Figure 4. Ground tag
+
Figure 5. Auxiliar tag
+
+
+
+## Calibration process
+
+A complete example with real data is provided in our [tutorial](../../docs/tutorials/tag_based_sfm_calibrator.md), so we recommend users interested in this tools to get hands-on-experience directly with that example. Nevertheless, the calibration process consists of the following steps:
+
+- External camera intrinsic calibration. This can be done directly with this tool if you have either apriltags or dot boards.
+- Place waypoint tags in positions where the calibrations can detect them accurately.
+- Obtain detections with the calibrations sensors (through the UI).
+- Using the external camera, obtain samples of the environment, taking care to avoid motion blur. The user should focus on connecting the calibrator sensors by taking photos containing multiple waypoints, ot at least photos that contain one waypoints and multiple other tags.
+- Repeat N scenes (this depend on the users criteria and availability of waypoints).
+- Process the scenes (done through the UI).
+- Start the calibration process /graph optimization (done through the UI).
+
+## Known issues/limitations
+
+- Our version of lidartag only supports the family `16h5`.
+- Our codebase only supports apriltag detections for `16h5` and `36h11`.
+- Ground tags are assumed to have no width. If that is not the case, you can directly compensate the width in the resulting extrinsics (basically just add the width to the z-component of the extrinsics).
+- We only use 2 wheel tags. The quality of the calibration could improve, mainly in the yaw component, if we were to use tags in the four wheels.
+
+## Pro tips/recommendations
+
+- If the `base_link` seems flipped in yaw by 180 degrees, it is probably because you mistook the left and right wheel tags.
+- Regarding the operation of the external camera:
+ - For an optimal depth of field, use the highest f-number possible of the camera and focus the lens to infinity.
+ - Prefer fixed lenses and do not forget to turn off auto zoom.
+ - One of the biggest concerns is motion blur when using the external camera. Since a high f-number is recommended, instead of increasing the exposure, prefer using a higher ISO or just under-exposed images.
+ - Images taken from the external cameras should have as many possible detections in each image. The absolute minimum is 2, but under 3 are discarded.
+ - Detections from the external camera should, whenever possible, have the least amount of out-of-plane rotation. This is due to how the pose estimation gets distorted in extreme cases.
+ - The sampling of the scene by the external camera should focus on the waypoints and wheel tags whenever possible. In terms of usefulness for calibration, images that contain both waypoints and wheel tags are highly coveted. This is due to how they form the closest possible connection between the calibration sensors and the wheels.
+
+## References/External links
+
+[1] Jiunn-Kai (Bruce) Huang, Shoutian Wang, Maani Ghaffari, and Jessy W. Grizzle, "LiDARTag: A Real-Time Fiducial Tag System for Point Clouds," in IEEE Robotics and Automation Letters. Volume: 6, Issue: 3, July 2021.
diff --git a/sensor/tag_based_sfm_calibrator/config/omiya_calibration_room_2023.param.yaml b/calibrators/tag_based_sfm_calibrator/config/omiya_calibration_room_2023.param.yaml
similarity index 100%
rename from sensor/tag_based_sfm_calibrator/config/omiya_calibration_room_2023.param.yaml
rename to calibrators/tag_based_sfm_calibrator/config/omiya_calibration_room_2023.param.yaml
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detection.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detection.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detection.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detection.hpp
index 95caca41..0ebee316 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detection.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detection.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detector.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detector.hpp
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detector.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detector.hpp
index 136de60b..52ed4a75 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detector.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/apriltag_detector.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_scene_extractor.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_scene_extractor.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_scene_extractor.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_scene_extractor.hpp
index 2caa1301..bfee98ea 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_scene_extractor.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_scene_extractor.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_types.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_types.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_types.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_types.hpp
index 2c4dfc7d..6f1fb731 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_types.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/calibration_types.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/calibration_problem.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/calibration_problem.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/calibration_problem.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/calibration_problem.hpp
index 85ef097b..2c998f63 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/calibration_problem.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/calibration_problem.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/camera_residual.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/camera_residual.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/camera_residual.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/camera_residual.hpp
index 5f183bc6..a1c06abb 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/camera_residual.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/camera_residual.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/lidar_residual.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/lidar_residual.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/lidar_residual.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/lidar_residual.hpp
index 389aee6a..c63b675a 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/lidar_residual.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/lidar_residual.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/sensor_residual.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/sensor_residual.hpp
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/sensor_residual.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/sensor_residual.hpp
index 4c4942f1..8c4f83ad 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/sensor_residual.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/ceres/sensor_residual.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/apriltag_calibrator.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/apriltag_calibrator.hpp
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/apriltag_calibrator.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/apriltag_calibrator.hpp
index c2729369..667dab30 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/apriltag_calibrator.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/apriltag_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/chessboard_calibrator.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/chessboard_calibrator.hpp
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/chessboard_calibrator.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/chessboard_calibrator.hpp
index c29591ff..dc892ae1 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/chessboard_calibrator.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/chessboard_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/intrinsics_calibrator.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/intrinsics_calibrator.hpp
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/intrinsics_calibrator.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/intrinsics_calibrator.hpp
index db733674..8c7b5902 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/intrinsics_calibrator.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/intrinsics_calibration/intrinsics_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/math.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/math.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/math.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/math.hpp
index 4dc73a88..2673c36a 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/math.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/math.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/scene_types.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/scene_types.hpp
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/scene_types.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/scene_types.hpp
index c2153d70..c90ef317 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/scene_types.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/scene_types.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/serialization.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/serialization.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/serialization.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/serialization.hpp
index 53cef818..2939abdf 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/serialization.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/serialization.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/tag_based_sfm_calibrator.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/tag_based_sfm_calibrator.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/tag_based_sfm_calibrator.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/tag_based_sfm_calibrator.hpp
index d6915859..3eee1ccc 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/tag_based_sfm_calibrator.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/tag_based_sfm_calibrator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/types.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/types.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/types.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/types.hpp
index fbadb1a2..eeb525bb 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/types.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/types.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/visualization.hpp b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/visualization.hpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/visualization.hpp
rename to calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/visualization.hpp
index 5377689e..efef1e37 100644
--- a/sensor/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/visualization.hpp
+++ b/calibrators/tag_based_sfm_calibrator/include/tag_based_sfm_calibrator/visualization.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/launch/apriltag_detector.launch.py b/calibrators/tag_based_sfm_calibrator/launch/apriltag_detector.launch.py
similarity index 98%
rename from sensor/tag_based_sfm_calibrator/launch/apriltag_detector.launch.py
rename to calibrators/tag_based_sfm_calibrator/launch/apriltag_detector.launch.py
index 646e1525..af82b380 100644
--- a/sensor/tag_based_sfm_calibrator/launch/apriltag_detector.launch.py
+++ b/calibrators/tag_based_sfm_calibrator/launch/apriltag_detector.launch.py
@@ -1,4 +1,4 @@
-# Copyright 2024 Tier IV, Inc. All rights reserved.
+# Copyright 2024 TIER IV, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/launch/apriltag_detector.launch.xml b/calibrators/tag_based_sfm_calibrator/launch/apriltag_detector.launch.xml
similarity index 91%
rename from sensor/tag_based_sfm_calibrator/launch/apriltag_detector.launch.xml
rename to calibrators/tag_based_sfm_calibrator/launch/apriltag_detector.launch.xml
index 5a5a9708..ea289aad 100644
--- a/sensor/tag_based_sfm_calibrator/launch/apriltag_detector.launch.xml
+++ b/calibrators/tag_based_sfm_calibrator/launch/apriltag_detector.launch.xml
@@ -9,9 +9,11 @@
-
+
+
+
diff --git a/sensor/tag_based_sfm_calibrator/launch/calibrator.launch.xml b/calibrators/tag_based_sfm_calibrator/launch/calibrator.launch.xml
similarity index 100%
rename from sensor/tag_based_sfm_calibrator/launch/calibrator.launch.xml
rename to calibrators/tag_based_sfm_calibrator/launch/calibrator.launch.xml
diff --git a/sensor/tag_based_sfm_calibrator/launch/lidartag_detector.launch.xml b/calibrators/tag_based_sfm_calibrator/launch/lidartag_detector.launch.xml
similarity index 64%
rename from sensor/tag_based_sfm_calibrator/launch/lidartag_detector.launch.xml
rename to calibrators/tag_based_sfm_calibrator/launch/lidartag_detector.launch.xml
index 02c0f144..7abd999e 100644
--- a/sensor/tag_based_sfm_calibrator/launch/lidartag_detector.launch.xml
+++ b/calibrators/tag_based_sfm_calibrator/launch/lidartag_detector.launch.xml
@@ -3,12 +3,29 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
diff --git a/sensor/tag_based_sfm_calibrator/package.xml b/calibrators/tag_based_sfm_calibrator/package.xml
similarity index 97%
rename from sensor/tag_based_sfm_calibrator/package.xml
rename to calibrators/tag_based_sfm_calibrator/package.xml
index 39ab36fc..a9af4dd6 100644
--- a/sensor/tag_based_sfm_calibrator/package.xml
+++ b/calibrators/tag_based_sfm_calibrator/package.xml
@@ -15,6 +15,7 @@
apriltagapriltag_msgs
+ autoware_universe_utilscv_bridgeeigengeometry_msgs
@@ -35,7 +36,6 @@
tf2_eigentf2_geometry_msgstf2_ros
- tier4_autoware_utilstier4_calibration_msgstier4_ground_plane_utilstier4_tag_utils
diff --git a/sensor/tag_based_sfm_calibrator/rviz/default.rviz b/calibrators/tag_based_sfm_calibrator/rviz/default.rviz
similarity index 100%
rename from sensor/tag_based_sfm_calibrator/rviz/default.rviz
rename to calibrators/tag_based_sfm_calibrator/rviz/default.rviz
diff --git a/sensor/tag_based_sfm_calibrator/scripts/calibrator_ui_node.py b/calibrators/tag_based_sfm_calibrator/scripts/calibrator_ui_node.py
similarity index 97%
rename from sensor/tag_based_sfm_calibrator/scripts/calibrator_ui_node.py
rename to calibrators/tag_based_sfm_calibrator/scripts/calibrator_ui_node.py
index f451627e..20daa9db 100755
--- a/sensor/tag_based_sfm_calibrator/scripts/calibrator_ui_node.py
+++ b/calibrators/tag_based_sfm_calibrator/scripts/calibrator_ui_node.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/apriltag_detection.cpp b/calibrators/tag_based_sfm_calibrator/src/apriltag_detection.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/apriltag_detection.cpp
rename to calibrators/tag_based_sfm_calibrator/src/apriltag_detection.cpp
index cbdc8b73..62305d25 100644
--- a/sensor/tag_based_sfm_calibrator/src/apriltag_detection.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/apriltag_detection.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/apriltag_detector.cpp b/calibrators/tag_based_sfm_calibrator/src/apriltag_detector.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/apriltag_detector.cpp
rename to calibrators/tag_based_sfm_calibrator/src/apriltag_detector.cpp
index 5b1ba283..4ffb8b9e 100644
--- a/sensor/tag_based_sfm_calibrator/src/apriltag_detector.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/apriltag_detector.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/calibration_scene_extractor.cpp b/calibrators/tag_based_sfm_calibrator/src/calibration_scene_extractor.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/calibration_scene_extractor.cpp
rename to calibrators/tag_based_sfm_calibrator/src/calibration_scene_extractor.cpp
index 5546bace..1bbd66fa 100644
--- a/sensor/tag_based_sfm_calibrator/src/calibration_scene_extractor.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/calibration_scene_extractor.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/ceres/calibration_problem.cpp b/calibrators/tag_based_sfm_calibrator/src/ceres/calibration_problem.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/ceres/calibration_problem.cpp
rename to calibrators/tag_based_sfm_calibrator/src/ceres/calibration_problem.cpp
index b5fe2a58..27ac2f3c 100644
--- a/sensor/tag_based_sfm_calibrator/src/ceres/calibration_problem.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/ceres/calibration_problem.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/apriltag_calibrator.cpp b/calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/apriltag_calibrator.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/apriltag_calibrator.cpp
rename to calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/apriltag_calibrator.cpp
index 2c80a782..3ea51b7d 100644
--- a/sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/apriltag_calibrator.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/apriltag_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/chessboard_calibrator.cpp b/calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/chessboard_calibrator.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/chessboard_calibrator.cpp
rename to calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/chessboard_calibrator.cpp
index 76323a7c..9c08fa74 100644
--- a/sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/chessboard_calibrator.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/chessboard_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/intrinsics_calibrator.cpp b/calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/intrinsics_calibrator.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/intrinsics_calibrator.cpp
rename to calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/intrinsics_calibrator.cpp
index 6a17bd25..f125eb07 100644
--- a/sensor/tag_based_sfm_calibrator/src/intrinsics_calibration/intrinsics_calibrator.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/intrinsics_calibration/intrinsics_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/main.cpp b/calibrators/tag_based_sfm_calibrator/src/main.cpp
similarity index 97%
rename from sensor/tag_based_sfm_calibrator/src/main.cpp
rename to calibrators/tag_based_sfm_calibrator/src/main.cpp
index 532414bd..a6ca922b 100644
--- a/sensor/tag_based_sfm_calibrator/src/main.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/main.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/math.cpp b/calibrators/tag_based_sfm_calibrator/src/math.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/math.cpp
rename to calibrators/tag_based_sfm_calibrator/src/math.cpp
index e0c2a393..2a3a5eac 100644
--- a/sensor/tag_based_sfm_calibrator/src/math.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/math.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/src/tag_based_sfm_calibrator.cpp b/calibrators/tag_based_sfm_calibrator/src/tag_based_sfm_calibrator.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/tag_based_sfm_calibrator.cpp
rename to calibrators/tag_based_sfm_calibrator/src/tag_based_sfm_calibrator.cpp
index cdd38ab6..07b322c7 100644
--- a/sensor/tag_based_sfm_calibrator/src/tag_based_sfm_calibrator.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/tag_based_sfm_calibrator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -13,6 +13,7 @@
// limitations under the License.
#include
+#include
#include
#include
#include
@@ -27,7 +28,6 @@
#include
#include
#include
-#include
#include
#include
@@ -436,8 +436,9 @@ void ExtrinsicTagBasedBaseCalibrator::calibrationRequestCallback(
// Display the initial and calibrated values
const auto & initial_base_to_lidar_rpy =
- tier4_autoware_utils::getRPY(initial_base_link_to_lidar_msg.rotation);
- const auto & base_to_lidar_rpy = tier4_autoware_utils::getRPY(base_link_to_lidar_msg.rotation);
+ autoware::universe_utils::getRPY(initial_base_link_to_lidar_msg.rotation);
+ const auto & base_to_lidar_rpy =
+ autoware::universe_utils::getRPY(base_link_to_lidar_msg.rotation);
RCLCPP_INFO(this->get_logger(), "base_link: initial and calibrated statistics statistics");
RCLCPP_INFO(
this->get_logger(), "\tinitial: x=%.5f y=%.5f z=%.5f roll=%.5f pitch=%.5f yaw=%.5f",
diff --git a/sensor/tag_based_sfm_calibrator/src/visualization.cpp b/calibrators/tag_based_sfm_calibrator/src/visualization.cpp
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/src/visualization.cpp
rename to calibrators/tag_based_sfm_calibrator/src/visualization.cpp
index fa5be7d5..1d5b5f13 100644
--- a/sensor/tag_based_sfm_calibrator/src/visualization.cpp
+++ b/calibrators/tag_based_sfm_calibrator/src/visualization.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/__init__.py b/calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/__init__.py
similarity index 100%
rename from sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/__init__.py
rename to calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/__init__.py
diff --git a/sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/calibrator_ui.py b/calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/calibrator_ui.py
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/calibrator_ui.py
rename to calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/calibrator_ui.py
index 0b6f30ec..09d4db32 100644
--- a/sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/calibrator_ui.py
+++ b/calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/calibrator_ui.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/ros_interface.py b/calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/ros_interface.py
similarity index 99%
rename from sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/ros_interface.py
rename to calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/ros_interface.py
index a1dbe09e..0b5132be 100644
--- a/sensor/tag_based_sfm_calibrator/tag_based_sfm_calibrator/ros_interface.py
+++ b/calibrators/tag_based_sfm_calibrator/tag_based_sfm_calibrator/ros_interface.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/common/point_cloud_accumulator/include/point_cloud_accumulator/point_cloud_accumulator.hpp b/common/point_cloud_accumulator/include/point_cloud_accumulator/point_cloud_accumulator.hpp
index db5c1c18..bc0e28e9 100644
--- a/common/point_cloud_accumulator/include/point_cloud_accumulator/point_cloud_accumulator.hpp
+++ b/common/point_cloud_accumulator/include/point_cloud_accumulator/point_cloud_accumulator.hpp
@@ -1,4 +1,4 @@
-// Copyright 2023 Tier IV, Inc.
+// Copyright 2023 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/point_cloud_accumulator/src/point_cloud_accumulator.cpp b/common/point_cloud_accumulator/src/point_cloud_accumulator.cpp
index 89e32430..d649a801 100644
--- a/common/point_cloud_accumulator/src/point_cloud_accumulator.cpp
+++ b/common/point_cloud_accumulator/src/point_cloud_accumulator.cpp
@@ -1,4 +1,4 @@
-// Copyright 2023 Tier IV, Inc.
+// Copyright 2023 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended.hpp b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended.hpp
index bd1dc221..00a0007f 100644
--- a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended.hpp
+++ b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended_impl.hpp b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended_impl.hpp
index 8030c62a..27857a9c 100644
--- a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended_impl.hpp
+++ b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/joint_icp_extended_impl.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets.hpp b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets.hpp
index 74558002..a2929bd4 100644
--- a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets.hpp
+++ b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets_impl.hpp b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets_impl.hpp
index d1894823..f57add1a 100644
--- a/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets_impl.hpp
+++ b/common/tier4_calibration_pcl_extensions/include/tier4_calibration_pcl_extensions/voxel_grid_triplets_impl.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_pcl_extensions/src/joint_icp_extended.cpp b/common/tier4_calibration_pcl_extensions/src/joint_icp_extended.cpp
index 3ec74c3a..1a69d987 100644
--- a/common/tier4_calibration_pcl_extensions/src/joint_icp_extended.cpp
+++ b/common/tier4_calibration_pcl_extensions/src/joint_icp_extended.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_pcl_extensions/src/voxel_grid_triplets.cpp b/common/tier4_calibration_pcl_extensions/src/voxel_grid_triplets.cpp
index 92692ba6..568a6bd8 100644
--- a/common/tier4_calibration_pcl_extensions/src/voxel_grid_triplets.cpp
+++ b/common/tier4_calibration_pcl_extensions/src/voxel_grid_triplets.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_views/scripts/image_view_node.py b/common/tier4_calibration_views/scripts/image_view_node.py
index 41f327cf..00cc0d2f 100755
--- a/common/tier4_calibration_views/scripts/image_view_node.py
+++ b/common/tier4_calibration_views/scripts/image_view_node.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_views/tier4_calibration_views/image_view.py b/common/tier4_calibration_views/tier4_calibration_views/image_view.py
index 52257ab8..7e5afddc 100644
--- a/common/tier4_calibration_views/tier4_calibration_views/image_view.py
+++ b/common/tier4_calibration_views/tier4_calibration_views/image_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_views/tier4_calibration_views/image_view_ros_interface.py b/common/tier4_calibration_views/tier4_calibration_views/image_view_ros_interface.py
index 179cc0a3..c32bf28c 100644
--- a/common/tier4_calibration_views/tier4_calibration_views/image_view_ros_interface.py
+++ b/common/tier4_calibration_views/tier4_calibration_views/image_view_ros_interface.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_views/tier4_calibration_views/image_view_ui.py b/common/tier4_calibration_views/tier4_calibration_views/image_view_ui.py
index 710a9aa2..401e05bd 100644
--- a/common/tier4_calibration_views/tier4_calibration_views/image_view_ui.py
+++ b/common/tier4_calibration_views/tier4_calibration_views/image_view_ui.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/common/tier4_calibration_views/tier4_calibration_views/utils.py b/common/tier4_calibration_views/tier4_calibration_views/utils.py
index 81f4a5fb..ff1d638f 100644
--- a/common/tier4_calibration_views/tier4_calibration_views/utils.py
+++ b/common/tier4_calibration_views/tier4_calibration_views/utils.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/common/tier4_ground_plane_utils/include/tier4_ground_plane_utils/ground_plane_utils.hpp b/common/tier4_ground_plane_utils/include/tier4_ground_plane_utils/ground_plane_utils.hpp
index 5e64b2e9..4955533c 100644
--- a/common/tier4_ground_plane_utils/include/tier4_ground_plane_utils/ground_plane_utils.hpp
+++ b/common/tier4_ground_plane_utils/include/tier4_ground_plane_utils/ground_plane_utils.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_ground_plane_utils/package.xml b/common/tier4_ground_plane_utils/package.xml
index 89e99232..35b6c9ed 100755
--- a/common/tier4_ground_plane_utils/package.xml
+++ b/common/tier4_ground_plane_utils/package.xml
@@ -12,6 +12,7 @@
autoware_cmake
+ autoware_universe_utilseigengeometry_msgspcl_conversions
@@ -23,7 +24,6 @@
tf2_eigentf2_geometry_msgstf2_ros
- tier4_autoware_utils
diff --git a/common/tier4_ground_plane_utils/src/ground_plane_utils.cpp b/common/tier4_ground_plane_utils/src/ground_plane_utils.cpp
index edd60bb9..f4e4c734 100644
--- a/common/tier4_ground_plane_utils/src/ground_plane_utils.cpp
+++ b/common/tier4_ground_plane_utils/src/ground_plane_utils.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -13,10 +13,10 @@
// limitations under the License.
#include
+#include
#include
#include
#include
-#include
#include
#include
@@ -85,9 +85,9 @@ std::tuple::Ptr> extractGround
seg.setMaxIterations(parameters.max_iterations_);
pcl::PointCloud::Ptr iteration_cloud = pointcloud;
- int iteration_size = iteration_cloud->height * iteration_cloud->width;
+ int iteration_cloud_size = iteration_cloud->height * iteration_cloud->width;
- while (iteration_size > parameters.min_plane_points_) {
+ while (iteration_cloud_size > parameters.min_plane_points_) {
seg.setInputCloud(iteration_cloud);
seg.segment(*inliers, *coefficients);
@@ -176,7 +176,7 @@ std::tuple::Ptr> extractGround
extract.filter(next_cloud);
iteration_cloud->swap(next_cloud);
- iteration_size = iteration_cloud->height * iteration_cloud->width;
+ iteration_cloud_size = iteration_cloud->height * iteration_cloud->width;
}
return std::make_tuple(false, model, inliers_pointcloud);
}
@@ -358,17 +358,17 @@ geometry_msgs::msg::TransformStamped overwriteXYYawValues(
msg.transform.translation.y = initial_base_lidar_transform_msg.transform.translation.y;
auto initial_rpy =
- tier4_autoware_utils::getRPY(initial_base_lidar_transform_msg.transform.rotation);
+ autoware::universe_utils::getRPY(initial_base_lidar_transform_msg.transform.rotation);
auto calibrated_rpy =
- tier4_autoware_utils::getRPY(calibrated_base_lidar_transform_msg.transform.rotation);
+ autoware::universe_utils::getRPY(calibrated_base_lidar_transform_msg.transform.rotation);
// Overwrite only yaw
auto output_rpy = calibrated_rpy;
output_rpy.z = initial_rpy.z;
msg.transform.rotation =
- tier4_autoware_utils::createQuaternionFromRPY(output_rpy.x, output_rpy.y, output_rpy.z);
+ autoware::universe_utils::createQuaternionFromRPY(output_rpy.x, output_rpy.y, output_rpy.z);
return msg;
}
diff --git a/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_filter.hpp b/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_filter.hpp
index c258cc35..e78a051c 100644
--- a/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_filter.hpp
+++ b/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_hypothesis.hpp b/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_hypothesis.hpp
index 9b045314..4e4fa6b6 100644
--- a/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_hypothesis.hpp
+++ b/common/tier4_tag_utils/include/tier4_tag_utils/apriltag_hypothesis.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_filter.hpp b/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_filter.hpp
index 096a2f49..d34a57c3 100644
--- a/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_filter.hpp
+++ b/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_filter.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_hypothesis.hpp b/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_hypothesis.hpp
index 3a89e3ce..d1841950 100644
--- a/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_hypothesis.hpp
+++ b/common/tier4_tag_utils/include/tier4_tag_utils/lidartag_hypothesis.hpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/src/apriltag_filter.cpp b/common/tier4_tag_utils/src/apriltag_filter.cpp
index 54ac040a..390a900e 100644
--- a/common/tier4_tag_utils/src/apriltag_filter.cpp
+++ b/common/tier4_tag_utils/src/apriltag_filter.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/src/apriltag_hypothesis.cpp b/common/tier4_tag_utils/src/apriltag_hypothesis.cpp
index a149e192..1cb3837d 100644
--- a/common/tier4_tag_utils/src/apriltag_hypothesis.cpp
+++ b/common/tier4_tag_utils/src/apriltag_hypothesis.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/src/lidartag_filter.cpp b/common/tier4_tag_utils/src/lidartag_filter.cpp
index 207e0d29..e19dca32 100644
--- a/common/tier4_tag_utils/src/lidartag_filter.cpp
+++ b/common/tier4_tag_utils/src/lidartag_filter.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/common/tier4_tag_utils/src/lidartag_hypothesis.cpp b/common/tier4_tag_utils/src/lidartag_hypothesis.cpp
index 4b2e5cfb..15b53110 100644
--- a/common/tier4_tag_utils/src/lidartag_hypothesis.cpp
+++ b/common/tier4_tag_utils/src/lidartag_hypothesis.cpp
@@ -1,4 +1,4 @@
-// Copyright 2024 Tier IV, Inc.
+// Copyright 2024 TIER IV, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 00000000..60816ba2
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,26 @@
+
+FROM osrf/ros:humble-desktop-jammy
+
+SHELL ["/bin/bash", "-o", "pipefail", "-c"]
+
+RUN apt-get update && apt-get install --no-install-recommends -y \
+ python3-pip \
+ wget
+
+RUN echo "source /opt/ros/humble/setup.bash" >> /etc/bash.bashrc
+
+WORKDIR /workspace
+
+RUN mkdir -p /workspace/src
+
+RUN wget https://raw.githubusercontent.com/tier4/CalibrationTools/tier4/universe/calibration_tools_standalone.repos --directory-prefix=/workspace
+
+RUN vcs import src < calibration_tools_standalone.repos
+
+RUN rosdep install -y --from-paths `colcon list --packages-up-to sensor_calibration_tools -p` --ignore-src
+
+RUN source /opt/ros/humble/setup.bash && colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-up-to sensor_calibration_tools
+
+RUN rm -rf /var/lib/apt/lists/*
+
+RUN echo "source /workspace/install/setup.bash" >> /etc/bash.bashrc
diff --git a/sensor/docs/images/camera-intrinsics/board_configuration.png b/docs/images/intrinsic_camera_calibrator/board_configuration.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/board_configuration.png
rename to docs/images/intrinsic_camera_calibrator/board_configuration.png
diff --git a/sensor/docs/images/camera-intrinsics/calibration_data_sampling.png b/docs/images/intrinsic_camera_calibrator/calibration_data_sampling.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/calibration_data_sampling.png
rename to docs/images/intrinsic_camera_calibrator/calibration_data_sampling.png
diff --git a/sensor/docs/images/camera-intrinsics/calibration_data_statistics.png b/docs/images/intrinsic_camera_calibrator/calibration_data_statistics.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/calibration_data_statistics.png
rename to docs/images/intrinsic_camera_calibrator/calibration_data_statistics.png
diff --git a/sensor/docs/images/camera-intrinsics/calibration_error.png b/docs/images/intrinsic_camera_calibrator/calibration_error.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/calibration_error.png
rename to docs/images/intrinsic_camera_calibrator/calibration_error.png
diff --git a/sensor/docs/images/camera-intrinsics/calibration_inliers.png b/docs/images/intrinsic_camera_calibrator/calibration_inliers.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/calibration_inliers.png
rename to docs/images/intrinsic_camera_calibrator/calibration_inliers.png
diff --git a/sensor/docs/images/camera-intrinsics/calibration_parameters.png b/docs/images/intrinsic_camera_calibrator/calibration_parameters.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/calibration_parameters.png
rename to docs/images/intrinsic_camera_calibrator/calibration_parameters.png
diff --git a/sensor/docs/images/camera-intrinsics/calibration_result.png b/docs/images/intrinsic_camera_calibrator/calibration_result.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/calibration_result.png
rename to docs/images/intrinsic_camera_calibrator/calibration_result.png
diff --git a/sensor/docs/images/camera-intrinsics/data_collection_heatmap_1.jpg b/docs/images/intrinsic_camera_calibrator/data_collection_heatmap_1.jpg
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/data_collection_heatmap_1.jpg
rename to docs/images/intrinsic_camera_calibrator/data_collection_heatmap_1.jpg
diff --git a/sensor/docs/images/camera-intrinsics/data_collection_heatmap_2.jpg b/docs/images/intrinsic_camera_calibrator/data_collection_heatmap_2.jpg
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/data_collection_heatmap_2.jpg
rename to docs/images/intrinsic_camera_calibrator/data_collection_heatmap_2.jpg
diff --git a/sensor/docs/images/camera-intrinsics/data_collection_parameters.png b/docs/images/intrinsic_camera_calibrator/data_collection_parameters.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/data_collection_parameters.png
rename to docs/images/intrinsic_camera_calibrator/data_collection_parameters.png
diff --git a/sensor/docs/images/camera-intrinsics/data_collection_results.png b/docs/images/intrinsic_camera_calibrator/data_collection_results.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/data_collection_results.png
rename to docs/images/intrinsic_camera_calibrator/data_collection_results.png
diff --git a/sensor/docs/images/camera-intrinsics/data_collection_statistics.png b/docs/images/intrinsic_camera_calibrator/data_collection_statistics.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/data_collection_statistics.png
rename to docs/images/intrinsic_camera_calibrator/data_collection_statistics.png
diff --git a/sensor/docs/images/camera-intrinsics/detection.jpg b/docs/images/intrinsic_camera_calibrator/detection.jpg
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/detection.jpg
rename to docs/images/intrinsic_camera_calibrator/detection.jpg
diff --git a/sensor/docs/images/camera-intrinsics/detection_parameters.png b/docs/images/intrinsic_camera_calibrator/detection_parameters.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/detection_parameters.png
rename to docs/images/intrinsic_camera_calibrator/detection_parameters.png
diff --git a/sensor/docs/images/camera-intrinsics/detection_results.png b/docs/images/intrinsic_camera_calibrator/detection_results.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/detection_results.png
rename to docs/images/intrinsic_camera_calibrator/detection_results.png
diff --git a/sensor/docs/images/camera-intrinsics/evaluation.png b/docs/images/intrinsic_camera_calibrator/evaluation.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/evaluation.png
rename to docs/images/intrinsic_camera_calibrator/evaluation.png
diff --git a/sensor/docs/images/camera-intrinsics/initial_menu_calibration.png b/docs/images/intrinsic_camera_calibrator/initial_menu_calibration.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/initial_menu_calibration.png
rename to docs/images/intrinsic_camera_calibrator/initial_menu_calibration.png
diff --git a/sensor/docs/images/camera-intrinsics/initial_menu_evaluation.png b/docs/images/intrinsic_camera_calibrator/initial_menu_evaluation.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/initial_menu_evaluation.png
rename to docs/images/intrinsic_camera_calibrator/initial_menu_evaluation.png
diff --git a/sensor/docs/images/camera-intrinsics/main_window.jpg b/docs/images/intrinsic_camera_calibrator/main_window.jpg
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/main_window.jpg
rename to docs/images/intrinsic_camera_calibrator/main_window.jpg
diff --git a/sensor/docs/images/camera-intrinsics/sub_pixel_visualization.png b/docs/images/intrinsic_camera_calibrator/sub_pixel_visualization.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/sub_pixel_visualization.png
rename to docs/images/intrinsic_camera_calibrator/sub_pixel_visualization.png
diff --git a/sensor/docs/images/camera-intrinsics/topic_configuration_1.png b/docs/images/intrinsic_camera_calibrator/topic_configuration_1.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/topic_configuration_1.png
rename to docs/images/intrinsic_camera_calibrator/topic_configuration_1.png
diff --git a/sensor/docs/images/camera-intrinsics/topic_configuration_2.png b/docs/images/intrinsic_camera_calibrator/topic_configuration_2.png
similarity index 100%
rename from sensor/docs/images/camera-intrinsics/topic_configuration_2.png
rename to docs/images/intrinsic_camera_calibrator/topic_configuration_2.png
diff --git a/docs/images/mapping_based_calibrator/cone_calibrated.jpg b/docs/images/mapping_based_calibrator/cone_calibrated.jpg
new file mode 100644
index 00000000..cb206d80
Binary files /dev/null and b/docs/images/mapping_based_calibrator/cone_calibrated.jpg differ
diff --git a/docs/images/mapping_based_calibrator/map1.jpg b/docs/images/mapping_based_calibrator/map1.jpg
new file mode 100644
index 00000000..ccf1dfb4
Binary files /dev/null and b/docs/images/mapping_based_calibrator/map1.jpg differ
diff --git a/docs/images/mapping_based_calibrator/map2.jpg b/docs/images/mapping_based_calibrator/map2.jpg
new file mode 100644
index 00000000..a92c0054
Binary files /dev/null and b/docs/images/mapping_based_calibrator/map2.jpg differ
diff --git a/docs/images/mapping_based_calibrator/map3.jpg b/docs/images/mapping_based_calibrator/map3.jpg
new file mode 100644
index 00000000..68a6f71f
Binary files /dev/null and b/docs/images/mapping_based_calibrator/map3.jpg differ
diff --git a/docs/images/mapping_based_calibrator/mapping_based_vis.svg b/docs/images/mapping_based_calibrator/mapping_based_vis.svg
new file mode 100644
index 00000000..bc4df550
--- /dev/null
+++ b/docs/images/mapping_based_calibrator/mapping_based_vis.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/images/mapping_based_calibrator/menu1.jpg b/docs/images/mapping_based_calibrator/menu1.jpg
new file mode 100644
index 00000000..d326aedf
Binary files /dev/null and b/docs/images/mapping_based_calibrator/menu1.jpg differ
diff --git a/docs/images/mapping_based_calibrator/menu2.jpg b/docs/images/mapping_based_calibrator/menu2.jpg
new file mode 100644
index 00000000..0745e2e1
Binary files /dev/null and b/docs/images/mapping_based_calibrator/menu2.jpg differ
diff --git a/docs/images/mapping_based_calibrator/menu3.jpg b/docs/images/mapping_based_calibrator/menu3.jpg
new file mode 100644
index 00000000..257453d4
Binary files /dev/null and b/docs/images/mapping_based_calibrator/menu3.jpg differ
diff --git a/docs/images/mapping_based_calibrator/menu4.jpg b/docs/images/mapping_based_calibrator/menu4.jpg
new file mode 100644
index 00000000..8c813d94
Binary files /dev/null and b/docs/images/mapping_based_calibrator/menu4.jpg differ
diff --git a/docs/images/mapping_based_calibrator/vehicle_calibrated.jpg b/docs/images/mapping_based_calibrator/vehicle_calibrated.jpg
new file mode 100644
index 00000000..538194d0
Binary files /dev/null and b/docs/images/mapping_based_calibrator/vehicle_calibrated.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/add1.jpg b/docs/images/marker_radar_lidar_calibrator/add1.jpg
new file mode 100644
index 00000000..969c9f52
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/add1.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/add2.jpg b/docs/images/marker_radar_lidar_calibrator/add2.jpg
new file mode 100644
index 00000000..d07df1d2
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/add2.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/background_construction.svg b/docs/images/marker_radar_lidar_calibrator/background_construction.svg
new file mode 100644
index 00000000..53431a22
--- /dev/null
+++ b/docs/images/marker_radar_lidar_calibrator/background_construction.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/images/marker_radar_lidar_calibrator/bad_sample.jpg b/docs/images/marker_radar_lidar_calibrator/bad_sample.jpg
new file mode 100644
index 00000000..16900ed7
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/bad_sample.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/delete1.jpg b/docs/images/marker_radar_lidar_calibrator/delete1.jpg
new file mode 100644
index 00000000..2c4be6ea
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/delete1.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/delete2.jpg b/docs/images/marker_radar_lidar_calibrator/delete2.jpg
new file mode 100644
index 00000000..2d677cce
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/delete2.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/end_calibration1.jpg b/docs/images/marker_radar_lidar_calibrator/end_calibration1.jpg
new file mode 100644
index 00000000..5b957f7d
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/end_calibration1.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/end_calibration2.jpg b/docs/images/marker_radar_lidar_calibrator/end_calibration2.jpg
new file mode 100644
index 00000000..c6319aff
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/end_calibration2.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/foreground_extraction.svg b/docs/images/marker_radar_lidar_calibrator/foreground_extraction.svg
new file mode 100644
index 00000000..c0e38115
--- /dev/null
+++ b/docs/images/marker_radar_lidar_calibrator/foreground_extraction.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/images/marker_radar_lidar_calibrator/good_sample.jpg b/docs/images/marker_radar_lidar_calibrator/good_sample.jpg
new file mode 100644
index 00000000..84ed0991
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/good_sample.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/lidar_background.jpg b/docs/images/marker_radar_lidar_calibrator/lidar_background.jpg
new file mode 100644
index 00000000..fe83e653
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/lidar_background.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/lidar_foreground.jpg b/docs/images/marker_radar_lidar_calibrator/lidar_foreground.jpg
new file mode 100644
index 00000000..288fbf36
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/lidar_foreground.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.jpg b/docs/images/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.jpg
new file mode 100644
index 00000000..b41e0079
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/marker_radar_lidar_calibrator.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/marker_radar_lidar_vis.svg b/docs/images/marker_radar_lidar_calibrator/marker_radar_lidar_vis.svg
new file mode 100644
index 00000000..835192b7
--- /dev/null
+++ b/docs/images/marker_radar_lidar_calibrator/marker_radar_lidar_vis.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/docs/images/marker_radar_lidar_calibrator/menu1.jpg b/docs/images/marker_radar_lidar_calibrator/menu1.jpg
new file mode 100644
index 00000000..c879ad7f
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/menu1.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/menu2.jpg b/docs/images/marker_radar_lidar_calibrator/menu2.jpg
new file mode 100644
index 00000000..350a9720
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/menu2.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/menu3.jpg b/docs/images/marker_radar_lidar_calibrator/menu3.jpg
new file mode 100644
index 00000000..4fbfbab7
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/menu3.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/menu4.jpg b/docs/images/marker_radar_lidar_calibrator/menu4.jpg
new file mode 100644
index 00000000..6d6f123e
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/menu4.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/metric_plotter1.jpg b/docs/images/marker_radar_lidar_calibrator/metric_plotter1.jpg
new file mode 100644
index 00000000..6f171cfe
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/metric_plotter1.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/radar_background.jpg b/docs/images/marker_radar_lidar_calibrator/radar_background.jpg
new file mode 100644
index 00000000..d6724ca3
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/radar_background.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/radar_foreground.jpg b/docs/images/marker_radar_lidar_calibrator/radar_foreground.jpg
new file mode 100644
index 00000000..c8c3a6cc
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/radar_foreground.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/radar_reflector.png b/docs/images/marker_radar_lidar_calibrator/radar_reflector.png
new file mode 100644
index 00000000..dd7da204
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/radar_reflector.png differ
diff --git a/docs/images/marker_radar_lidar_calibrator/reflector_points.jpg b/docs/images/marker_radar_lidar_calibrator/reflector_points.jpg
new file mode 100644
index 00000000..6d9b1850
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/reflector_points.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/rviz1.jpg b/docs/images/marker_radar_lidar_calibrator/rviz1.jpg
new file mode 100644
index 00000000..55c1e079
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/rviz1.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/rviz2.jpg b/docs/images/marker_radar_lidar_calibrator/rviz2.jpg
new file mode 100644
index 00000000..2102f2f2
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/rviz2.jpg differ
diff --git a/docs/images/marker_radar_lidar_calibrator/rviz3.jpg b/docs/images/marker_radar_lidar_calibrator/rviz3.jpg
new file mode 100644
index 00000000..90c716fd
Binary files /dev/null and b/docs/images/marker_radar_lidar_calibrator/rviz3.jpg differ
diff --git a/docs/images/sensor_calibration_manager/calibrated_tf.png b/docs/images/sensor_calibration_manager/calibrated_tf.png
new file mode 100644
index 00000000..1434bcbe
Binary files /dev/null and b/docs/images/sensor_calibration_manager/calibrated_tf.png differ
diff --git a/docs/images/sensor_calibration_manager/initial_menu.png b/docs/images/sensor_calibration_manager/initial_menu.png
new file mode 100644
index 00000000..97826b4d
Binary files /dev/null and b/docs/images/sensor_calibration_manager/initial_menu.png differ
diff --git a/docs/images/sensor_calibration_manager/initial_tf.png b/docs/images/sensor_calibration_manager/initial_tf.png
new file mode 100644
index 00000000..07dfc7ee
Binary files /dev/null and b/docs/images/sensor_calibration_manager/initial_tf.png differ
diff --git a/docs/images/sensor_calibration_manager/launcher_configuration.png b/docs/images/sensor_calibration_manager/launcher_configuration.png
new file mode 100644
index 00000000..23bb6a99
Binary files /dev/null and b/docs/images/sensor_calibration_manager/launcher_configuration.png differ
diff --git a/docs/images/sensor_calibration_manager/main_window.png b/docs/images/sensor_calibration_manager/main_window.png
new file mode 100644
index 00000000..cd56afd8
Binary files /dev/null and b/docs/images/sensor_calibration_manager/main_window.png differ
diff --git a/docs/images/sensor_calibration_manager/result.png b/docs/images/sensor_calibration_manager/result.png
new file mode 100644
index 00000000..c2bfe102
Binary files /dev/null and b/docs/images/sensor_calibration_manager/result.png differ
diff --git a/docs/images/tag_based_pnp_calibrator/calibrated_tf.jpg b/docs/images/tag_based_pnp_calibrator/calibrated_tf.jpg
new file mode 100644
index 00000000..1bf949c4
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/calibrated_tf.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/init_tf.jpg b/docs/images/tag_based_pnp_calibrator/init_tf.jpg
new file mode 100644
index 00000000..40c29c12
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/init_tf.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/lidar_detection.jpg b/docs/images/tag_based_pnp_calibrator/lidar_detection.jpg
new file mode 100644
index 00000000..7d87ffa9
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/lidar_detection.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/lidar_scan_on_tag.jpg b/docs/images/tag_based_pnp_calibrator/lidar_scan_on_tag.jpg
new file mode 100644
index 00000000..15832257
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/lidar_scan_on_tag.jpg differ
diff --git a/sensor/docs/images/camera-lidar/lidartag-mount.jpg b/docs/images/tag_based_pnp_calibrator/lidartag-mount.jpg
similarity index 100%
rename from sensor/docs/images/camera-lidar/lidartag-mount.jpg
rename to docs/images/tag_based_pnp_calibrator/lidartag-mount.jpg
diff --git a/docs/images/tag_based_pnp_calibrator/menu1.jpg b/docs/images/tag_based_pnp_calibrator/menu1.jpg
new file mode 100644
index 00000000..131d75bc
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/menu1.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/menu2.jpg b/docs/images/tag_based_pnp_calibrator/menu2.jpg
new file mode 100644
index 00000000..f76fd7da
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/menu2.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/menu3.jpg b/docs/images/tag_based_pnp_calibrator/menu3.jpg
new file mode 100644
index 00000000..0da24f8d
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/menu3.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/menu4.jpg b/docs/images/tag_based_pnp_calibrator/menu4.jpg
new file mode 100644
index 00000000..654abb64
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/menu4.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/tag_based_pnp_calibrator.jpg b/docs/images/tag_based_pnp_calibrator/tag_based_pnp_calibrator.jpg
new file mode 100644
index 00000000..8e6a35db
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/tag_based_pnp_calibrator.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/tag_position.jpg b/docs/images/tag_based_pnp_calibrator/tag_position.jpg
new file mode 100644
index 00000000..674f01c9
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/tag_position.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/visualization1.jpg b/docs/images/tag_based_pnp_calibrator/visualization1.jpg
new file mode 100644
index 00000000..3dc64e9b
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/visualization1.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/visualization2.jpg b/docs/images/tag_based_pnp_calibrator/visualization2.jpg
new file mode 100644
index 00000000..b013db21
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/visualization2.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/visualization3.jpg b/docs/images/tag_based_pnp_calibrator/visualization3.jpg
new file mode 100644
index 00000000..e166b1d6
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/visualization3.jpg differ
diff --git a/docs/images/tag_based_pnp_calibrator/visualization_bar.jpg b/docs/images/tag_based_pnp_calibrator/visualization_bar.jpg
new file mode 100644
index 00000000..a466bd7d
Binary files /dev/null and b/docs/images/tag_based_pnp_calibrator/visualization_bar.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/auxiliar_tag.jpg b/docs/images/tag_based_sfm_calibrator/auxiliar_tag.jpg
new file mode 100644
index 00000000..d441aca2
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/auxiliar_tag.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/bev_setup.svg b/docs/images/tag_based_sfm_calibrator/bev_setup.svg
new file mode 100644
index 00000000..e39eea43
--- /dev/null
+++ b/docs/images/tag_based_sfm_calibrator/bev_setup.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/images/tag_based_sfm_calibrator/calibrated_reprojections.jpg b/docs/images/tag_based_sfm_calibrator/calibrated_reprojections.jpg
new file mode 100644
index 00000000..9985fb4b
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/calibrated_reprojections.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/calibrated_reprojections_crop.jpg b/docs/images/tag_based_sfm_calibrator/calibrated_reprojections_crop.jpg
new file mode 100644
index 00000000..7d78c254
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/calibrated_reprojections_crop.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/calibrated_rviz1.png b/docs/images/tag_based_sfm_calibrator/calibrated_rviz1.png
new file mode 100644
index 00000000..f8bfd84b
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/calibrated_rviz1.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/calibrated_rviz2.png b/docs/images/tag_based_sfm_calibrator/calibrated_rviz2.png
new file mode 100644
index 00000000..01afff47
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/calibrated_rviz2.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/calibrated_rviz3.png b/docs/images/tag_based_sfm_calibrator/calibrated_rviz3.png
new file mode 100644
index 00000000..6390555c
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/calibrated_rviz3.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/external_camera1.jpg b/docs/images/tag_based_sfm_calibrator/external_camera1.jpg
new file mode 100644
index 00000000..27ad74c1
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/external_camera1.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/external_camera2.jpg b/docs/images/tag_based_sfm_calibrator/external_camera2.jpg
new file mode 100644
index 00000000..63662e3b
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/external_camera2.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/external_camera3.jpg b/docs/images/tag_based_sfm_calibrator/external_camera3.jpg
new file mode 100644
index 00000000..7250f715
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/external_camera3.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/external_camera4.jpg b/docs/images/tag_based_sfm_calibrator/external_camera4.jpg
new file mode 100644
index 00000000..100a6d3e
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/external_camera4.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/external_camera5.jpg b/docs/images/tag_based_sfm_calibrator/external_camera5.jpg
new file mode 100644
index 00000000..80d1a157
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/external_camera5.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/external_camera6.jpg b/docs/images/tag_based_sfm_calibrator/external_camera6.jpg
new file mode 100644
index 00000000..58e0ec73
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/external_camera6.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/ground_tag.jpg b/docs/images/tag_based_sfm_calibrator/ground_tag.jpg
new file mode 100644
index 00000000..f8dfc12d
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/ground_tag.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/intrinsics_bad_1.jpg b/docs/images/tag_based_sfm_calibrator/intrinsics_bad_1.jpg
new file mode 100644
index 00000000..00f74960
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/intrinsics_bad_1.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/intrinsics_bad_2.jpg b/docs/images/tag_based_sfm_calibrator/intrinsics_bad_2.jpg
new file mode 100644
index 00000000..ede15add
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/intrinsics_bad_2.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/intrinsics_good_1.jpg b/docs/images/tag_based_sfm_calibrator/intrinsics_good_1.jpg
new file mode 100644
index 00000000..f2912cce
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/intrinsics_good_1.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/intrinsics_good_2.jpg b/docs/images/tag_based_sfm_calibrator/intrinsics_good_2.jpg
new file mode 100644
index 00000000..89b4223f
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/intrinsics_good_2.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/intrinsics_good_3.jpg b/docs/images/tag_based_sfm_calibrator/intrinsics_good_3.jpg
new file mode 100644
index 00000000..13010714
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/intrinsics_good_3.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/intrinsics_good_4.jpg b/docs/images/tag_based_sfm_calibrator/intrinsics_good_4.jpg
new file mode 100644
index 00000000..846de116
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/intrinsics_good_4.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/menu1.png b/docs/images/tag_based_sfm_calibrator/menu1.png
new file mode 100644
index 00000000..d1c0e53f
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/menu1.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/menu2.png b/docs/images/tag_based_sfm_calibrator/menu2.png
new file mode 100644
index 00000000..97bbc9cf
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/menu2.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/menu3.png b/docs/images/tag_based_sfm_calibrator/menu3.png
new file mode 100644
index 00000000..7e0c9c4d
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/menu3.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/processed.png b/docs/images/tag_based_sfm_calibrator/processed.png
new file mode 100644
index 00000000..4f1446db
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/processed.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/scene0.png b/docs/images/tag_based_sfm_calibrator/scene0.png
new file mode 100644
index 00000000..e23b9b53
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/scene0.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/scene1.png b/docs/images/tag_based_sfm_calibrator/scene1.png
new file mode 100644
index 00000000..700e1df3
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/scene1.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/scene2.png b/docs/images/tag_based_sfm_calibrator/scene2.png
new file mode 100644
index 00000000..3ef1dafd
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/scene2.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/sensor_calibration_manager.png b/docs/images/tag_based_sfm_calibrator/sensor_calibration_manager.png
new file mode 100644
index 00000000..7e44c3c6
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/sensor_calibration_manager.png differ
diff --git a/docs/images/tag_based_sfm_calibrator/waypoint_tag.jpg b/docs/images/tag_based_sfm_calibrator/waypoint_tag.jpg
new file mode 100644
index 00000000..19780391
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/waypoint_tag.jpg differ
diff --git a/docs/images/tag_based_sfm_calibrator/wheel_tag.jpg b/docs/images/tag_based_sfm_calibrator/wheel_tag.jpg
new file mode 100644
index 00000000..ba8d41fa
Binary files /dev/null and b/docs/images/tag_based_sfm_calibrator/wheel_tag.jpg differ
diff --git a/sensor/docs/resource/KALIBR_LICENSE b/docs/resource/KALIBR_LICENSE
similarity index 100%
rename from sensor/docs/resource/KALIBR_LICENSE
rename to docs/resource/KALIBR_LICENSE
diff --git a/sensor/docs/resource/apriltag_grid_3x4.pdf b/docs/resource/apriltag_grid_3x4.pdf
similarity index 100%
rename from sensor/docs/resource/apriltag_grid_3x4.pdf
rename to docs/resource/apriltag_grid_3x4.pdf
diff --git a/sensor/docs/resource/checkerboard_8x6.pdf b/docs/resource/checkerboard_8x6.pdf
similarity index 100%
rename from sensor/docs/resource/checkerboard_8x6.pdf
rename to docs/resource/checkerboard_8x6.pdf
diff --git a/sensor/docs/resource/circle_8x6.pdf b/docs/resource/circle_8x6.pdf
similarity index 100%
rename from sensor/docs/resource/circle_8x6.pdf
rename to docs/resource/circle_8x6.pdf
diff --git a/sensor/docs/how_to_intrinsic_camera.md b/docs/tutorials/intrinsic_camera_calibrator.md
similarity index 73%
rename from sensor/docs/how_to_intrinsic_camera.md
rename to docs/tutorials/intrinsic_camera_calibrator.md
index 5f870726..bb050749 100644
--- a/sensor/docs/how_to_intrinsic_camera.md
+++ b/docs/tutorials/intrinsic_camera_calibrator.md
@@ -19,7 +19,7 @@ ros2 launch intrinsic_camera_calibrator calibrator.launch.xml
Once the tool has been launched, the initial configuration menu is displayed as presented in Figure 1.
-
+
Fig 1. Initial configuration menu
@@ -28,7 +28,7 @@ The calibration mode is set by default, and both the data source and calibration
Once the beforementioned configurations are set, by clicking the `Start` button, the main window is displayed as shown in Figure 2.
-
+
Fig 2. Main window
@@ -40,11 +40,11 @@ The calibration is over when the `Calibration status` goes back to `Idle`, at wh
A brief overview of the calibration results can always be observed in the main window as seen in Figure 3
-
+
Fig 3. Calibration results
-After the calibration has finished, is possible to save the results by clicking the `Save` button and selecting and appropriate folder. The saved files correspond to the calibration itself (in the format used by ROS, as explained in [Section 2.5.1](#251-camera-intrinsics-model-and-output-format)) and the calibration images, in case they are needed for further processing.
+After the calibration has finished, is possible to save the results by clicking the `Save` button and selecting an appropriate folder. The saved files correspond to the calibration itself (in the format used by ROS, as explained in [Section 2.5.1](#251-camera-intrinsics-model-and-output-format)) and the calibration images, in case they are needed for further processing.
### 1.2 Evaluation
@@ -54,14 +54,14 @@ However, in this case, since the objective is to evaluate an existing set of int
Once the intrinsics are loaded, the selection of the `evaluation` mode becomes available as shown in Figure 4.
-
+
Fig 4. Initial configuration menu after loading a set of intrinsics
After selecting the `evaluation` and pressing `Start`, the process is analogous to the `Calibration` process, except that instead of using the `Calibrate` button, the `Evaluate` button is used, upon which the evaluation results are displayed in the same way as presented in Figure 5.
-
+
Fig 5. Initial configuration menu after loading a set of intrinsics
@@ -71,6 +71,8 @@ After selecting the `evaluation` and pressing `Start`, the process is analogous
In order to perform intrinsic calibration, images from the target camera are needed, and to load them, the `intrinsic_calibration_calibrator` tool implemented 3 methods:
+
+
- ROS2 topics
- ROS2 bags
- Image files
@@ -79,14 +81,14 @@ The desired data source can be chosen from the `Source options` in the initial c
In the case of ROS2 topics or ROS2 bags, the window from Figure 6 is displayed, where the user can select the desired topic corresponding to the camera to be calibrated.
-
+
Fig 6. ROS2 topic selection
Additionally, in the case that the default QoS profiles don't match, the user can also set them to suit their needs as can be observed in Figure 7.
-
+
Fig 7. ROS2 topic QoS configuration
@@ -95,11 +97,11 @@ Additionally, in the case that the default QoS profiles don't match, the user ca
In order to calibrate camera intrinsics, objects with known geometry need to be seen from different views.
The most established method to accomplish this is to print boards with easy-to-detect patterns and move them around the camera. The `intrinsic_camera_calibrator` provides support for three kinds of boards:
-- Chess boards ([6x8 example](resource/checkerboard_8x6.pdf))
-- Circle dot boards ([6x8 example](resource/circle_8x6.pdf))
-- Apriltag grid board ([3x4 example](resource/apriltag_grid_3x4.pdf))
+- Chess boards ([6x8 example](../resource/checkerboard_8x6.pdf))
+- Circle dot boards ([6x8 example](../resource/circle_8x6.pdf))
+- Apriltag grid board ([3x4 example](../resource/apriltag_grid_3x4.pdf))
-The choice of board can be set in the initial configuration menu from Figure 1, and the board parameters (size, cells, etc.) can be modified by clicking on the `Board parameters` button.
+The choice of the board can be set in the initial configuration menu from Figure 1, and the board parameters (size, cells, etc.) can be modified by clicking on the `Board parameters` button.
\*In the case of the apriltag boards, a script from [kalibr](https://github.com/ethz-asl/kalibr) was modified to generate the pattern. The difference lies in the black squared between tags, which are not compatible with [Apriltag3](https://github.com/AprilRobotics/apriltag)
@@ -110,28 +112,28 @@ Each of the boards presented in [Section 2.2](#22-board-compatibility) requires
Each detector has several parameters which control its speed, detection rate, and precision. In case the user requires to change the default parameters, it can be done directly from the UI without the need to restart the tool by clicking `Detector parameters` placed in the main window. Once the user does so, the window from Figure 8 is displayed, where the user can freely modify the parameters.
-
+
Fig 8. Detection parameters
If the detector is property configured, once a board is detected, the pattern's corners or centers are displayed as shown in Figure 9.
-
+
Fig 9. Board detection
Additionally, if the user scrolls in the image, sub-pixel level visualization is also available (see Figure 10).
-
+
Fig 10. Zoomed-in visualization
Finally, the detections' statistics are also displayed in the main window as shown in Figure 11.
-
+
Fig 11. Detection results
@@ -140,7 +142,7 @@ Finally, the detections' statistics are also displayed in the main window as sho
Board detections can be used directly to form a database to optimize the camera intrinsics. However, bad detections, computational constraints, and redundant data need to be considered in order to produce the best calibration possible. In Sections 2.4.1 and 2.4.2 sections we detail how we implement these aspects, and the parameters that control these processes can be modified by clicking the `Data collection parameters` present in the main window as shown in Figure 12.
-
+
Fig 12. Data collection parameters
@@ -150,7 +152,7 @@ As shown in Figure 11, we compute several aspects related to the detection. In w
- Far away boards may produce imprecise detections, so we set a limit to the max limit we accept board detections
- Boards facing away from the image plane usually result in higher detection errors, so we also set a limit to the angle of the board with respect to the z-axis seen from the camera.
-- In some rare cases, the detectors mistake the order of the corners/centers. In order to filter out these cases, we compute the linear error, defined as the average line-point error from edges in the pattern and intermediate points (See figure 9), and set a threshold to it.
+- In some rare cases, the detectors mistake the order of the corners/centers. In order to filter out these cases, we compute the linear error, defined as the average line-point error from edges in the pattern and intermediate points (See Figure 9), and set a threshold to it.
- A good detection should be able to be fitted correctly with a camera intrinsic calibrator. For this reason, we also calibrate the camera intrinsics with each detection, to evaluate how good the detection is by observing the reprojection error produced by this calibration.
#### 2.4.2 Redundant detection rejection
@@ -170,37 +172,37 @@ In order to understand the data collection process, and guide the user to place
Figure 12 shows an example where few samples have been collected and Figure 13 shows an example where more samples have been collected. In order to improve the database, the user should move the board to areas in which the heatmap is displayed in blue.
-|  |  |
-| :--------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------: |
-| Fig 12. Data collection heatmap (few samples) | Fig 13. Data collection heatmap |
+|  |  |
+| :---------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------: |
+| Fig 12. Data collection heatmap (few samples) | Fig 13. Data collection heatmap |
The status of the data collection can also be observed in the main window, where the number of samples collected and the occupancy rate of the previously mentioned heatmaps is displayed (See Figure 14).
-
+
Fig 14. Detection results
Finally, we also provide a visualization for the database statistics, which can be enabled by clicking the `View data collection statistics` (an example can be observed in Figure 15).
-
+
Fig 15. Detection results
-### 2.5 Calibration and visualization
+### 2.5 Calibration and Visualization
Once enough data is collected, the user can execute the calibration routine by pressing the `Calibrate` button. Additionally, the parameters of the calibration process can also be modified directly from the GUI by pressing the `Calibration parameters` button (See Figure 16).
-
+
Fig 16. Calibration parameters
The calibration routine consists of the following steps (most of these steps are optional and can be configured as explained previously):
- Filter detection outliers using RANSAC
-- Subsample the inliers either via greedy entropy maximization or uniformingly in the case that the number of inliers is higher than the max calibration samples.
+- Subsample the inliers either via greedy entropy maximization or uniformly in the case that the number of inliers is higher than the max calibration samples.
- Calibrate using the subsamples inliers
- Filter out samples that have high reprojection error
- Calibrate the model again using only the inliers from the last filter
@@ -209,25 +211,25 @@ Once the calibration process ends, visualizations of the results are launched au
Figure 17 presents the statistics of the training set along the different steps in the calibration, allowing the user to identify any data issues along the pipeline. Then, Figure 18 displayed error statistics conditioned on the spatial position of the detections and their orientation angle, permitting the user to pinpoint errors in the resulting model and to identify potential outliers. Afterward, Figure 19 presents the reprojection errors for the different sets (training, calibration inliers, and evaluation). Finally, Figure 20 presents the final, summarized statistics of the calibration, which are displayed in the main window.
-
+
Fig 17. Data statistics during calibration
-
+
Fig 18. Reprojection error by spatial location and board orientation
-
+
Fig 19. Reprojection error among among different sets
-
+
Fig 20. Detection results
#### 2.5.1 Camera intrinsics model and output format
-The model used to represent the camera intrinsics correspond to the one used in [OpenCV](https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html), which is adopted by ROS in its `image_pipeline` to perform [rectification](http://wiki.ros.org/image_pipeline/CameraInfo). The output format used by tool corresponds to the same one used in [ROS](http://wiki.ros.org/camera_calibration_parsers), so it can be used directly by most ROS camera drivers.
+The model used to represent the camera intrinsics corresponds to the one used in [OpenCV](https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html), which is adopted by ROS in its `image_pipeline` to perform [rectification](http://wiki.ros.org/image_pipeline/CameraInfo). The output format used by the tool corresponds to the same one used in [ROS](http://wiki.ros.org/camera_calibration_parsers), so it can be used directly by most ROS camera drivers.
diff --git a/docs/tutorials/mapping_based_calibrator.md b/docs/tutorials/mapping_based_calibrator.md
new file mode 100644
index 00000000..0186b9a4
--- /dev/null
+++ b/docs/tutorials/mapping_based_calibrator.md
@@ -0,0 +1,162 @@
+# mapping_based_calibrator
+
+In this tutorial, we present a hands-on tutorial of the `mapping_based_calibrator`, particularly its lidar-lidar calibration capabilities. Although we provide a pre-recorded rosbag, the flow of the tutorial is meant to show the user the steps they must perform in their own use cases with live sensors.
+
+General documentation regarding this calibrator can be found [here](../../calibrators/mapping_based_calibrator/README.md).
+
+## Setup
+
+This tutorial assumes that the user has already built the calibration tools.
+Installation instructions can be found [here](../../README.md).
+
+## Data preparation
+
+Please download the data (rosbag) from this [link](https://drive.google.com/drive/folders/1_pGds5HDyt8C55sD2qEH4TJMGzIOCCyV).
+
+The rosbag includes four pointcloud topics published by different lidar sensors and also includes `/tf_static` information.
+
+Note that in the real-world environment, the user should record a rosbag with all of the lidar topics and tf topics that are needed, which should be similar to the provided bag. Afterward, the user could start driving the vehicle to collect the data in the rosbag and then calibrate sensors with the recorded rosbag.
+
+## Environment preparation
+
+### Overall calibration environment
+
+The required space for calibration depends on the vehicle and sensors used. It is recommended to have a large enough space for the vehicle to drive around 30 to 50 meters in away that the calibration lidars observe areas that are mapped through the vehicle's trajectory. It is also recommended to ensure that the environment is rich in natural landmarks suitable for registration-based mapping in all directions. This will help the lidar capture sufficient details beyond simple features like lane surfaces or walls.
+
+### Vehicle
+
+Before starting the calibration, the user needs to drive the vehicle to collect the pointcloud for building the map. While recording data during the experiment, slow down the vehicle's speed as much as possible. For instance, driving slower than 2 km/hr is good for recording quality data. Also, during the experiment, try to avoid people walking around the vehicle and keep the surroundings static.
+
+## Launching the tool
+
+In this tutorial, we use the RDV of TIER IV (R&D Vehicle).
+First, run the sensor calibration manager:
+
+```text
+ros2 run sensor_calibration_manager sensor_calibration_manager
+```
+
+In `Project`, select `rdv`, and in `Calibrator`, select `mapping_based_calibrator`. Then, press `Continue`.
+
+
+
+
+
+A menu titled `Launcher configuration` should appear in the UI, and the user may change any parameter he deems convenient. However, for this tutorial, we use the default values. After configuring the parameters, click `Launch`.
+
+
+
+
+
+The following UI should be displayed. When the `Calibrate` button becomes available, click it.
+If it does not become available, it means that either the required `tf` or services are not available. In this case, since the `tf` are published by the provided rosbag, run the bag with the command `ros2 bag play lidar_lidar.db3 --clock -r 0.5` and click the `Calibrate` button.
+
+
+
+
+
+Note: In the [launch file](../../sensor_calibration_manager/launch/rdv/mapping_based_lidar_lidar_calibrator.launch.xml), the top lidar is set as `mapping lidar`, and other lidars as `calibration lidars`.
+
+## Construct a map
+
+Once the user clicks the `Calibrate` button, the first step of the calibration process will automatically start building the map by using the NDT or GICP algorithm with the `mapping lidar`. The user can visualize the process of building the map on `RViz`.
+
+
+
+
+
+The user can also see the log in the console, which shows that the map is being built.
+
+```text
+[mapping_based_calibrator-1] [calibration_mapper]: ROS: New pointcloud. Unprocessed=1 Frames=26 Keyframes=2
+[mapping_based_calibrator-1] [calibration_mapper]: Registrator innovation=0.00. Score=0.04
+[mapping_based_calibrator-1] [calibration_mapper]: New frame (id=26 | kid=-1). Distance=2.04 Delta_distance0.11 Delta_time0.10. Unprocessed=0 Frames=27 Keyframes=2 (mappingThreadWorker())
+[mapping_based_calibrator-1] [calibration_mapper]: ROS: New pointcloud. Unprocessed=1 Frames=27 Keyframes=2
+[mapping_based_calibrator-1] [calibration_mapper]: Registrator innovation=0.00. Score=0.04
+[mapping_based_calibrator-1] [calibration_mapper]: New frame (id=27 | kid=3). Distance=2.15 Delta_distance0.11 Delta_time0.10. Unprocessed=0 Frames=28 Keyframes=3 (mappingThreadWorker())
+[mapping_based_calibrator-1] [calibration_mapper]: ROS: New pointcloud. Unprocessed=1 Frames=28 Keyframes=3
+[mapping_based_calibrator-1] [calibration_mapper]: Registrator innovation=0.00. Score=0.01
+[mapping_based_calibrator-1] [calibration_mapper]: New frame (id=28 | kid=-1). Distance=2.26 Delta_distance0.11 Delta_time0.10. Unprocessed=0 Frames=29 Keyframes=3
+```
+
+When the rosbag finishes, the user should see the pointcloud map and the path of the lidar frames similar to the ones in the following figure:
+
+
+
+
+
+## Estimate transformations
+
+The process of estimating transformations sends the corresponding service call with `ros2 service call /stop_mapping std_srvs/srv/Empty` in the terminal. Note that the user can send this command before the rosbag ends if they think the data collected is sufficient for calibration.
+
+In this tutorial, we send the command after the rosbag runs until the end. Once the command is sent, the displayed text should be as follows:
+
+```text
+[mapping_based_calibrator-1] [mapping_based_calibrator_node]: Mapper stopped through service (operator()())
+[mapping_based_calibrator-1] [calibration_mapper]: Mapping thread is exiting (mappingThreadWorker())
+[mapping_based_calibrator-1] [mapping_based_calibrator_node]: Beginning lidar calibration for pandar_front (operator()())
+```
+
+This process may take some time, as it involves multiple lidars' calibration. Users should remain patient and monitor the console output to track the progress of the calibration.
+
+Once the process is complete, the displayed text should be as follows:
+
+```text
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: Calibration result as a tf main lidar -> lidar_calibrator(pandar_left)
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: translation:
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: x: -0.001519
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: y: -0.609573
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: z: -0.366957
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: rotation:
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: x: 0.346912
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: y: 0.000018
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: z: -0.005994
+[mapping_based_calibrator-1] [lidar_calibrator(pandar_left)]: w: 0.937887
+[mapping_based_calibrator-1] [mapping_based_calibrator_node]: Lidar calibration for pandar_left finished
+[mapping_based_calibrator-1] [mapping_based_calibrator_node]: Sending the results to the calibrator manager
+```
+
+The user can also see the three different colors of pointcloud in `RViz`. White for the map from the `mapping lidar`, red for the initial pointcloud from the `calibration lidars`, and green for the calibrated pointcloud from the `calibration lidars`.
+
+
+
+
+
+## Results
+
+After the estimation transformations process finishes, the `sensor_calibration_manager` will display the results in the UI and allow the user to save the calibration data to a file.
+
+In the UI of the rdv project, three different TF trees are displayed: `Initial TF Tree`, `Calibration Tree`, and `Final TF Tree`.
+
+- The `Initial TF Tree` presents the initial TF connections between sensors needed for calibration.
+- The `Calibration Tree` shows the calibrated transformation between sensors, in this tutorial, `pandar_top`, `pandar_front`, `pandar_right`and `pandar_left`.
+- The `Final TF Tree` depicts the TF tree after incorporating the updated calibrated transformation. As autoware utilizes the concept of [sensor_kit](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/creating-vehicle-and-sensor-model/creating-sensor-model/), the final transformations required to comply to the specifications is `sensor_kit_base_link` to `pandar_front_base_link`, `pandar_left_base_link`, and `pandar_right_base_link`. These transformations are performed by the [calibrator interface](../../sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py) related to this project. The red arrows indicate that the final transformations changed after the calibration process.
+
+
+
+
+
+To evaluate the calibration results, users can measure static objects within the pointcloud map, such as stationary vehicles, traffic cones, and walls.
+
+The image below displays the vehicle within the pointcloud, allowing for a comparison of results before and after calibration. It is evident that the initial pointcloud from `calibration lidars` (shown in red) has been successfully calibrated (shown in green) and is now aligned with the `mapping lidar` (shown in white).
+
+
+
+
+
+## FAQ
+
+- Why does the calibration fail?
+
+ - In most cases, the failure is due to mapping issues. The possible error messages are listed below and should be displayed in the console. For these cases, restart the experiment and drive more stably and slowly.
+ - Mapping failed. Angle between keyframes is too high.
+ - Mapping failed. Interpolation error is too high.
+ - Mapping failed. Acceleration is too high.
+ - Bad initial calibration is also a common cause for failures in the calibration process. If the mapping succeeds and there are good calibration features, but still the calibration fails it is usually due to the nature of classic pointcloud registration algorithms.
+ - Check the `RViz` to see if any keyframe number on the path is red (normally it is white). If it is red, there is a chance that the motion of the vehicle is not smooth. We recommend the user calibrate with more stable movement again.
+ - If it is not feasible to restart the experiment, the user could tune the parameters in the `Calibration criteria parameters` described in the [documentation](../../calibrators/mapping_based_calibrator/README.md). However, keep in mind that if the user sets the threshold too high, the accuracy of the calibration result will also decrease.
+ - Check whether all of the lidars apply time synchronization.
+ - Make sure that the environment is rich in natural landmarks suitable for registration-based mapping in all directions. This will help the lidar capture sufficient details beyond simple features like lane surfaces or walls.
+
+- Which registration algorithm (NDT or GICP) should I select for mapping?
+ - In our previous experiments, GICP gives better results for the mapping but takes more time to build the map. On the other hand, NDT is faster but sometimes does not build an accurate map such as when ground points do not align in a plane.
diff --git a/docs/tutorials/marker_radar_lidar_calibrator.md b/docs/tutorials/marker_radar_lidar_calibrator.md
new file mode 100644
index 00000000..a50a2ee0
--- /dev/null
+++ b/docs/tutorials/marker_radar_lidar_calibrator.md
@@ -0,0 +1,251 @@
+# marker_radar_lidar_calibrator
+
+In this tutorial, we present a hands-on tutorial of the `marker_radar_lidar_calibrator`. Although we provide a pre-recorded rosbag, the flow of the tutorial is meant to show the user the steps they must perform in their own use cases with live sensors.
+
+General documentation regarding this calibrator can be found [here](../../calibrators/marker_radar_lidar_calibrator/README.md).
+
+## Setup
+
+This tutorial assumes that the user has already built the calibration tools.
+Installation instructions can be found [here](../../README.md).
+
+## Data preparation
+
+Please download the data (rosbag) from this [link](https://drive.google.com/drive/folders/1G1n2AV47gbQFKQtlzbHJPeV10m5_uMMk).
+
+The rosbag includes three different topics: `/sensing/radar/front_center/objects_raw`, `/sensing/lidar/front_lower/pointcloud_raw`, and `/tf_static`.
+
+## Environment preparation
+
+### Overall calibration environment
+
+The required space for calibration depends on the vehicle and sensors used. An empty and open space in which the ground acts as a plane provides an ideal calibration environment.
+
+Static objects are allowed as they they are ignored with background models during calibration. However moving objects will difficult the process and may require action from the operator (e.g., if a moving object is deemed a corner reflector, the user will need to manually discard said data).
+
+On the other side, the ground being leveled is not always a hard requirement. However, but if not met, the user will have to dedicate time to evaluate if ground segmentation is needed, and if indeed it is, tune the parameters until foreground extraction works correctly.
+
+### Radar reflector
+
+It is recommended to utilize a tripod to adjust the height of the radar reflector and also modify its center to align with the radar sensor. More information about the radar reflector can be found in the [general documentation](../../calibrators/marker_radar_lidar_calibrator/README.md#radar-reflector).
+
+Before attempting to take calibration data from the reflectors, make sure that they can be detected by both sensors, which can be done visually with `RViz`.
+
+## Launching the tool
+
+In this tutorial, we use the X2 project as an example.
+First, run the sensor calibration manager by executing the following command:
+
+```text
+ros2 run sensor_calibration_manager sensor_calibration_manager
+```
+
+In `Project`, select `x2`, and in `Calibrator`, select `marker_radar_lidar_calibrator`. Then, press `Continue`.
+
+
+
+
+
+A menu titled `Launcher configuration` should appear in the UI, and the user may change any parameter he deems convenient.
+For this tutorial, we modify the default value of `radar_name` from `front_left` to `front_center`. After configuring the parameters, click `Launch`.
+
+
+
+
+
+The following UI should be displayed, and when the `Calibrate` button becomes available, click it to start the calibration process.
+However, if it does not become available, it means that either the required `tfs` or services are not available. In this case, since the `tfs` are published by the provided rosbag, run the bag with the command `ros2 bag play radar_lidar.db3 --clock -r 0.5` and click the `Calibrate` button.
+
+
+
+
+
+### Extracting the background models
+
+Once the user starts playing the tutorial rosbag, the pointcloud should appear in `RViz` as shown in the example below. Press the `Extract Background Model` button in the UI to initiate the background extraction process.
+
+Note that the user should remove the radar reflector from the calibration area before this step. If any moving object enters the calibration area at this point, the area that these objects pass through will be marked as background and thus will not be usable for calibration in later steps.
+
+
+
+
+
+Once the user clicks the button, it will become unavailable in the UI until the process finishes. For a more detailed status of the background extraction process, the user can check the console logs.
+
+
+
+
+
+Once the background is extracted, the `Add lidar-radar pair` button will become enabled, as shown in the following image. After this, the user can start moving radar reflectors into the calibration area.
+
+
+
+
+
+Another way to confirm that the background model extraction finished, is to check the console output. The following text should be displayed upon completion:
+
+```text
+[marker_radar_lidar_calibrator]: Finished background model initialization
+```
+
+To visually confirm the results of the background extraction process, a pointcloud representation of the background models is published in the `lidar_background_pointcloud` and `lidar_foreground_pointcloud` topics. Since their visualization can confuse the user during calibration, they are not rendered by default and the user needs to enable them in `RViz` if needed. In the following image (upper left and lower left) examples of the background model are presented, where each point represents a background voxel.
+
+In the same fashion, the upper right and lower right images correspond to the `lidar_foreground_pointcloud` and `radar_foreground_pointcloud` topics respectively.
+
+
+
+
+
+
+
+
Lidar background pointcloud (in white).
+
Lidar foreground pointcloud (in magenta). The raw lidar pointcloud (in white) is shown for visualization purposes.
+
+
+
+
+
+
+
+
+
+
Radar background pointcloud (in white).
+
Radar foreground pointcloud (in magenta). The raw lidar pointcloud (in white) is shown for visualization purposes.
+
+
+
+### Adding lidar-radar pairs
+
+After the background model has been extracted, the user can carry the radar reflector (with the tripod) and place it in the [calibration area](../../calibrators/marker_radar_lidar_calibrator/README.md#pro-tipsrecommendations). Once the reflector is positioned, the user should move away from it to avoid (otherwise, there is a hight risk of both objects coming part of the same cluster).
+
+In the tutorial rosbag, the user will see that both the human and the radar reflector (with a tripod) are identified as foreground objects in the image below.
+
+In the image, the colored points represent different lidar foreground clusters. The purple lines indicate radar foreground detections, appearing as lines due to the radar's lack of elevation data, making the z-axis unknown. The blue point is the estimated center of the radar reflector derived from the lidar pointcloud. There is no blue point on the human cluster because the calibrator filters out clusters where the highest point in the cluster exceeds the specified threshold.
+
+
+
+
+
+When a purple line connects the purple point (the radar estimation of the reflector) and the blue point (the lidar estimation of the reflector), the user can press the `Add lidar-radar pair` button to register them as a pair. The line represents that the detections in each modality recognize each other as their best match, thus forming a valid pair. If this does not happen, the initial calibration may be too far from the real value for the pairing heuristic to succeed.
+
+Afterward, if the pair that the user added converges, it will be added to the data used for calibration. Additionally, the colors of the markers will change: the white point indicates the lidar estimation, the red point marks the initial radar estimation, and the green point signifies the calibrated radar estimation.
+
+
+
+
+
+As described in the [Step 3: Matching and filtering](../../calibrators/marker_radar_lidar_calibrator/README.md#step-3-matching-and-filtering) in the general documentation, we rely on the initial calibration to pair each lidar detection with its closest radar detection, and vice versa. Below, we show examples of good and bad initial calibration.
+
+In both images, the calibrator detects one lidar detection (blue points) and two radar detections (purple lines). The radar detections identify two potential reflectors: a human and a radar reflector (located closer to the bottom of the image). In the good initial calibration image, the blue point from lidar detection will correctly match the radar detection, as they are the closest to each other. However, in the image of bad initial calibration, the lidar detection will incorrectly match the radar detection of the human. If the user identifies that the initial calibration is not good enough for the matching process to succeed, he will need to address this issue before attempting to continue with this process.
+
+
+
+
+
+
+
+
Good initial calibration.
+
Bad initial calibration.
+
+
+
+### Deleting previous lidar-radar pairs
+
+During the calibration, if there are any mismatched pairs (e.g., a human appearing in front of both the radar and lidar), the user can click the `Delete previous lidar-radar pair` button to remove the previous outlier pair.
+
+To test this feature, the user can click the previous button to delete the latest pair. An example of the status before and after using this feature is presented in the following image:
+
+
+
+
+
+
+
+
Before deletion.
+
After deletion.
+
+
+
+The console should also show the following text.
+
+```text
+[marker_radar_lidar_calibrator]: The last track was successfully deleted. Remaining converged tracks: 4
+```
+
+### Calibration error metrics
+
+This package also provides a metric plotter for real-time visualization to help users determine whether enough samples have been collected and identify potential errors in sampling or the presence of outliers.
+
+
+
+
+
+The top subplots display the cross-validation errors, while the bottom subplot shows the average errors in the calibration procedure. Plotting for the average errors begins after three pairs have been collected. For the cross-validation errors, plotting starts after four pairs have been collected.
+
+The cross-validation error is computed as follows: At any points in time, N pairs have been collected (5 in the previous example), and the cross-validation error is computed for every number of pairs K between 3 and N-1. For every value of K, all potential combinations of size K (NCK or N choose K) are computed, calibration is attempted using those K pairs, and the calibration error is computed over the remaining N - K pairs. Finally, the value of the cross-validation error at `x=K` is the averaged calibration error with the area shown representing the standard deviation of said calibration error.
+
+Note that the value of `x=N-1` represents the leave-on-out cross-validation strategy. Additionally, it is normal for the first few values in the graph to present high cross-validation errors when the number of total samples (N) increase, due to the possibility of having degenerate samples of small sizes (e.g., radar pairs all in the same straight line from the sensors).
+
+The previous process is valid for both cross-validation distance and angle errors, and the users can use these values to determine when to stop the calibration process. When the cross-validation converges both in mean and has a low standard deviation, it can be considered a good point to stop calibrating. The particular criteria is left up to the user, since depending on the use cases, the required accuracy is also affected.
+
+### Sending the calibration result to the sensor calibration manager
+
+The user can click the `Send calibration` button once it is enabled. However, it is recommended to stop the calibration when the curve in the cross-validation error has converged. Therefore, in this tutorial, we run the calibration process until the bag is finished. Once the calibration has ended, the console should show similar message to the following ones:
+
+```text
+[marker_radar_lidar_calibrator]: Initial calibration error: detection2detection.distance=0.3279m yaw=1.5119 degrees
+[marker_radar_lidar_calibrator]: Final calibration error: detection2detection.distance=0.0576m yaw=0.1642 degrees
+[marker_radar_lidar_calibrator]: Final calibration error (rotation only): detection2detection.distance=0.0634m yaw=0.1774 degrees
+[marker_radar_lidar_calibrator]: The 2D calibration pose was chosen as the output calibration pose
+```
+
+Once the `Send calibration` button is clicked, the result will be sent to the sensor calibration manager. Afterward, no pairs can be added or deleted, as shown in the image below. Please make sure you want to end the calibration process before clicking the button.
+
+
+
+
+
+
+
+
Rosbag finished.
+
After clicking send calibration.
+
+
+
+## Results
+
+After the calibration process finishes, the `sensor_calibration_manager` will display the results in the UI and allow the user to save the calibration data to a file.
+
+In the UI of the X2 project, three different TF trees are displayed: `Initial TF Tree`, `Calibration Tree`, and `Final TF Tree`.
+
+- The `Initial TF Tree` presents the initial TF connections between sensors needed for calibration.
+- The `Calibration Tree` shows the calibrated transformation between sensors, in this tutorial, `front_center/radar_link` to `pandar_40p_front`.
+- The `Final TF Tree` depicts the TF tree after incorporating the updated calibrated transformation. As autoware utilizes the concept of [sensor_kit](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/creating-vehicle-and-sensor-model/creating-sensor-model/), the final transformation required to comply to the specifications is `front_unit_base_link` to `front_center/radar_link`. This transformation is performed by the [calibrator interface](../../sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py) related to this project. The red arrow indicates that the final transformation changed after the calibration process.
+
+
+
+
+
+To evaluate the calibration result, the user can check that the calibrated radar objects (green) are closer than the initial radar objects (red) to the lidar points (white).
+
+## FAQ
+
+- Why does the reflector detection not appear on `RViz`?
+
+ - Make sure the center of the reflector faces toward the radar sensor, and the height of the reflector matches the radar's.
+ - Make sure the height of the radar reflector is not larger than the `reflector_max_height` parameter.
+ - Make sure the radar reflector is not in the background voxel (visualize the topic mentioned before).
+
+- Why does the calibration error seem high?
+
+ - Make sure that there are no outliers in the calibration pairs list.
+ - Make sure that the initial calibration is good enough to match the lidar detection and radar detection correctly.
+ - Radars like the ARS408 (the one we use in this tutorial) have a resolution of 0.2m. Given that, there is a theoretical limit to how low the calibration error can be. If the radar resolution is low, it will strongly limit the lower bound of the calibration error.
+
+- When can I stop the calibration process?
+
+ - It is recommended to stop the calibration when the curve in the cross-validation error has converged.
+ - With more matched pairs without outliers, the calibration result should improve if the number of pairs increases.
+
+- In the cross-validation plot, why does the standard deviation for a sample size of 3 increase significantly when the overall sample size increases?
+ - When the overall number of samples increases, and we randomly select three samples to calculate the transformation, the likelihood of selecting three collinear samples also increases. This selection can lead to significant errors in the transformation for the remaining samples, resulting in a higher standard deviation.
diff --git a/docs/tutorials/tag_based_pnp_calibrator.md b/docs/tutorials/tag_based_pnp_calibrator.md
new file mode 100644
index 00000000..e0689631
--- /dev/null
+++ b/docs/tutorials/tag_based_pnp_calibrator.md
@@ -0,0 +1,159 @@
+# tag_based_pnp_calibrator
+
+In this tutorial, we present a hands-on tutorial of the `tag_based_pnp_calibrator`. Although we provide a pre-recorded rosbag, the flow of the tutorial is meant to show the user the steps they must perform in their own use cases with live sensors.
+
+General documentation regarding this calibrator can be found [here](../../calibrators/tag_based_pnp_calibrator/README.md).
+
+## Setup
+
+This tutorial assumes that the user has already built the calibration tools.
+Installation instructions can be found [here](../../README.md).
+
+## Data preparation
+
+Please download the data (rosbag) from this [link](https://drive.google.com/drive/folders/1eO_B_fdBdc8uI5a5LYU4jrVUS0OzRVEq).
+
+The provided rosbag includes four different topics: `/sensing/camera/camera6/camera_info`, `/sensing/camera/camera6/image_rect_color/compressed`, `/sensing/lidar/front_lower/pointcloud_raw`, and `/tf_static`.
+
+## Environment preparation
+
+### Overall calibration environment
+
+The required space for calibration depends on the vehicle and sensors used. During calibration, please always make sure that tags are detected by both camera and lidar. This can be done by checking whether the tags appear in `RViz` and the `image view` UI. For instance, a cyan rhombus around the tag in `RViz` represents a successful detection by the lidar, as shown in the image below. For the camera detections, if the tag is completely visible (black frame) in the `image view` UI, it should be detectable. So far, in our use cases, the tag is always detected as long as it is completely visible in the image.
+
+
+
+
+
+### Apriltag & Lidartag
+
+Details can be found in the [base documentation](../../calibrators/tag_based_pnp_calibrator/README.md)
+
+## Launching the tool
+
+In this tutorial, we use the X2 project as an example.
+First, run the sensor calibration manager:
+
+```text
+ros2 run sensor_calibration_manager sensor_calibration_manager
+```
+
+In `Project`, select `x2`, and in `Calibrator`, select `tag_based_pnp_calibrator`. Then, press `Continue`.
+
+
+
+
+
+A menu titled `Launcher configuration` should appear in the UI, and the user may change any parameter he deems convenient.
+For this tutorial, we modify the default value of `calibration_pairs` from `9` to `8` as the rosbag contains `8` pairs of detections. We also modify the `camera_name` from `camera0` to `camera6`. After configuring the parameters, click `Launch`.
+
+
+
+
+
+The following UI should be displayed. When the `Calibrate` button becomes available, click it.
+If it does not become available, it means that either the required `tf` or services are not available. In this case, since the `tf` are published by the provided rosbag, run the bag with the command `ros2 bag play camera_lidar.db3 --clock -r 0.5` and click the `Calibrate` button.
+
+
+
+
+
+## Calibration
+
+The calibration starts automatically after clicking the `Calibrate` button. The process will continue until the number of calibration detection pairs reaches the user-defined `calibration_pairs` in the `Launcher configuration`.
+
+When the user starts the calibration process and the sensor data is available, `RViz` and the `image view` should be displayed as shown below.
+
+
+
+
+
+After the tool detects enough lidartags and apriltags (the total of calibration points is at least `min_pnp_points`, considering that each tag provides 4 points), it will show the detection markers on `RViz` and the `image view` respectively. The text in `RViz` will also display the number of pairs of converged lidartag/apriltag detections so far.
+
+\*Note: in `RViz`, cyan-colored markers represent raw `lidartag` detections, whereas green ones correspond to tracked ones, and yellow ones represent tracked `apriltag` (camera) tracks. For the `image view`, cyan markers correspond to `apriltag` calibration points whereas magenta ones represent `lidartag` ones.
+
+
+
+
+
+Once the user observes the number of pairs increases in `RViz`, he should move the tag(s) to other positions to collect additional calibration data.
+
+**While moving the tag to another position, the user should move the tag decisively from one place to the other, not stopping and starting mid-way.**
+Please make sure that the new position is at least `calibration_min_pair_distance` from the closest detection in the set of converged detections and that the tag is in the FOV of both lidar and camera.
+
+Depending on the mount and the ground surface, the tags can oscillate considerably, which can be detrimental to the calibration process. In this case, the user should stop the tag with its hand.
+
+At the end of the calibration, we should get 8 detection pairs, as shown below.
+
+
+
+The output in the console should be as follows (variations in the numerical results may occur due to the nature of ROS):
+
+```text
+[tag_based_pnp_calibrator_node]: Initial reprojection error=15.41
+[tag_based_pnp_calibrator_node]: Current reprojection error=1.09
+[tag_based_pnp_calibrator_node]: Filtered reprojection error=1.10
+```
+
+## Results
+
+After the calibration process finishes, the `sensor_calibration_manager` will display the outcome in the UI and allow the user to save the calibration results to a file.
+
+In the UI of the X2 project, three different TF trees are displayed: `Initial TF Tree`, `Calibration Tree`, and `Final TF Tree`.
+
+- The `Initial TF Tree` presents the initial TF connections between sensors needed for calibration.
+- The `Calibration Tree` shows the calibrated transformation between sensors, in this tutorial, `camera6/camera_optical_link` to `pandar_40p_front`.
+- The `Final TF Tree` depicts the TF tree after incorporating the updated calibrated transformation. As autoware utilizes the concept of [sensor_kit](https://autowarefoundation.github.io/autoware-documentation/main/how-to-guides/integrating-autoware/creating-vehicle-and-sensor-model/creating-sensor-model/), the final transformation required to comply to the specifications is `front_unit_base_link` to `camera6/camera_link`. This transformation is performed by the [calibrator interface](../../sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py) related to this project. The red arrow indicates that the final transformation changed after the calibration process.
+
+
+
+
+
+At any point, the user can modify the `visualization options` on the right side of the `image view`. Setting the `Marker size (m)` to `0.04` and setting the `PC subsample factor` to `1` can help the user visualize the projected pointcloud on the image.
+
+
+
+
+
+Similarly, the `/initial_tf` (in the `visualization options`) can be set to `/current_tf` to observe how the detections are projected into the image before/during/after the calibration process, which constitutes a visual way to inspect the reprojection error and identify any potential errors.
+
+In the following images we can see how the projection looks using the initial calibration and the one obtained through this process. Note how the difference between cyan and magenta markers is either small or imperceptible.
+
+
+
+
+
+
+
+
Before calibration.
+
After calibration.
+
+
+
+## FAQ
+
+- Why does the tool fail to add calibration pairs?
+
+ - One possible reason is that the detections are too close to the previously collected data. In this case, the new detections are deemed redundant, and thus not accepted.
+ - The timestamps of the lidar and camera are not synchronized. This can be checked with `ros2 topic echo [topic_name] --field header.stamp`. Setting the parameter `use_receive_time` to `True` might help to solve the issue, but is not recommended as a long-term solution.
+ - The detections are not stable enough. This can happen due to the following reasons:
+ - The detection rate is not stable: this can happen when the lidar points inside the tag frames are not sufficient for the algorithm to detect them reliably, which usually happens when the tag is either far away from the sensor or outside its high-density zone (when applicable). In these cases, please move the tag to a position where enough points (scan lines) hit the tag. If the user forcefully calibrates under undesirable conditions, the results can get compromised.
+ - The tag is physically unstable due to wind, mounting issues, or other external factors. Even if the detector functions correctly, these conditions prevent the detection from converging. If this is the case, please eliminate all unwelcome external factors before attempting calibration. Forcefully calibrating under these conditions can compromise the results.
+
+- Why does the UI not launch?
+
+ - Check with `ros2 node list` if the relevant nodes have been launched. It is possible that the provided parameters do not match any of the valid arguments among other standard ROS issues.
+ - If the UI crashes (check the console for details), it is probably due to a bad PySide installation, invalid intrinsic parameters, invalid extrinsic parameters, etc.
+ - The timestamps of the lidar and camera are not synchronized.
+
+- Why does the reprojection error increase when more data is collected?
+
+ - When there are few samples, the model will fit the available data the best it can, even in the presence of noise (over-fitting) or wrong detections. When more data is collected, the error may increase to a certain extent, but that corresponds to the model attempting to fit all the data, this time unable to fit the noise, resulting in a higher error. However, it should reach a more-or-less table peak with about 10-15 pairs (depending on the data collection pattern/sampling).
+
+- Why does the reprojection error seem high?
+
+ - The intrinsics may not be accurate, thus limiting the performance of the method.
+ - The boards are not appropriate (are bent).
+ - The boards moved too much while calibrating.
+ - The lidar detections presented bad accuracy. Try collecting detections in areas where there is more resolution.
+ - There are some outliers when the user forces the calibrator to detect far-away lidar tags or the quality of the lidar is not good for lidartag detection.
diff --git a/docs/tutorials/tag_based_sfm_calibrator.md b/docs/tutorials/tag_based_sfm_calibrator.md
new file mode 100644
index 00000000..d0e7ccad
--- /dev/null
+++ b/docs/tutorials/tag_based_sfm_calibrator.md
@@ -0,0 +1,360 @@
+# tag_based_sfm_calibrator
+
+In this tutorial, we present a hands-on tutorial of the `tag_based_sfm_calibrator`, in particular, of its base-lidar calibration capabilities. Although we provide pre-recorded rosbags, the flow of the tutorial is meant to show the user the steps they must perform in their own use cases with live sensors.
+
+General documentation regarding this calibrator can be found [here](../../calibrators/tag_based_sfm_calibrator/README.md).
+
+## Setup
+
+This tutorial assumes that the user has already built the calibration tools.
+Installation instructions can be found [here](../../README.md).
+
+## Data preparation
+
+Please download the data from this [link](https://drive.google.com/drive/folders/1iFPjP_9BgzujqLnzlObT2eM44KAijmEN).
+We provide three types of data:
+
+- Intrinsic calibration images for the external camera.
+- Images taken with the external camera for SfM-based reconstruction.
+- Rosbags for calibration (containing images, intrinsics, and pointclouds).
+
+## Environment preparation
+
+### Overall calibration environment
+
+The required space for calibration depends on the vehicle and sensors used. For a normal consumer-level car, a space of `15m x 15m` should be sufficient.
+In addition to the space, the floor of the calibration space must be completely leveled, as the algorithm requires the floor to be modeled as a plane (this requirement comes from the definition of `base_link`).
+Finally, although not an absolute requirement, having walls, whiteboards, or other vertical structures where (auxiliar) tags can be placed improves the calibration process, since it adds important reference points during the scene reconstruction process.
+
+### Intrinsics calibration board
+
+Since we need the initial intrinsics for the external camera, we need a way to calibrate it. This package provides support for circle boards and apriltags-based calibration, although the user may choose to provide the intrinsics directly via the UI.
+
+### Calibration tags
+
+Although information on the different types of tags can be found in the [base documentation](../../calibrators/tag_based_sfm_calibrator/README.md), here we provide additional practical guidelines:
+
+#### Ground tags
+
+In this experiment, we print tags using regular paper/printer in B4 size. The tag size itself maximizes the payload size within the paper, while also allowing some margin for robust detection. Since we use regular paper, we assume its thickness is negligible and that the poses of the ground tags match the ground itself.
+The tags are affixed to the ground using regular tape and the users should make sure that the tags do not move at all during the experiment product of people or other objects moving around. Some recommendations in this regard are using strong tape and cleaning the surfaces before placing the tags.
+
+#### Auxiliar tags
+
+Auxiliary tags, while not required, are highly recommended, since the scene can not be covered with enough tag positions and orientations using just ground and waypoints tags. It is recommended to use large tag sizes to increase the detection range, but at the same time, larger tags may be difficult to place in plane surfaces, so the user must find a compromise depending on the available environment.
+
+#### Wheel tags
+
+Wheel tags are the elements that allow the algorithm to find the `base_link`. As such, it is essential to improve its detection precision as much as possible. Some key considerations that the user may want to take into account are:
+
+- Since each tag by itself provides 4 features (the corners) for SfM, instead of using a single tag per wheel, it is possible to use grids of tags. The size of the grid (number of rows and columns) must be as large as possible without sacrificing the ability of the external camera to detect the individual tags.
+- Since the tags will not be placed in a wall or the ground, but fixed via some mechanism to the wheel, they should be made from a rigid material that will not bend with time.
+- Great consideration must be paid to the mechanism with which the tag is affixed to the wheel. Since the `base_link` is computed from the intersection between the wheel tags projected to the ground, this aspect is critical (particularly to the yaw component of the pose).
+
+#### Waypoint tags
+
+Waypoints are the only moving elements during the calibration process and must detected by both cameras and lidars.
+Depending on the lidar model and the available space, the required waypoint size may vary, but so far we have had good results with 0.6m and 0.8m tags (the provided sizes correspond to an edge's size. In these cases the payloads are 0.45m and 0.6m).
+
+In addition to the waypoint size, which determines the physical positions in which a tag can be detected, it is of equal importance the structure in which the waypoint is mounted. Depending on the structure's shape and size, it may interfere with the lidar detection algorithm, so it is recommended to prepare a mount that holds the tag in a way that is not visible to the sensor (see the mount used for the waypoints in this tutorial).
+
+### Vehicle
+
+Vehicles have suspension systems that make the `base_link` definition an ambiguous one from the point of view of the sensors. The pose of the `base_link` seen from the sensor WILL change depending on the load present in the vehicle, and as such, the user will need to decide whether to calibrate either in a full/empty state. It is highly recommended that during the whole duration of the experiment, no person (or object) enters or leaves the car!
+
+### External camera
+
+To construct the SfM graph and ultimately connect the calibration sensors (in this case a single lidar) with the wheel tags, we make use of an additional camera, which we dub the `external camera`. In principle, the camera can be of any nature as long as it has fixed intrinsics parameters during the experiment. We have so far used Nikon DSLR cameras with good results, but have had also acceptable results with certain point-and-shoot cameras.
+
+Note: we assume the user knows how to use a camera and make no attempt at explaining camera fundamentals in this tutorial.
+
+Camera selection and usage recommendations:
+
+- It is recommended to use cameras with the highest (real) resolution possible and use image formats with as little compression as possible (DSLR cameras have options like normal, fine, ultra-fine, and so on).
+- It is recommended to use a wide lens to capture as much of the environment as possible. Otherwise, the camera can not capture a high number of tags in a single image. However, fish-eye lenses are not supported.
+- Use the highest F-number possible (smaller aperture). For example, we use at least f/14. This ensures that the tags will be in focus at the relevant distances.
+- Use a relatively high shutter speed. The specific number will depend on the user's ability, but while it is acceptable to have underexposed photos, it is not acceptable to have blurred ones (motion while exposing the sensor to light).
+- Regarding the ISO value, while in photography it is preferred to have low ISO values, in this problem setting (detecting tags), values over 1000 are not an issue (taking into consideration the fact that we require a small aperture and high shutter speeds, higher ISO values become necessary).
+- The use of flash is optional and its use is left up to the user
+- Even when using prime lenses, the focus ring modifies the camera intrinsics. For this reason, it is required to have the focus set to manual in both the camera lens and the body (when applicable). To set its value, it is recommended to either set it to infinity or first use auto-focus once and then fix the focus by setting it to manual.
+
+## Launching the tool
+
+In this tutorial, we use the RDV of TIER IV (R&D Vehicle).
+First, run the sensor calibration manager:
+
+```text
+ros2 run sensor_calibration_manager sensor_calibration_manager
+```
+
+In `project`, select `rdv`, and in `calibrator`, select `tag_based_sfm_base_lidar_calibrator`. Then, press `Continue`.
+A menu titled `Launcher configuration` should appear in the UI, and the user may change any parameter he deems convenient. However, for this tutorial, we will use the default values. After configuring the parameters, click `Launch`.
+
+The following UI should be displayed. When the `Calibrate` button becomes available, click it.
+If it does not become available, it means that either the required `tf` or services are not available. In this case, since the `tf` are published by the provided rosbags, run it for a few seconds and then pause it (`ros2 bag play scene0.db3 --clock -r 0.5`).
+
+
+
+## External camera intrinsic calibration
+
+Before collecting scene images for reconstruction using the `external camera`, its intrinsics need to be computed.
+To do so, take photos of a calibration board like the ones in the following images. Focus on different scales (size of the board in the image), out-plane rotations, and positions within the image. There is no hard requirement on the number of images, but around 30 is a often sufficient. This calibration can be refined afterward during reconstruction.
+
+
+
+
+
+
+
+
Good example. The board is in the center and covers the image well.
+
Good example. Adds variation with an out-of-plane rotation.
+
+
+
+
+
+
+
Good example. Focuses on the corners of the image.
+
Good example. Adds variation in the distance from the camera.
+
+
+
+
+
+
+
Bad example. The board is not completely covered in the image.
+
Bad example. The board is not completely covered in the image.
+
+
+
+Once enough images have been collected, transfer the images from the camera to the computer or ECU performing the calibration process, and press `Calibrate external camera intrinsics` as shown in the following image:
+
+
+
+
+
+If there are no issues, the output in the console should be similar to the following one:
+
+```text
+[tag_based_sfm_calibrator-1] [INFO] [1713488090.641210235] [intrinsics_calibrator]: Camera matrix:
+[tag_based_sfm_calibrator-1] [4816.165518235453, 0, 2160.348608760617;
+[tag_based_sfm_calibrator-1] 0, 4821.30868416463, 1552.554137385826;
+[tag_based_sfm_calibrator-1] 0, 0, 1]
+[tag_based_sfm_calibrator-1] [INFO] [1713488090.641218916] [intrinsics_calibrator]: Distortion coefficients:
+[tag_based_sfm_calibrator-1] [-0.07340778013968814, 0.02950049592323137, 0.005167166916447808, 0.002758631510330731, 0]
+[tag_based_sfm_calibrator-1] [INFO] [1713488090.641265465] [intrinsics_calibrator]: Undistorted camera matrix:
+[tag_based_sfm_calibrator-1] [4750.68994140625, 0, 2168.846093300279;
+[tag_based_sfm_calibrator-1] 0, 4784.35107421875, 1560.251275314979;
+[tag_based_sfm_calibrator-1] 0, 0, 1]
+[tag_based_sfm_calibrator-1] [INFO] [1713488092.917012306] [tag_based_sfm_calibrator]: k = [4816.165518235453, 0, 2160.348608760617;
+[tag_based_sfm_calibrator-1] 0, 4821.30868416463, 1552.554137385826;
+[tag_based_sfm_calibrator-1] 0, 0, 1]
+[tag_based_sfm_calibrator-1] [INFO] [1713488092.917062856] [tag_based_sfm_calibrator]: d = [-0.07340778013968814, 0.02950049592323137, 0.005167166916447808, 0.002758631510330731, 0]
+[tag_based_sfm_calibrator-1] [INFO] [1713488092.917079752] [tag_based_sfm_calibrator]: new_k = [4750.68994140625, 0, 2168.846093300279;
+[tag_based_sfm_calibrator-1] 0, 4784.35107421875, 1560.251275314979;
+[tag_based_sfm_calibrator-1] 0, 0, 1]
+```
+
+## Scene data collection
+
+To reconstruct the scene and find the `base_link` pose, we need to obtain data from one or more scenes.
+In each scene, waypoints are placed in different positions, the sensors record the detections from these waypoints, and using the external camera, photos from the scene, including the waypoints, are taken.
+
+The number of required scenes depends on the number of physical waypoints available. We recommend at least 5 waypoint positions in total. In the provided example, we use 2 waypoints and a total of 3 scenes, which correspond to 6 waypoint positions. The placement of the waypoints should be as uniform as possible around the vehicle.
+
+Note: physically, there are 4 waypoints, but only two are visible to the calibration lidar in this example. The other waypoints were intended to calibrate side lidars, which we removed from this tutorial.
+
+### Scene preparation
+
+Before the first scene, all the tags need to be placed. In the previous guidelines, there are instructions on how to place ground, auxiliar, and wheel tags. Once per scene, at the beginning of it, the waypoint tags must be placed in their new positions. In the example data we provide there are three scenes (one per rosbag). The following images provide a visualization of each scene as it would appear in the default `RViz` profile.
+
+
+
+
+
+
+
+
+
Scene 0
+
Scene 1
+
Scene 2
+
+
+
+### Add calibration sensor detections to the scene
+
+In each scene, after the waypoint positions have been decided (they must not move for the rest of the scene), the user must confirm that they are being correctly observed by the sensors. This can be done by checking if a cyan frame appears as a marker in the position of the waypoint, as shown in the previous images.
+
+Once the user has confirmed that the waypoints are being detected by the calibration sensor, click the `Add detections to scene` button. The displayed text should be as follows:
+
+```text
+(for the first scene)
+[tag_based_sfm_calibrator-1] [INFO] [1713487882.091919629] [tag_based_sfm_calibrator]: Added 2 detections to lidar=pandar_top (1 scenes)
+
+(for the second scene)
+[tag_based_sfm_calibrator-1] [INFO] [1713487951.874014175] [tag_based_sfm_calibrator]: Added 2 detections to lidar=pandar_top (2 scenes)
+
+(for the third scene)
+[tag_based_sfm_calibrator-1] [INFO] [1713487988.319661398] [tag_based_sfm_calibrator]: Added 2 detections to lidar=pandar_top (3 scenes)
+```
+
+### Collecting external camera images
+
+After the calibration sensors have added the detections to the scene, the user must start taking photos with the external camera to cover the scene.
+
+The user can observe the sample data's external camera images to get a sense of how the scene must be covered while taking photos.
+Here we make a list of good and bad photos that the user must keep in mind.
+
+
+
+
+
+
+
+
In each scene, the waypoints change positions, so it is important to take several photos of them from different angles, linking them to the scene.
+
The ultimate objective is to link the calibration sensor to the wheels. Since sensors can only detect waypoints (generally), taking photos that contain both wheels and waypoints is very useful to constrain the optimization problem and improve its performance.
+
+
+
+
+
+
+
In the optimization problem there are several ground and auxiliar tags, but only a few waypoints and only two wheel tags. It is important to take photos of the wheel tags from different positions and angles as much as possible.
+
Photos that contain too few tags do not provide enough information to the graph and internally they may be ignored. Such photos will not cause an issue, but it is better to take photos that contain as many tags as possible.
+
+
+
+
+
+
+
Photos that contain large portions of the scene (and several tags) are useful for the optimization problem. However, tags that are not completely inside the image may cause issues if they confuse the detectors.
+
Tags with high out-of-plane rotations may incur in bad initial poses, so they may cause issues downstream. Avoid when possible.
+
+
+
+### Add the external camera images to scenes
+
+Once all the scenes have been collected (3 in this case), download the images from the camera to the computer, and organize them by scenes. The folder structure should be as follows:
+
+```text
+scene0/....JPG
+scene1/....JPG
+scene2/....JPG
+```
+
+Then, press `Add external camera images to scene` and select the folder that contains the scene folders. The output should look as follows:
+
+
+
+
+
+```text
+[tag_based_sfm_calibrator-1] [INFO] [1713488025.748589413] [tag_based_sfm_calibrator]: Attempting to add external camera images to scene id=0
+[tag_based_sfm_calibrator-1] [INFO] [1713488025.748655706] [tag_based_sfm_calibrator]: Added 67 external images to scene id=0 (scenes=3)
+[tag_based_sfm_calibrator-1] [INFO] [1713488025.748673405] [tag_based_sfm_calibrator]: Attempting to add external camera images to scene id=1
+[tag_based_sfm_calibrator-1] [INFO] [1713488025.748689132] [tag_based_sfm_calibrator]: Added 39 external images to scene id=1 (scenes=3)
+[tag_based_sfm_calibrator-1] [INFO] [1713488025.748701278] [tag_based_sfm_calibrator]: Attempting to add external camera images to scene id=2
+[tag_based_sfm_calibrator-1] [INFO] [1713488025.748716456] [tag_based_sfm_calibrator]: Added 48 external images to scene id=2 (scenes=3)
+```
+
+## Data preprocessing
+
+Once the sensor detections, external camera images, and external camera intrinsics have been added, the `Process scenes` button should become enabled as shown in the following image.
+
+
+
+
+
+By pressing it, the calibrator will process all the external images, extracting the tag detections from them. The process should last a few minutes, and when it finishes, the `Calibrate base_link` button should become enabled, as shown in the following image:
+
+
+
+
+
+## Calibration
+
+Calibration starts when the user presses `Calibrate base_link`. The process itself takes only a few seconds, but drawing the results may take a few minutes.
+
+The output should be as follows:
+
+```text
+...
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054605510] [calibration_problem]: s2_e47 <-> a19 error: 0.42
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054614383] [calibration_problem]: s2_e47 <-> a18 error: 0.08
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054623589] [calibration_problem]: s2_e47 <-> s2_w1 error: 0.78
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054639306] [calibration_problem]: s2_e47 <-> t26 error: 1.74
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054648030] [calibration_problem]: s2_e47 <-> g90 error: 0.60
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054656894] [calibration_problem]: s2_e47 <-> g65 error: 0.59
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054665648] [calibration_problem]: s2_e47 <-> g63 error: 0.96
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054674242] [calibration_problem]: s2_e47 <-> g99 error: 0.51
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054683091] [calibration_problem]: s2_e47 <-> g60 error: 0.44
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054692072] [calibration_problem]: s2_e47 <-> g53 error: 1.17
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054700119] [calibration_problem]: Reprojection error statistics per tag type
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054707345] [calibration_problem]: AuxiliarTag reprojection errors: mean=0.57 min=0.07 max=1.83 observations=457
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054713259] [calibration_problem]: WaypointTag reprojection errors: mean=1.23 min=0.05 max=3.63 observations=123
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054717387] [calibration_problem]: WheelTag reprojection errors: mean=1.87 min=0.60 max=3.55 observations=25
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054725950] [calibration_problem]: GroundTag reprojection errors: mean=1.05 min=0.21 max=3.54 observations=647
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054730198] [calibration_problem]: Reprojection error statistics per sensor
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054741693] [calibration_problem]: external_camera reprojection errors: mean=0.91 min=0.07 max=3.63 observations=1246
+[tag_based_sfm_calibrator-1] [INFO] [1713490703.054746855] [calibration_problem]: l0 reprojection errors: mean=0.18 min=0.05 max=0.35 observations=6
+```
+
+Reprojection errors are usually around the pixel unit. If there are suspiciously high reprojection errors, the user can identify which pair of sensor/tag produced them in an attempt to identify the reason.
+
+```text
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.584850939] [tag_based_sfm_calibrator]: Finished optimization
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.715880844] [calibration_problem]: sensor_to_base_link: translation=[0.87021, 0.00364, -2.03938] quat=[0.00359, 0.00017, 0.99999, -0.00065]
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.715944539] [tag_based_sfm_calibrator]: base_link: initial and calibrated statistics statistics
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.715982820] [tag_based_sfm_calibrator]: initial: x=0.89800 y=0.00000 z=1.61100 roll=0.00000 pitch=-0.00000 yaw=-3.14159
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.715999169] [tag_based_sfm_calibrator]: calibrated: x=0.88486 y=0.00321 z=2.03307 roll=0.00035 pitch=-0.00719 yaw=3.14029
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716015803] [tag_based_sfm_calibrator]: base_link: initial to calibrated statistics
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716025804] [tag_based_sfm_calibrator]: normal angle difference: 0.412 degrees
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716036266] [tag_based_sfm_calibrator]: yaw angle difference: 0.075 degrees
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716046824] [tag_based_sfm_calibrator]: x: 0.028 m
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716057076] [tag_based_sfm_calibrator]: y: -0.004 m
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716067296] [tag_based_sfm_calibrator]: z: -0.428 m
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716080333] [tag_based_sfm_calibrator]: Initial ground plane model
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716089603] [tag_based_sfm_calibrator]: a=0.0000
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716104431] [tag_based_sfm_calibrator]: b=0.0000
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716114657] [tag_based_sfm_calibrator]: c=1.0000
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716124234] [tag_based_sfm_calibrator]: d=1.6110
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716156603] [tag_based_sfm_calibrator]: Calibrated ground plane model
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716167786] [tag_based_sfm_calibrator]: a=0.0072
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716178809] [tag_based_sfm_calibrator]: b=0.0004
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716188675] [tag_based_sfm_calibrator]: c=1.0000
+[tag_based_sfm_calibrator-1] [INFO] [1713490739.716198554] [tag_based_sfm_calibrator]: d=2.0331
+```
+
+## Results
+
+Since we can not directly evaluate the `base_link` calibration, to ascertain the correctness of the calibration, albeit indirectly, we can observe the reprojection errors of the different tags. This can be done numerically, by observing the previous console logs, or visually, since the calibrator draws the resulting tag poses (from the SfM) into the external camera images.
+
+
+
+
+
+
+
+
+The previous images show an example of the resulting tag poses projected in the image. The red drawings correspond to the initial tag poses, the green drawings are the optimized ones, and the magenta represents the 2D detections (the target during optimization). As can be seen in the example, the reprojection error is almost null.
+
+In addition to the 2D reprojections, it is also possible to visually evaluate the calibration process via 3D `RViz` markers as shown in the next images:
+
+
+
+
+
+
+
+
+
All tag and sensor poses from a top-view perspective.
+
Auxiliar tag poses placed in the wall have a pose that matches the wall as seen by the lidar.
+
Wheel tag poses.
+
+
+
+## FAQ
+
+- If the detections look all OK but the reprojection errors and poses look bad, the tag sizes may be incorrect.
+- If the debug images look incorrect whenever a certain tag appears in the image, the offending tag may have moved during the calibration (excluding waypoints).
+- If the base link appears rotated with the x-axis pointing at the back of the vehicle, you may have switched left and right ids.
diff --git a/sensor/README.md b/sensor/README.md
deleted file mode 100644
index 5a7803e4..00000000
--- a/sensor/README.md
+++ /dev/null
@@ -1,103 +0,0 @@
-# Sensor Calibration Tools
-
-Sensor calibration can be split into two categories: intrinsic sensor calibration and extrinsic sensor calibration. In our calibration tools, we implement different methods for both categories.
-
-## Extrinsic Calibration
-
-Extrinsic calibration refers to the relative poses among sensors that are provided to ROS2 nodes using the TF interface. Our calibration tools assume a TF diagram like the one presented in Figure 1.
-
-
-
- Figure 1. Extrinsic calibration diagram
-
-
-In our design, `base_link` corresponds to the projection on the ground of the vehicle's rear axis and each vehicle may possess one or more sensor kits, which is a physical location on the vehicle where sensors are mounted. For example, a normal car would possess one sensor kit mounted on its top, whereas larger vehicles (e.g., a bus) would have several sensor kits distributed along the vehicle.
-
-Although in the diagram present in Figure 1 the TFs from the base to the sensor kits, and from each kit to its sensors are provided, these are not the calibration targets. Instead, we calibrate from the `base_link` to a particular lidar, then from said lidar to the rest of the lidars, and finally from lidars to cameras. In order to comply with the diagram from Figure 1, the final output of the calibration process becomes:
-
-$T(\text{sensor⎽kit⎽base⎽link}, \text{lidar0⎽base⎽link}) = T(\text{base⎽link}, \text{sensor⎽kit⎽base⎽link})^{-1} \times T(\text{base⎽link}, \text{lidar0⎽base⎽link})$
-
-$T(\text{sensor⎽kit⎽base⎽link}, \text{lidar1⎽base⎽link}) = T(\text{sensor⎽kit⎽base⎽link}, \text{lidar0⎽base⎽link}) \times T(\text{lidar0⎽base⎽link}, \text{lidar1⎽base⎽link})$
-
-$T(\text{sensor⎽kit⎽base⎽link}, \text{camera0/camera⎽link}) = T(\text{sensor⎽kit⎽base⎽link}, \text{lidar0⎽base⎽link}) \times T(\text{lidar0⎽base⎽link}, \text{camera0/camera⎽link})$
-
-where the $T(\text{base⎽link}, \text{sensor⎽kit⎽base⎽link})$ is usually provided by a CAD model or can be simply approximated since it is a convenient frame and does not affect other computations.
-
-Looking at the diagram from Figure 1, we could also directly calibrate all the sensors with respect to the `base_link`. However, we believe that sensor-sensor calibration provides more accurate and consistent results so we only use one `base_link` to sensor calibration and from then all other calibrations are performed via pairs of sensors.
-
-### Generic calibration
-
-- [Extrinsic manual calibration](docs/how_to_extrinsic_manual.md)
-
-Intended as a proof-of-concept of our calibration API and as a baseline to which to compare automatic calibration tools, this method allows us to directly modify the values of the TF tree with a rviz view to evaluate the tfs and calibration.
-
-
-
- Figure 2. Manual calibration
-
-
-### Base-lidar calibration
-
-- [Ground-plane base-lidar calibration](docs/how_to_extrinsic_ground_plane.md)
-
-This calibration method assumes the floor around the vehicle forms a plane and adjusts the calibration tf so that the points corresponding to the ground of the point cloud lie on the XY plane of the `base_link`. As such, only the `z`, `roll`, and `pitch` values of the tf are calibrated, with the remaining `x`, `y`, and `yaw` values needing to be calibrated via other methods such as manual calibration.
-
-
-
-
- Figure 3. Ground-plane base-lidar calibration (before and after calibration)
-
-
-### Lidar-lidar calibration
-
-- [Map-based lidar-lidar calibration](docs/how_to_extrinsic_map_based.md)
-
-To calibrate pairs of lidars, this method uses standard point cloud registration. However, due to the sparsity of traditional lidars, direct registration proves difficult. To address this issue, this method uses an additional point cloud map and a localization system to solvent this limitation during registration.
-
-
-
- Figure 4. Map-based calibration
-
-
-- [Mapping-based lidar-lidar calibration](docs/how_to_extrinsic_mapping_based.md)
-
-Similar to the `map-based` method, the `mapping-based` calibration uses point cloud registration to find the relative poses between lidars. However, instead of relying on a map to circumvent the sparsity and field of view, this method includes a mapping step, which generates a dense local map representation, which is then used for registration.
-
-
-
- Figure 5. Mapping-based calibration
-
-
-### Camera-lidar calibration
-
-- [Extrinsic interactive camera-lidar calibration](docs/how_to_extrinsic_interactive.md)
-
-To calibrate camera-lidar pairs of sensors, a common practice is to compute corresponding pairs of points and then minimize their reprojection error. This calibration method implements a UI to help the selection of these pairs and evaluate their performance interactively.
-
-
-
- Fig 6. Interactive camera-lidar calibration UI
-
-
-- [Tag-based camera-lidar calibration](docs/how_to_extrinsic_tag_based.md)
-
-This calibration method extends the interactive calibration by performing the corresponding points acquisition automatically via moving a known tag (lidartag) through the shared field of view.
-
-
-
- Fig 7. Tag-based camera-lidar calibration
-
-
-## Intrinsic Calibration
-
-Intrinsic calibration is the process of obtaining the parameters that allow us to transform raw sensor information into a coordinate system. In the case of cameras, it refers to the camera matrix and the distortion parameters, whereas in lidars it can refer to the offset and spacing of beams. In our repository, we focus only on camera calibration, since lidar intrinsic calibration is usually vendor-specific (and either the direct parameters or instructions are usually provided by them).
-
-### Intrinsic camera calibration
-
-- [Camera calibration](docs/how_to_intrinsic_camera.md)
-
-We implement an original intrinsic camera calibrator based on the [ROS implementation](https://github.com/ros-perception/image_pipeline/tree/noetic/camera_calibration), adding support for new boards, an improved data collection process, new visualizations, and statistics used to evaluate the obtained parameters.
-
-- [Camera calibration via camera-lidar calibration](docs/how_to_extrinsic_interactive.md)
-
-Traditionally, camera calibration is performed by detecting several views of planar boards in an image, and so, by knowing the board's dimensions, the camera matrix and distortion can be computed. However, this same process can also be performed by obtaining generic camera-object pairs, like the ones obtained during camera-lidar calibration. By reutilizing the calibration points from camera-lidar calibration, we can perform camera intrinsic calibration and camera-lidar extrinsic calibration simultaneously.
diff --git a/sensor/docs/design/lidar2lidar_auto.drawio.svg b/sensor/docs/design/lidar2lidar_auto.drawio.svg
deleted file mode 100644
index 2f85a934..00000000
--- a/sensor/docs/design/lidar2lidar_auto.drawio.svg
+++ /dev/null
@@ -1,870 +0,0 @@
-
\ No newline at end of file
diff --git a/sensor/docs/design/lidar2lidar_manual.drawio.svg b/sensor/docs/design/lidar2lidar_manual.drawio.svg
deleted file mode 100644
index 5e6438e1..00000000
--- a/sensor/docs/design/lidar2lidar_manual.drawio.svg
+++ /dev/null
@@ -1,814 +0,0 @@
-
diff --git a/sensor/docs/design/sensor_calibration.svg b/sensor/docs/design/sensor_calibration.svg
deleted file mode 100644
index 7df30e53..00000000
--- a/sensor/docs/design/sensor_calibration.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/sensor/docs/how_to_camera.md b/sensor/docs/how_to_camera.md
deleted file mode 100644
index 12c0b781..00000000
--- a/sensor/docs/how_to_camera.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# Camera Calibration
-
-## 1. Prepare Calibration
-
-1. Print out the [PDF](resource/circle_8x6.pdf) as a calibration board.
-
- NOTE: It is recommended that the board be A0 size and made of a hard material.
-
-2. Connect the camera to be calibrated to the PC.
-
- NOTE: Currently, the parameters are suitable for the following camera models.
-
- - FLIR Blackfly S BFS-PGE-16S2C-CS
- - Leopard Imaging LI-USB30-IMX490
-
- To use the Blackfly S, install the Spinnaker SDK and build Autoware.
-
-## 2. Launch Calibration Tools
-
-Launch camera calibration with the following command.
-
-```sh
-ros2 launch intrinsic_camera_calibration calibration.launch.xml \
- camera_type:= camera_name:=
-```
-
-For Blackfly S,
-
-```sh
-ros2 launch intrinsic_camera_calibration calibration.launch.xml \
- camera_type:=bfs camera_name:=camera0
-```
-
-For Leopard Imaging,
-
-```sh
-ros2 launch intrinsic_camera_calibration calibration.launch.xml \
- camera_type:=li camera_name:=traffic_light
-```
-
-Now you are ready to start.
-
-## 3. Camera Calibration Process
-
-1. Hold the board in your hand and stand in front of the camera.
-2. Make sure the board is detected and start moving the board slowly.
-
- 
-
- NOTE
-
- - It is recommended that you move the board within the following range.
- - Distance: 1 ~ 5 m distance from the camera
- - Tilt: ±30 degrees of tilt of the board relative to the camera
- - Move the board across the entire field of view so that the coverage shown in the window is at least 90%.
-
- 
-
-3. After the data acquisition is complete, press the CALIBRATE button to start the calibration calculation.
-
-4. After the calibration calculation is completed, the result screen will be displayed.
-
- 
-
-5. Check the output file in `$HOME/*.tar.gz`.
diff --git a/sensor/docs/how_to_extrinsic_ground_plane.md b/sensor/docs/how_to_extrinsic_ground_plane.md
deleted file mode 100644
index 42416ecc..00000000
--- a/sensor/docs/how_to_extrinsic_ground_plane.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# Extrinsic ground-plane calibration (base-lidar)
-
-## 1. Prepare the calibration environment
-
-This calibration method is based on the premise that the vehicle is placed on a regular surface so that it forms a plane, with as few objects as possible on the floor. The lidar subject to calibration must observe as much of the ground plane as possible for this method to obtain a accurate calibration.
-
-## 2. Capture rosbag
-
-Capture a rosbag including lidar subject to calibration. The duration is arbitrary, but at least a few seconds are required.
-
-ROSBAG Example
-
-
-```sh
-ros2 bag info f8c99b4f-a605-4178-97ef-58bfc39eabe9_2022-02-07-14-23-31_0.db3
-
-[INFO] [1632971360.501197002] [rosbag2_storage]: Opened database 'f8c99b4f-a605-4178-97ef-58bfc39eabe9_2022-02-07-14-23-31_0.db3' for READ_ONLY.
-
-Files: f8c99b4f-a605-4178-97ef-58bfc39eabe9_2022-02-07-14-23-31_0.db3
-Bag size: 3.7 GiB
-Storage id: sqlite3
-Duration: 51.59s
-Start: Feb 7 2022 14:23:32.345 (1644211412.345)
-End: Feb 7 2022 14:24:23.404 (1644211463.404)
-Messages: 252554
-Topic information: Topic: /sensing/lidar/right_upper/pandar_packets | Type: pandar_msgs/msg/PandarScan | Count: 502 | Serialization Format: cdr
-```
-
-
-
-
-## 3. Launch Calibration Tools
-
-To launch the extrinsic ground-plane calibration tool, use the following command (on terminal 1).
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=ground_plane sensor_model:= vehicle_model:= vehicle_id:=
-```
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=ground_plane sensor_model:=aip_x1 vehicle_model:=lexus vehicle_id:=my_awesome_vehicle
-```
-
-Then, play the recorded calibration rosbag (on terminal 2).
-
-```sh
-ros2 bag play --clock -l -r 0.2 \
- --remap /tf:=/null/tf /tf_static:=/null/tf_static
-```
-
-The previous commands are needed when performing the calibration on `rosbag` data. However, the calibration can also be performed on the actual vehicles, on which case the commands needs to be modified, since the `logging_simulator` and related functionalities are not needed. To to this, add the `logging_simulator:=false`
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=ground_plane sensor_model:=aip_x1 vehicle_model:=lexus vehicle_id:=my_awesome_vehicle logging_simulator:=false
-```
-
-Once the calibration process ends, the results are written in the `$HOME` folder. In order for Autoware to use them, they must be placed in the corresponding `individual_params` package's `config` folder. For example:
-
-```sh
-$HOME/autoware/src/autoware/individual_params/individual_params/config/default/aip_x1
-```
-
-## 4. Base-lidar calibration
-
-The base_link is a frame that lies on the floor on the rear axis of the vehicle. Due to its location, its calibration can prove to be very cumbersome involving precise measurements and conditions, or requiring considerable infrastructure.
-
-This calibration does not attempt to solve the full base-lidar calibration process (calculation of the x, y, z, roll, pitch, and yaw values) but by using the assumption that the `base_link` lies on the plane formed by the ground, we can estimate the ground plane seen by the laser, and obtain the z, roll, and pitch values (since this calibration method does not estimate x, y, nor yaw, it uses the initial calibration as output for those values).
-
-## 5. Base-lidar calibration Process
-
-Upon launching the tool, the calibration process is automatic, and its result can be visualized through the provided rviz profile.
-
-In Fig 1, a normal pre-calibration scenario can be observed, where the XY-plane formed by the `base_link` frame is not correctly aligned with the points that lie on the floor. In this case, independent from the x, y, and yaw values from the initial calibration, the x, roll, and pitch values are incorrect and are the target of this method. In contrast, if the calibration is correct, in terms of z, roll, and pitch, the XY plane is aligned perfectly as shown in Figure 7.
-
-|  |  |
-| :----------------------------------------------------------: | :--------------------------------------------------------: |
-| Fig 6. Initial calibration | Fig 7. Automatic calibration |
-
-To confirm the calibration accuracy, the user can refer to several frames, and observe how the grid displayed on the XY plane of the respective frame compares against the point cloud. Following are the relevant frames and their description.
-
-- `base_link`: This frame should lie on the floor and be aligned with respect to the car. If the launcher parameter `broadcast_calibration_tf` is set to `True`, it displays the calibration result, whereas if the parameter is set to `False` it displays the frame before the calibration process. It defaults to `True`
-- `initial_base_link`: This frame represents the original values before the calibration process. It is used to easily switch between the before/after calibration views in order to evaluate how the calibration changed.
-- `ground_plane`: This frame lies on the detected floor, and from this frame, the `roll`, `pitch`, and `z` values are extracted for the output values. Conversely, its `x`, `y`, and `yaw` do not bear relation with the calibration output (since these values can not be estimated using this method).
-
-After selecting the frame to evaluate, the user must set the camera in a convenient place to check if the point cloud lies on the respective frame's XY plane. To do this, it is recommended to put the Rviz camera in `FPS` mode and set both the `z` and `pitch` values to `0` (this is done by default in the provided rviz profile) and set the `x`, `y`, and `yaw` values to the selected evaluation position and orientation. A good location corresponds to the origin of the frame while varying the `yaw` since it allows evaluating the calibration from the perspective of the robot.
-
-Another way to evaluate the calibration is to check which points of the point cloud are considered inliers in the model. This calibration estimated the ground plane via RANSAC, in which a model is estimated and those points that agree with the model are considered inliers. As such, if the estimated model is suspected to be incorrect, by checking the estimated inliers the user can get insight into whether there is a problem with the estimation or with the environment itself.
diff --git a/sensor/docs/how_to_extrinsic_interactive.md b/sensor/docs/how_to_extrinsic_interactive.md
deleted file mode 100644
index d09f499b..00000000
--- a/sensor/docs/how_to_extrinsic_interactive.md
+++ /dev/null
@@ -1,321 +0,0 @@
-# Extrinsic Interactive Calibration (camera-lidar)
-
-## 1. Capture rosbag
-
-Capture a rosbag including all the sensor topics. It is highly recommended to record data in a static environment to calibrate but it is not a hard requirement. This tool can also serve as a way to evaluate the current calibration as it implements several visualization options.
-
-The duration is arbitrary, but due to the requirement of object-image pairs of points, the captured data must include several identifiable objects/textures to serve as the beforementioned pairs.
-
-Additionally, by default, this tool requires both the lidars and the camera intrinsics to be calibrated before attempting to calibrate camera-lidar pairs. In the case of not having calibrated the lidars beforehand, the user must disable the use of the `concatenated pointcloud`, and in the case of not having the camera intrinsics calibrated, this tool provides an (experimental) way to calibrate them.
-
-ROSBAG Example
-
-
-
-## 2. Launch Calibration Tools
-
-To launch the extrinsic interactive calibration tool, use the following command (on terminal 1).
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=interactive sensor_model:= vehicle_model:= camera_name:=
-```
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=interactive sensor_model:=aip_x2 vehicle_model:=gsm8 vehicle_id:=ps1 camera_name:=camera1
-```
-
-Then, play the recorded calibration rosbag (on terminal 2).
-
-```sh
-ros2 bag play --clock -l -r 0.2 \
- --remap /tf:=/null/tf /tf_static:=/null/tf_static
-```
-
-Once the calibration process ends, the results are written in the `$HOME` folder. In order for Autoware to use them, they must be placed in the corresponding `individual_params` package's `config` folder. For example:
-
-```sh
-$HOME/pilot-auto/src/autoware/individual_params/individual_params/config/default/aip_x2
-```
-
-**\*Notes**: By default this tool uses the `concatenated_pointcloud`. In the case the user prefers to use a single point cloud, the additional launcher parameters `interactive_use_concatenated` must be set to `false`
-
-## 3. Camera-lidar calibration
-
-Calibrating a camera-lidar pair (i.e., finding the extrinsics) makes the lidar points get projected into the image correctly (See Fig. 1). Conversely, an incorrect calibration culminates in the objects of the point cloud being projected incorrectly (See Fig. 2).
-
-|  |  |
-| :---------------------------------------------------------------------: | :-------------------------------------------------------------------------: |
-| Fig 1. Correct calibration | Fig 2. Incorrect calibration |
-
-The difference between a point in the image (pimage), and the projection (pprojected) in the image of its corresponding object point in lidar coordinates (pobject) is denoted as the reprojection error and can be observed graphically in Figure 3.
-
-
-
- Fig 3. Reprojection error
-
-
-It follows that to calibrate the extrinsics of the camera-lidar pair of sensors, the reprojection error must be minimized in a set of corresponding pairs of points. The acquisition of the calibration pairs of points can be performed either automatically via a computer vision system or manually, and in this case, the pairs are selected by the user interactively until the calibration achieves a user-defined criterion (e.g., visual confirmation that the projections appear correctly on the image).
-
-## 3. Interactive Calibration Process
-
-After launching the calibrator and receiving synchronized data (image and point cloud), the Interactive calibrator UI appears as presented in Figure 4. The UI includes several functionalities to perform the calibration process and evaluate its results, which will be presented in this manual.
-
-
-
- Fig 4. Interactive calibration UI
-
-
-It is not necessary to have an initial calibration to use this tool, but it may make the process easier.
-For example, Figure 5 shows an example in which an insufficiently good calibration causes posts and road marks projections to be visibly off, yet is still good enough to clearly identify which parts of the calibration are wrong.
-
-
-
- Fig 5. Initial calibration
-
-
-To initiate the calibration process, in the `rviz` UI, the user must first select an object point by pressing `Publish point` and then clicking the point in the point cloud as presented in Figure 6.
-
-An `Rviz` instance with the profile already set up should launch together with the calibrator UI, but the use of any other profile and configuration is possible. The point can be selected in any frame as long as there exists a `tf` to the lidar frame.
-
-Easy to select object points are corner-like points placed in high-resolution zones of the lidar, which is why it is convenient to use texture-right environments for calibration purposes.
-
-**Note 1:** Since the camera and lidar have different fields of view, the user must be careful not to mistakenly select points that are occluded in one of the sensors.
-
-**Note 2:** Since the optimization function is the reprojection error, although far-away object points have intrinsically less resolution and are more difficult to select, small errors impact less the calibration error than the same error for closer points.
-
-
-
- Fig 6. Object point selection in rviz
-
-
-After selecting the object point, the user must select the corresponding image point in the Interactive calibrator UI as shown in Figure 7. To visually aid the selection, the previously selected object point is projected using the current calibration and displayed in a magenta-colored cross.
-
-
-
- Fig 7. Image point selection
-
-
-Once a calibration pair is selected, it is displayed in the image as two points connected by a line as shown in Figure 8. The image point is displayed as a green circle and the projected object point is displayed as a red circle. The length of the line represents the reprojection error of the `tf` used for visualization (In Figure 8, the lidar is not displayed. To do so, the `Render pointcloud` checkbox was checked off).
-
-
-
- Fig 8. Calibration point visualization
-
-
-After selecting one calibration pair, the user must repeat the process a number of times to gather enough calibration points as shown in Figure 9. Depending on the optimization algorithm, the minimum number of points to perform the optimization varies, but in general terms, at least 6 points are required, and the greater the number of points and the more widespread the points are the better the optimization result.
-
-
-
- Fig 9. Calibration points visualization
-
-
-Once a sufficient amount of points is gathered, the user must press `Calibrate extrinsics` button to perform the calibration optimization. However, this does not make the new calibration result to be displayed. To do so, the user must change the `tf` used for visualization by selecting `Calibrator` as shown in Figure 10.
-
-
-
-Fig 10. Change of visualization tf
-
-
-After pressing `Calibrate extrinsics` and selecting `Calibrator` as the visualization `tf`, the projected points in red change and get closer to their corresponding green points as shown in Figure 11.
-
-
-
- Fig 11. Calibration points after extrinsic optimization
-
-
-Additionally if we enable again `Render pointcloud`, we can observe how the calibration improves by visually evaluating the new projected point cloud (see Figure 12)
-
-
-
-Fig 12. Projected point cloud after calibration
-
-
-Although compared with the initial calibration from Figure 5, the new one from Figure 12 is visually better, it can be easily checked that the calibration is mostly correct only near the points used for calibration. That is why it is useful to place calibration points throughout the image when possible.
-
-In this case, given this calibration, the user can simply improve it by interactively adding calibration points until the results satisfy him. In this case, by adding additional points in the road marks, whose projections were off, it is possible to improve the calibration from Figure 13 to the one from Figure 14.
-
-**\*Note:** When the number of calibration points is low, the algorithm overfits the extrinsics to fit those points, and small errors of the points and incorrect camera intrinsics cause the result not to generalize to areas far from the calibration points. Although adding more points may increase the calibration error, this is normal and the final evaluation must be the visual confirmation of the projected point cloud.
-
-|  |  |
-| :-----------------------------------------------------------: | :-------------------------------------------------------------: |
-| Fig 13. Calibration before refinement | Fig 14.Calibration after refinement |
-
-Finally, after adding more points near the areas where the calibration is off, the result looks like the one presented in Figure 15. Then, to signal the `calibration manager` that the calibration should end and output the calibration file, the user must press the `Send calibration` button.
-
-
-
-Fig 15. Final calibration
-
-
-## 4. Outliers and deleting calibration points
-
-During calibration, it may occur that an incorrect pair of points is added. In this case, since the algorithm does not mode outliers, the calibration gets strongly affected. One, albeit extreme example, is presented in Figure 16.
-
-
-
- Fig 16. Calibration result after adding an incorrect calibration pair (outlier)
-
-
-In these, easy to notice examples, the user can simply delete a calibration pair by clicking on it as presented in Image 17 (the user must click the image point displayed in green with clicks on the object points displayed in red having no effect whatsoever).
-
-
-
- Fig 17. Calibration pair removal
-
-
-In addition to manually identifying and deleting incorrect calibration pairs, the Interactive calibration tool also implements an additional outlier detection functionality, which is explained later in the manual.
-
-## 5. (Experimental) Camera Intrinsics & Extrinsics Joint Calibration
-
-In several cases, no matter how many calibration pairs of points are, the calibration itself does not improve. If the calibration points are correct, it may be then that the camera intrinsics are incorrect, as they affect the calculation of the reprojection error as shown in Figure 18, where the camera intrinsics are represented by the camera matrix `K`.
-
-
-
-Fig 18. Camera-lidar extrinsics optimization pipeline
-
-
-Normally, the camera intrinsics are previously calibrated and fixed during the camera-lidar calibration process. However, in the cases where the main source of error comes from the camera intrinsics it is possible to calibrate both the intrinsics and extrinsics together as shown in Figure 19, by jointly optimizing them in a nested fashion (black box optimization in an outer loop and PNP optimization in the inner loop).
-
-
-
-Fig 19. Camera-lidar intrinsics-extrinsics optimization pipeline
-
-
-It is possible to employ the beforementioned joint optimization in the Interactive calibrator UI by clicking `Calibrate Intrinsics (experimental)`, `Use optimized K`, and `Calibrate Extrinsics` sequentially. An example of the effect of calibrating only the extrinsics with slightly incorrect intrinsics can be observed in Figure 20, whereas the same example where both the intrinsics and extrinsics were calibrated by this tool is presented in Figure 21.
-
-
-
-**\*Note:** The implementation of this module assumes distortion-less cameras (null distortion coefficients), where essentially the camera matrix `K` and projection matrix `P` are the same (are only populated by `fx`, `fy`, `cx`, and `cy`).
-
-## 6. Other functionalities
-
-### Calibration Tools API
-
-The interactive calibrator UI, although can be used in a standalone fashion, was designed as a part of the Calibration Tools API, and as such provides a server of the type `ExtrinsicCalibrator` and displays its status as follows:
-
-1. `Disconnected`: The Interactive calibrator UI is advertising the service, but the `Calibrator manager` has not sent a request yet.
-2. `Waiting for calibration`: The `Calibration manager` sent a `ExtrinsicCalibrator` request, but the Interactive calibrator UI has not sent the result yet. To do so, the user must first calibrate the extrinsics and then press the 'Send calibration' button (the button itself will be grayed out until there is a calibration available to send).
-3. `Calibration sent`: The user has already sent the calibration result, prompting the calibration manager to sever the connection. If the user wants to send the calibration again, it must first restart the Interactive calibrator UI and the `Calibration manager`.
-
-
-
- Fig 22. Calibration API UI
-
-
-### Data collection tools
-
-The `Data collection tools` implement several optional functionalities meant to help the user to both perform the calibration itself and to evaluate it.
-
-1. `Pause/Play`: Whether or not the Interactive calibration tool listens to new data from the sensor topics. It is useful for debugging, evaluation, and calibration purposes, since it enables the user to focus on a single time step of synchronized data.
-2. `Take screenshot`: Takes a screenshot of the widget of the UI and the image with the drawings and saves them into the current folder.
-3. `Republish calibration data`: Whether or not the synchronized data that is displayed in the Interactive calibrator UI is republished. The advantage of using this feature is that used together with the `Paused/Play` button, the user can calibrate on a fixed pair of image/point cloud (in the usual case, clicking points of the point cloud may prove difficult).
-4. `Publish /tf`: Whether or not the Interactive calibrator tool publishes in the `/tf` topic the estimated extrinsics.
-
-
-
- Fig 23. Data collection UI
-
-
-### Calibration status
-
-The `Calibration status` implement shows several numerical results of the calibration process and also implements save/load capabilities.
-
-1. `Calibration points`: The current number of image-object pairs of points.
-2. `Reprojection error`: The reprojection error of the current pairs of points. On the left, the reprojection of the calibrated extrinsics is displayed, whereas on the right, the reprojection of the extrinsics used for visualization is displayed (this allows, for example, to compare the reprojection error of the current calibration with the initial one).
-3. `Inliers`: The number of points that are considered to be inliers for a specific calibration. Same as with `Reprojection error`, the inliers for the calibrated and visualization extrinsics are displayed.
-4. `Save calibration`: Selects a folder to save the current calibration. It outputs the image-object calibration pairs of points, the camera-lidar extrinsics (not the one requested by the `Calibration tools`, which is usually the `sensor_kit` to `camera`), and the optimized intrinsics (when they are computed).
-5. `Load calibration`: Selects a folder to load a previous calibration from the Interactive calibration tool. This only loads the image-object pairs of points (not the intrinsics/extrinsics).
-
-
-
- Fig 24. Calibration status UI
-
-
-### Calibration options
-
-The `Calibration options` implement several optional functionalities that affect the calibration process.
-
-1. `Calibrate extrinsics`: Executes the calibration algorithm. Although it is executed automatically in some situations, it can also be executed manually (e.g., when points are added or deleted, the calibration is executed automatically).
-2. `Calibrate intrinsics (experimental)`: As explained in previous sections, the Interactive calibrator UI offers an alternative way to calibrate the camera intrinsics.
-3. `Use RANSAC`: In the case the calibration points are suspected of containing inliers, the user can enable the use of RANSAC, which wil automatically discard outliers and find the best calibration on the largest set of inliers possible.
-4. `Use optimized K`: In the case of having optimized the camera intrinsics, whether or not to use the optimized intrinsics for visualization and calibration.
-5. `Minimum pnp points`: The minimum number of points used for the calibration algorithm, and the minimum hypothesis size for the RANSAC algorithm.
-6. `RANSAC inlier error (px)`: The maximum reprojection error a pair of points can have to be considered as part of the inliers.
-
-
-
- Fig 25. Calibration options UI
-
-
-### Visualization options
-
-The Interactive calibration tools implements several visualization options to help the calibration process and its evaluation.
-
-1. `TF source points`: To display object points initially in lidar coordinates the extrinsics are required. In this `Combobox` the user can select which tf/extrinsics to use for visualization. The options are: `Initial /tf`: the first camera-lidar extrinsics received from the `/tf` topic. `Current /tf`: the latest camera-lidar extrinsics received from the `/tf` topic. `Calibrator`: the extrinsics obtained from the calibration process (only available after gathering calibration points and performing a calibration).
-2. `Marker type`: The marker type used for visualization. Currently circles and squares are implemented
-3. `Marker units`: The units used for the markers. These can be either pixels or meters.
-4. `Marker color channel`: The channel used for visualizing the point cloud. It can be either cartesian axis or the intensity channel.
-5. `Render pointcloud`: Whether or not the point cloud should be rendered.
-6. `Render calibration points`: Whether or not the calibration points should be rendered.
-7. `Render inliers`: Whether or not the inlier status of the calibration points should be displayed.
-8. `Marker size (px)`: The marker size in pixels (only used when the marker type is pixels).
-9. `Marker size (m)`: The marker size in meters (only used when the marker type is meters).
-10. `Rainbow distance (m)`: The distance at which the color palette completes s cycle (only works when the color channel is not intensity).
-11. `Rainbow offset`: The starting value in the color channel palette (in normalized units between 0 and 1).
-12. `Rendering alpha` The transparency value for the point cloud and other elements (with a numerical value between 0 and 1, which 0 being transparent and 1 having full opacity):
-13. `PC subsample factor`: A subsample factor to render the point cloud. Some point clouds can contain over 10k points, causing unnecessary rendering overload, In those causes an integer value over 1 is useful to reduce this burden. If the complete point cloud is required, this factor should be set to 1.
-14. `Min rendering distance (m)`: The minimum distance at which points will be rendered,
-15. `Max rendering distance (m)`: The maximum distance at which points will be rendered.
diff --git a/sensor/docs/how_to_extrinsic_manual.md b/sensor/docs/how_to_extrinsic_manual.md
deleted file mode 100644
index ea2af42c..00000000
--- a/sensor/docs/how_to_extrinsic_manual.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# Extrinsic Manual Calibration
-
-## 1. Capture rosbag
-
-Capture your rosbag including all the sensor topics in a static environment.
-
-The duration is arbitrary, but about some minutes is recommended.
-
-ROSBAG Example
-
-
-
-## 2. Launch Calibration Tools
-
-Launch extrinsic manual calibration with the following command (on terminal 1).
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=manual sensor_model:= vehicle_model:=
-```
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=manual sensor_model:=aip_xx1 vehicle_model:=jpntaxi
-```
-
-Play your rosbag (on terminal 2).
-
-```sh
-ros2 bag play --clock -l -r 0.2 \
- --remap /tf:=/null/tf /tf_static:=/null/tf_static
-```
-
-Now you are ready to start.
-
-## 3. Manual Calibration Process
-
-In rqt_reconfigure, the basic usage is as follows.
-
-1. Press `Refresh` button then press `Expand All` button.
-
- 
-
-2. Write the target frame name in `Filter` area and select `tunable_static_tf_broadcaster_node`.
-3. Adjust the `tf_*` parameter manually.
-4. Press the `Close` button.
-5. Repeat steps 2 ~ 5 until all targets have been adjusted.
-
- 
-
-6. When you finish adjusting parameters, dump the results to yaml files with the following command (on terminal 3).
-
- ```sh
- ros2 topic pub /done std_msgs/Bool "data: true"
- ```
-
-7. Check the output file in `$HOME/*.yaml`.
-
- The following sections describe how to adjust the external parameters of each sensor.
-
-### Vehicle-to-LiDAR
-
-1. Place two poles on the extension of the vehicle.
-2. Modify the frames of the child of `base_link` in rqt_reconfigure so that the pointcloud center of the pole is placed on the extension of the `base_link`.
-
-### Vehicle-to-IMU/GNSS
-
-1. Enter designed values (e.g. based on CAD data) or manually measured values in rqt_reconfigure.
-
-### LiDAR-to-LiDAR
-
-1. Set the topic name of the target pointcloud in rviz.
-
- 
-
-2. Manually adjust parameters in rqt_reconfigure using the rviz visualization as a reference.
-
- 
-
-### LiDAR-to-Camera
-
-1. Set the topic name of the target image in rviz.
-
- 
-
-2. Specify `camera_name` and launch `camera_republisher` to visualize camera image.
-
- ```sh
- ros2 launch extrinsic_calibration_manager camera_republisher.launch.xml camera_name:=
- ```
-
- For example,
-
- ```sh
- ros2 launch extrinsic_calibration_manager camera_republisher.launch.xml camera_name:=camera0
- ```
-
- For handling the raw image topic (e.g. traffic light recognition camera), use `mode:=raw` option additionally.
-
- ```sh
- ros2 launch extrinsic_calibration_manager camera_republisher.launch.xml camera_name:=traffic_light mode:=raw
- ```
-
-3. Manually adjust parameters in rqt_reconfigure using the rviz visualization as a reference.
-
- 
-
- NOTE: After the rosbag loops, press the Reset button in rviz once.
diff --git a/sensor/docs/how_to_extrinsic_map_based.md b/sensor/docs/how_to_extrinsic_map_based.md
deleted file mode 100644
index 6cba0070..00000000
--- a/sensor/docs/how_to_extrinsic_map_based.md
+++ /dev/null
@@ -1,139 +0,0 @@
-# Extrinsic Auto Calibration
-
-## 1. Capture rosbag
-
-Capture your rosbag including all the sensor topics in a static environment.
-
-The duration is arbitrary, but about some minutes is recommended.
-
-ROSBAG Example
-
-
-
-## 2. Launch Calibration Tools
-
-Launch extrinsic auto calibration with the following command (on terminal 1).
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=map_based sensor_model:= vehicle_model:= \
- map_path:= pointcloud_map_file:= lanelet2_map_file:=
-```
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=map_based sensor_model:=aip_xx1 vehicle_model:=jpntaxi map_path:=$HOME/map pointcloud_map_file:=0.20_map_clean.pcd lanelet2_map_file:=r1.osm
-```
-
-The previous commands are used when calibration is performed with loss bag data. However, it is also possible to calibrate with actual vehicles, in which case the logging_simulator and related functions are not needed, so the command needs to be modified. In this case, add logging_simulator:=false
-
-Play your rosbag (on terminal 2).
-
-```sh
-ros2 bag play --clock 100 -l -r 0.1 --remap /tf:=/null/tf /tf_static:=/null/tf_static
-```
-
-The TFs required for calibration are generated by the logging simulator, so the rosbag TFs are remap.
-
-Now you are ready to start.
-
-Then, when the system completes the calibration, rviz will display the calibrated point cloud and the console will display the score.
-
-After that, Check the output file in `$HOME/*.yaml`.
-
-### LiDAR-to-LiDAR
-
-1. Set the topic name of the resulting point cloud to rviz.
-
- ```sh
- //debug/map_pointcloud
- //debug/sensor_pointcloud
- //debug/calibrated_pointcloud
- ```
-
- For example,
-
- ```sh
- /sensor_kit/sensor_kit_base_link/velodyne_top_base_link/debug/map_pointcloud
- /sensor_kit/sensor_kit_base_link/velodyne_top_base_link/debug/sensor_pointcloud
- /sensor_kit/sensor_kit_base_link/velodyne_top_base_link/debug/calibrated_pointcloud
- ```
-
- 
diff --git a/sensor/docs/how_to_extrinsic_mapping_based.md b/sensor/docs/how_to_extrinsic_mapping_based.md
deleted file mode 100644
index 1bc530ef..00000000
--- a/sensor/docs/how_to_extrinsic_mapping_based.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Extrinsic mapping-based calibration (lidar-lidar)
-
-## 1. Prepare the calibration environment
-
-This calibration method utilizes one lidar for mapping and performs point cloud registration to calibrate the rest of the lidars to the first one, so an environment where there are enough natural landmarks to perform registration-based mapping is required, with enough objects/information present in the calibration lidars (opposed to just lane surfaces, only walls, etc.).
-Data does not need to be taken with stationed vehicles, but doing so may increase the accuracy. In the same way, we do not require the lidars' timestamp to be synchronized, but in that case, we perform linear interpolation, which can reduce the calibration performance.
-
-## 2. Capture rosbag
-
-Capture a rosbag including the pointclouds of the lidars to calibrate, as well as the lidar used as a target. The required duration depends on the content of the scene and the trajectory followed by the vehicle. In urban scenes at low speeds in a straight line, trajectories as short as 30 meters are sufficient, but in other situations, several hundreds of meters may be required.
-
-ROSBAG Example
-
-
-
-## 3. Launch Calibration Tools
-
-If calibration needs to be performed in an environment other that the vehicle running autoware, the `logging_simulator` is required.
-In that case, it can be launched as follows:
-
-```sh
-ros2 launch autoware_launch logging_simulator.launch.xml sensor_model:= vehicle_model:= vehicle_id:=
-```
-
-In another terminal, launch the mapping-based calibration tool:
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=mapping_based sensor_model:= vehicle_model:= vehicle_id:= logging_simulator:=false
-```
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=mapping_based sensor_model:=aip_x1 vehicle_model:=lexus vehicle_id:=my_awesome_vehicle logging_simulator:=false
-```
-
-Then, play the recorded calibration rosbag on yet another terminal.
-
-```sh
-ros2 bag play --clock -l -r 0.1 \
- --remap /tf:=/null/tf /tf_static:=/null/tf_static
-```
-
-Once the calibration process ends, the results are written in the `$HOME` folder. In order for Autoware to use them, they must be placed in the corresponding `individual_params` package's `config` folder. For example:
-
-```sh
-$HOME/autoware/src/autoware/individual_params/individual_params/config/default/aip_xx1
-```
-
-## 4. Lidar-lidar calibration
-
-Direct lidar-lidar calibration is most times not possible due to the sparsity of the involved lidars, and the reduced shared field-of-view among them. To circumvent this limitation, we use the reference lidar (target) for standard mapping, which creates dense local point clouds, which with we can later perform point cloud registration with the lidars to calibrate (sources).
-
-## 5. Base-lidar calibration Process
-
-Due to the nature of the calibration method, it can be split into two parts: data collection and calibration
-
-## 5.1 Data collection (mapping and data-pairing)
-
-The mapping is performed using via Normal Distribution Transform (NDT) due to being more robust than other registration methods and is recommended to be run with the lidar with the highest resolution and field-of-view among the available lidars. The mapping itself does not need to be run in real-time like in SLAM which enables us to focus more on the accuracy side of the mapping.
-
-In addition to mapping, in this step pairs of mapping and calibration lidars are matched and several statistics are computed to be used in the calibration step. Data collection ends automatically when a predetermined amount of data is acquired, or it can also be ended prematurely, via the call of the following service:
-
-```sh
-ros2 service call /NAMESPACE/stop_mapping std_srvs/srv/Empty {}
-```
-
-Figure 1 presents an example of the mapping results produced during this step. Red arrows indicate the different poses during mapping, green arrows are special poses taken uniformly, and white points correspond to a subsampled version constructed map.
-
-
-
- Fig 1. Mapping result
-
-
-## 5.2 Calibration
-
-Once data collection finishes, we have a set of mapping-calibration pairs of point clouds referenced to a local map. However, not all these pairs are suitable for calibration, so we select those that possess small interpolation errors, slow acceleration, high information, etc.
-
-Once these frames are selected, they are augmented using the nearby point clouds on the map to alleviate both the sparsity and limited field-of-view of the lidar pairs. Once the point clouds are augmented, we perform traditional point cloud registration to calibrate the lidar pairs.
-
-Figure 2 presents an example of this method used to calibrate 3 lidars simultaneously. In white are the points from the map, in red are tge sparse point clouds from the lidars to calibrate using the initial calibration, and in green are the same point clouds using the calibrated poses.
-
-
-
- Figure 2. Mapping-based calibration
-
diff --git a/sensor/docs/how_to_extrinsic_tag_based.md b/sensor/docs/how_to_extrinsic_tag_based.md
deleted file mode 100644
index 08273b6f..00000000
--- a/sensor/docs/how_to_extrinsic_tag_based.md
+++ /dev/null
@@ -1,185 +0,0 @@
-# Extrinsic tag-based calibration (camera-lidar)
-
-## 1. Prepare the calibration environment
-
-In order the perform camera-lidar calibration using this tool, it is necessary to prepare [lidartags](https://github.com/UMich-BipedLab/LiDARTag) and lidars with intensity measures. In order to assure that no objects difficult the tag detection and and obtain the most stable detection possible, it is highly recommended to also prepare fixed mounts for these tags as presented in Figure 1.
-
-
-
- Fig 1. Examples of lidartag and their mounts
-
-
-The quality of the calibration depends strongly on the placement of the tags with respect to the sensors. As much as possible, consider the following guidelines:
-
-- The tags are placed with a corner facing upwards (strictly speaking, the corners of the tags must be aligned with the axis of the lidar).
-- The tags are facing directly the sensors (prioritizing the lidar).
-- The tags cover as much as possible of the field of view.
-- The tags do not occlude themselves.
-- The tags are no farther than 12 meters (depending on the resolution of the lidar).
-- Use at least 3 tags.
-- Visually the silhouette of the tags can be identified in the lidar observation (especially the four corners).
-- Verify that the intensity channel separates the black and white parts of the lidartag (depending on the orientation of the tags with respect to the lidar, the measures can appear uniform for both black and white areas due to the reflections).
-- In the case of non-uniform lidars, place the tags in the high-resolution zone as much as possible.
-- Remove all objects that can cause problems with the detections from the scene.
-
-One example of lidartag placements can be observed in Figure 2.
-
-
-
- Fig 2. Example of the placement of the lidartags
-
-
-## 2. Capture rosbag
-
-Capture a rosbag including all the sensor topics. The duration is arbitrary, but due to the tag estimation at least one minute is recommended. Due to the nature of the calibration, the recorded data should have the camera intrinsics already calibrated.
-
-ROSBAG Example
-
-
-
-## 3. Launch Calibration Tools
-
-To launch the extrinsic tag-based calibration tool, use the following command (on terminal 1).
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=tag_based sensor_model:= vehicle_model:= camera_name:=
-```
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=tag_based sensor_model:=aip_x2 vehicle_model:=gsm8 vehicle_id:=ps1 camera_name:=camera1
-```
-
-Then, play the recorded calibration rosbag (on terminal 2).
-
-```sh
-ros2 bag play --clock -l -r 0.2 \
- --remap /tf:=/null/tf /tf_static:=/null/tf_static
-```
-
-The previous commands are needed when performing the calibration on `rosbag` data. However, the calibration can also be performed on the actual vehicles, on which case the commands needs to be modified, since the `logging_simulator` and related functionalities are not needed. To to this, add the `logging_simulator:=false`
-
-For example,
-
-```sh
-ros2 launch extrinsic_calibration_manager calibration.launch.xml \
- mode:=tag_based sensor_model:=aip_x2 vehicle_model:=gsm8 vehicle_id:=ps1 camera_name:=camera1 logging_simulator:=false
-```
-
-Once the calibration process ends, the results are written in the `$HOME` folder. In order for Autoware to use them, they must be placed in the corresponding `individual_params` package's `config` folder. For example:
-
-```sh
-$HOME/pilot-auto/src/autoware/individual_params/individual_params/config/default/aip_x2
-```
-
-**\*Notes**: This tool can only calibrate one camera at a time.
-
-## 4. Camera-lidar calibration
-
-Calibrating a camera-lidar pair (i.e., finding the extrinsics) makes the lidar points get projected into the image correctly (See Fig. 3). Conversely, an incorrect calibration culminates in the objects of the point cloud being projected incorrectly (See Fig. 4).
-
-|  |  |
-| :---------------------------------------------------------------------: | :-------------------------------------------------------------------------: |
-| Fig 3. Correct calibration | Fig 4. Incorrect calibration |
-
-The difference between a point in the image (pimage), and the projection (pprojected) in the image of its corresponding object point in lidar coordinates (pobject) is denoted as the reprojection error and can be observed graphically in Figure 5.
-
-
-
- Fig 5. Reprojection error
-
-
-It follows that to calibrate the extrinsics of the camera-lidar pair of sensors, the reprojection error must be minimized in a set of corresponding pairs of points. The acquisition of the calibration pairs of points can be performed either automatically via a computer vision system or manually, and in this case, the pairs are computed automatically from the corners of the lidartag placed in the field of view of the sensors
-
-## 5. Tag based Calibration Process
-
-Upon launching the tag-based tool, the calibration process is automatic.
-
-The `apriltag` node detects the corners of the tags in the image, the `lidartag` detects the corners of the tags in the lidar, and then the `extrinsic_tag_based_calibrator` matches the detections, filters them, and performs the extrinsic calibration optimization. Once the calibration converges, it automatically sends the result to the `Calibration manager`, which outputs the new calibration files in the `$HOME` folder. An example of the accuracy achieved by the tag-based calibration can be observed in Figure 7.
-
-However, in addition to the automatic calibration process, this tool also launches the Interactive calibrator UI, mainly for visualization purposes, but can also be used to use different optimization options, add additional calibration points, etc. However, the calibrations obtained through the UI can not be sent to the `Calibration manager` and instead must be saved manually (refer to the UI manual for more details).
-
-|  |  |
-| :-----------------------------------------------------: | :-----------------------------------------------------: |
-| Fig 6. Initial calibration | Fig 7. Automatic tag-based calibration |
-
-The calibration tool is compatible with one or multiple tags, but a certain amount of camera-lidar detections is needed in order to obtain a correct calibration. In case that the number of tags at hand is not sufficient, the user can move a single tag to multiple locations in order to collect more detections akin to the camera calibration process. The parameters that determine how many detections are required in order for the algorithm to finish and output the final extrinsics are located in the `sensor/extrinsic_tag_based_calibrator/launch/tag_calibrator.launch.xml` launch file and below is an example of the related parameters:
-
-```yaml
-
-
-```
-
-## 6. (Experimental) Camera Intrinsics & Extrinsics Joint Calibration
-
-In several cases, no matter how many calibration pairs of points are, the calibration itself does not improve. If the calibration points are correct, it may be then that the camera intrinsics are incorrect, as they affect the calculation of the reprojection error as shown in Figure 8, where the camera intrinsics are represented by the camera matrix `K`.
-
-
-
-Fig 8. Camera-lidar extrinsics optimization pipeline
-
-
-Normally, the camera intrinsics are previously calibrated and fixed during the camera-lidar calibration process. However, in the cases where the main source of error comes from the camera intrinsics it is possible to calibrate both the intrinsics and extrinsics together as shown in Figure 9, by jointly optimizing them in a nested fashion (black box optimization in an outer loop and PNP optimization in the inner loop).
-
-
-
-Fig 9. Camera-lidar intrinsics-extrinsics optimization pipeline
-
-
-It is possible to employ the beforementioned joint optimization in the Interactive calibrator UI by clicking `Calibrate Intrinsics (experimental)`, `Use optimized K`, and `Calibrate Extrinsics` sequentially. An example of the effect of calibrating only the extrinsics with slightly incorrect intrinsics can be observed in Figure 10, whereas the same example where both the intrinsics and extrinsics were calibrated by this tool is presented in Figure 11.
-
-
-
-**\*Note:** The implementation of this module assumes distortion-less cameras (null distortion coefficients), where essentially the camera matrix `K` and projection matrix `P` are the same (are only populated by `fx`, `fy`, `cx`, and `cy`).
diff --git a/sensor/docs/images/base-lidar/final_calibration.png b/sensor/docs/images/base-lidar/final_calibration.png
deleted file mode 100644
index 36e7dda1..00000000
Binary files a/sensor/docs/images/base-lidar/final_calibration.png and /dev/null differ
diff --git a/sensor/docs/images/base-lidar/initial_calibration.png b/sensor/docs/images/base-lidar/initial_calibration.png
deleted file mode 100644
index b6857815..00000000
Binary files a/sensor/docs/images/base-lidar/initial_calibration.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_0.png b/sensor/docs/images/camera-lidar/calibration_0.png
deleted file mode 100644
index 0a3948ed..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_0.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_1.png b/sensor/docs/images/camera-lidar/calibration_1.png
deleted file mode 100644
index e9dbf158..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_1.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_2.png b/sensor/docs/images/camera-lidar/calibration_2.png
deleted file mode 100644
index 469b1a32..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_2.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_3.png b/sensor/docs/images/camera-lidar/calibration_3.png
deleted file mode 100644
index fa23d2bb..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_3.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_4.png b/sensor/docs/images/camera-lidar/calibration_4.png
deleted file mode 100644
index 441c8b6d..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_4.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_5.png b/sensor/docs/images/camera-lidar/calibration_5.png
deleted file mode 100644
index 776a9745..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_5.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_outlier.png b/sensor/docs/images/camera-lidar/calibration_outlier.png
deleted file mode 100644
index f6b67e72..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_outlier.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/calibration_pair_removal.png b/sensor/docs/images/camera-lidar/calibration_pair_removal.png
deleted file mode 100644
index 5af27584..00000000
Binary files a/sensor/docs/images/camera-lidar/calibration_pair_removal.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/camera_opt_post.png b/sensor/docs/images/camera-lidar/camera_opt_post.png
deleted file mode 100644
index 96882095..00000000
Binary files a/sensor/docs/images/camera-lidar/camera_opt_post.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/camera_opt_pre.png b/sensor/docs/images/camera-lidar/camera_opt_pre.png
deleted file mode 100644
index 648c8a0a..00000000
Binary files a/sensor/docs/images/camera-lidar/camera_opt_pre.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/correct_calibration.png b/sensor/docs/images/camera-lidar/correct_calibration.png
deleted file mode 100644
index b10b4f0f..00000000
Binary files a/sensor/docs/images/camera-lidar/correct_calibration.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/image_point_selection.png b/sensor/docs/images/camera-lidar/image_point_selection.png
deleted file mode 100644
index 8306489c..00000000
Binary files a/sensor/docs/images/camera-lidar/image_point_selection.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/incorrect_calibration.png b/sensor/docs/images/camera-lidar/incorrect_calibration.png
deleted file mode 100644
index 9331d6f9..00000000
Binary files a/sensor/docs/images/camera-lidar/incorrect_calibration.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/interactive_calibration_ui.png b/sensor/docs/images/camera-lidar/interactive_calibration_ui.png
deleted file mode 100644
index f23a7ac6..00000000
Binary files a/sensor/docs/images/camera-lidar/interactive_calibration_ui.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/lidartag-placement.svg b/sensor/docs/images/camera-lidar/lidartag-placement.svg
deleted file mode 100644
index a3a0a038..00000000
--- a/sensor/docs/images/camera-lidar/lidartag-placement.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/sensor/docs/images/camera-lidar/object_point_selection.png b/sensor/docs/images/camera-lidar/object_point_selection.png
deleted file mode 100644
index 1d5af108..00000000
Binary files a/sensor/docs/images/camera-lidar/object_point_selection.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/optimization_pipeline_1.svg b/sensor/docs/images/camera-lidar/optimization_pipeline_1.svg
deleted file mode 100644
index fbb2bdf8..00000000
--- a/sensor/docs/images/camera-lidar/optimization_pipeline_1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/sensor/docs/images/camera-lidar/optimization_pipeline_2.svg b/sensor/docs/images/camera-lidar/optimization_pipeline_2.svg
deleted file mode 100644
index 6150aecc..00000000
--- a/sensor/docs/images/camera-lidar/optimization_pipeline_2.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/sensor/docs/images/camera-lidar/post_refinement.png b/sensor/docs/images/camera-lidar/post_refinement.png
deleted file mode 100644
index 7fca350b..00000000
Binary files a/sensor/docs/images/camera-lidar/post_refinement.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/pre_refinement.png b/sensor/docs/images/camera-lidar/pre_refinement.png
deleted file mode 100644
index ee91bd74..00000000
Binary files a/sensor/docs/images/camera-lidar/pre_refinement.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/reprojection_error.svg b/sensor/docs/images/camera-lidar/reprojection_error.svg
deleted file mode 100644
index dac46567..00000000
--- a/sensor/docs/images/camera-lidar/reprojection_error.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/sensor/docs/images/camera-lidar/tag_based-1.jpg b/sensor/docs/images/camera-lidar/tag_based-1.jpg
deleted file mode 100644
index e6afea1f..00000000
Binary files a/sensor/docs/images/camera-lidar/tag_based-1.jpg and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/tag_based-2.jpg b/sensor/docs/images/camera-lidar/tag_based-2.jpg
deleted file mode 100644
index 677b0c8d..00000000
Binary files a/sensor/docs/images/camera-lidar/tag_based-2.jpg and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/ui_calibration_api.png b/sensor/docs/images/camera-lidar/ui_calibration_api.png
deleted file mode 100644
index 8e4891eb..00000000
Binary files a/sensor/docs/images/camera-lidar/ui_calibration_api.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/ui_calibration_options.png b/sensor/docs/images/camera-lidar/ui_calibration_options.png
deleted file mode 100644
index a97e7a97..00000000
Binary files a/sensor/docs/images/camera-lidar/ui_calibration_options.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/ui_calibration_status.png b/sensor/docs/images/camera-lidar/ui_calibration_status.png
deleted file mode 100644
index e26628da..00000000
Binary files a/sensor/docs/images/camera-lidar/ui_calibration_status.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/ui_data_collection.png b/sensor/docs/images/camera-lidar/ui_data_collection.png
deleted file mode 100644
index 32e4407d..00000000
Binary files a/sensor/docs/images/camera-lidar/ui_data_collection.png and /dev/null differ
diff --git a/sensor/docs/images/camera-lidar/ui_visualization_tf_source.png b/sensor/docs/images/camera-lidar/ui_visualization_tf_source.png
deleted file mode 100644
index 2f716a56..00000000
Binary files a/sensor/docs/images/camera-lidar/ui_visualization_tf_source.png and /dev/null differ
diff --git a/sensor/docs/images/camera_calibration.png b/sensor/docs/images/camera_calibration.png
deleted file mode 100644
index 30ac25a5..00000000
Binary files a/sensor/docs/images/camera_calibration.png and /dev/null differ
diff --git a/sensor/docs/images/camera_calibration_occupied.png b/sensor/docs/images/camera_calibration_occupied.png
deleted file mode 100644
index f38f0ab9..00000000
Binary files a/sensor/docs/images/camera_calibration_occupied.png and /dev/null differ
diff --git a/sensor/docs/images/camera_calibration_result.png b/sensor/docs/images/camera_calibration_result.png
deleted file mode 100644
index 4e37d2ff..00000000
Binary files a/sensor/docs/images/camera_calibration_result.png and /dev/null differ
diff --git a/sensor/docs/images/map_based_calibration_results.png b/sensor/docs/images/map_based_calibration_results.png
deleted file mode 100644
index 4ff8ba71..00000000
Binary files a/sensor/docs/images/map_based_calibration_results.png and /dev/null differ
diff --git a/sensor/docs/images/mapping-based/mapping_result.png b/sensor/docs/images/mapping-based/mapping_result.png
deleted file mode 100644
index 5fed887e..00000000
Binary files a/sensor/docs/images/mapping-based/mapping_result.png and /dev/null differ
diff --git a/sensor/docs/images/mapping-based/top_view_result.png b/sensor/docs/images/mapping-based/top_view_result.png
deleted file mode 100644
index a69d77ad..00000000
Binary files a/sensor/docs/images/mapping-based/top_view_result.png and /dev/null differ
diff --git a/sensor/docs/images/rqt_reconfigure.png b/sensor/docs/images/rqt_reconfigure.png
deleted file mode 100644
index 781c2800..00000000
Binary files a/sensor/docs/images/rqt_reconfigure.png and /dev/null differ
diff --git a/sensor/docs/images/rqt_reconfigure_tf.png b/sensor/docs/images/rqt_reconfigure_tf.png
deleted file mode 100644
index 8d2fe3bd..00000000
Binary files a/sensor/docs/images/rqt_reconfigure_tf.png and /dev/null differ
diff --git a/sensor/docs/images/rviz_camera.png b/sensor/docs/images/rviz_camera.png
deleted file mode 100644
index 8c07c305..00000000
Binary files a/sensor/docs/images/rviz_camera.png and /dev/null differ
diff --git a/sensor/docs/images/rviz_display_camera.png b/sensor/docs/images/rviz_display_camera.png
deleted file mode 100644
index 7ac58084..00000000
Binary files a/sensor/docs/images/rviz_display_camera.png and /dev/null differ
diff --git a/sensor/docs/images/rviz_display_lidar.png b/sensor/docs/images/rviz_display_lidar.png
deleted file mode 100644
index db8e844f..00000000
Binary files a/sensor/docs/images/rviz_display_lidar.png and /dev/null differ
diff --git a/sensor/docs/images/rviz_lidar.png b/sensor/docs/images/rviz_lidar.png
deleted file mode 100644
index 6c7d1465..00000000
Binary files a/sensor/docs/images/rviz_lidar.png and /dev/null differ
diff --git a/sensor/sensor_calibration_manager/launch/default_project/ground_plane_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/ground_plane_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/ground_plane_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/ground_plane_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/default_project/lidar_lidar_2d_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/lidar_lidar_2d_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/lidar_lidar_2d_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/lidar_lidar_2d_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/default_project/mapping_based_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/mapping_based_base_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/mapping_based_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/mapping_based_base_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/default_project/mapping_based_lidar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/mapping_based_lidar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/mapping_based_lidar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/mapping_based_lidar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/default_project/marker_radar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/marker_radar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/marker_radar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/marker_radar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml
similarity index 82%
rename from sensor/sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml
index 97a99e41..ac9ad6dd 100644
--- a/sensor/sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/default_project/tag_based_pnp_calibrator.launch.xml
@@ -5,17 +5,35 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
@@ -23,7 +41,6 @@
-
diff --git a/sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidar_calibrator.launch.xml
similarity index 97%
rename from sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidar_calibrator.launch.xml
index 06ceaae5..86db6e70 100644
--- a/sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidar_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidar_calibrator.launch.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml b/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
rename to sensor_calibration_manager/launch/default_project/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/rdv/mapping_based_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/mapping_based_base_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/rdv/mapping_based_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/mapping_based_base_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/rdv/mapping_based_lidar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/mapping_based_lidar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/rdv/mapping_based_lidar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/mapping_based_lidar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/rdv/marker_radar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/marker_radar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/rdv/marker_radar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/marker_radar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/rdv/tag_based_pnp_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/tag_based_pnp_calibrator.launch.xml
similarity index 94%
rename from sensor/sensor_calibration_manager/launch/rdv/tag_based_pnp_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/tag_based_pnp_calibrator.launch.xml
index 0543dba6..bdcbd0ca 100644
--- a/sensor/sensor_calibration_manager/launch/rdv/tag_based_pnp_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/rdv/tag_based_pnp_calibrator.launch.xml
@@ -23,15 +23,17 @@
-
+
-
+
+
+
@@ -39,7 +41,6 @@
-
diff --git a/sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidar_calibrator.launch.xml
similarity index 97%
rename from sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidar_calibrator.launch.xml
index bbc67b99..da8a82c7 100644
--- a/sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidar_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidar_calibrator.launch.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml b/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
rename to sensor_calibration_manager/launch/rdv/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x1/ground_plane_calibrator.launch.xml b/sensor_calibration_manager/launch/x1/ground_plane_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x1/ground_plane_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x1/ground_plane_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/ground_plane_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/ground_plane_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/ground_plane_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/ground_plane_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/mapping_based_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/mapping_based_base_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/mapping_based_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/mapping_based_base_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/mapping_based_lidar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/mapping_based_lidar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/mapping_based_lidar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/mapping_based_lidar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/marker_radar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/marker_radar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/marker_radar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/marker_radar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/tag_based_pnp_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/tag_based_pnp_calibrator.launch.xml
similarity index 96%
rename from sensor/sensor_calibration_manager/launch/x2/tag_based_pnp_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/tag_based_pnp_calibrator.launch.xml
index 6a2707ad..9cf0568f 100644
--- a/sensor/sensor_calibration_manager/launch/x2/tag_based_pnp_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/x2/tag_based_pnp_calibrator.launch.xml
@@ -47,9 +47,11 @@
-
+
+
+
@@ -57,7 +59,6 @@
-
diff --git a/sensor/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml b/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
rename to sensor_calibration_manager/launch/x2/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/xx1/ground_plane_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1/ground_plane_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/xx1/ground_plane_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1/ground_plane_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/xx1/mapping_based_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1/mapping_based_base_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/xx1/mapping_based_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1/mapping_based_base_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/xx1/mapping_based_lidar_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1/mapping_based_lidar_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/xx1/mapping_based_lidar_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1/mapping_based_lidar_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/xx1/tag_based_pnp_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1/tag_based_pnp_calibrator.launch.xml
similarity index 95%
rename from sensor/sensor_calibration_manager/launch/xx1/tag_based_pnp_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1/tag_based_pnp_calibrator.launch.xml
index 715ea834..87b510fa 100644
--- a/sensor/sensor_calibration_manager/launch/xx1/tag_based_pnp_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/xx1/tag_based_pnp_calibrator.launch.xml
@@ -29,9 +29,11 @@
-
+
+
+
@@ -39,7 +41,6 @@
-
diff --git a/sensor/sensor_calibration_manager/launch/xx1/tag_based_sfm_base_lidar_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1/tag_based_sfm_base_lidar_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/xx1/tag_based_sfm_base_lidar_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1/tag_based_sfm_base_lidar_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/launch/xx1_15/tag_based_pnp_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1_15/tag_based_pnp_calibrator.launch.xml
similarity index 96%
rename from sensor/sensor_calibration_manager/launch/xx1_15/tag_based_pnp_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1_15/tag_based_pnp_calibrator.launch.xml
index edf191ac..c8e1f861 100644
--- a/sensor/sensor_calibration_manager/launch/xx1_15/tag_based_pnp_calibrator.launch.xml
+++ b/sensor_calibration_manager/launch/xx1_15/tag_based_pnp_calibrator.launch.xml
@@ -31,9 +31,11 @@
-
+
+
+
@@ -41,7 +43,6 @@
-
diff --git a/sensor/sensor_calibration_manager/launch/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml b/sensor_calibration_manager/launch/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
similarity index 100%
rename from sensor/sensor_calibration_manager/launch/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
rename to sensor_calibration_manager/launch/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.launch.xml
diff --git a/sensor/sensor_calibration_manager/package.xml b/sensor_calibration_manager/package.xml
similarity index 53%
rename from sensor/sensor_calibration_manager/package.xml
rename to sensor_calibration_manager/package.xml
index b9bceb7b..f1ff9bf4 100644
--- a/sensor/sensor_calibration_manager/package.xml
+++ b/sensor_calibration_manager/package.xml
@@ -12,6 +12,17 @@
ros2launchtier4_calibration_msgs
+ autoware_image_transport_decompressor
+ ground_plane_calibrator
+ interactive_camera_lidar_calibrator
+ lidar_to_lidar_2d_calibrator
+ mapping_based_calibrator
+ marker_radar_lidar_calibrator
+ tag_based_pnp_calibrator
+ tag_based_sfm_calibrator
+ tf2_ros
+ tier4_calibration_views
+
ament_python
diff --git a/sensor/sensor_calibration_manager/resource/sensor_calibration_manager b/sensor_calibration_manager/resource/sensor_calibration_manager
similarity index 100%
rename from sensor/sensor_calibration_manager/resource/sensor_calibration_manager
rename to sensor_calibration_manager/resource/sensor_calibration_manager
diff --git a/sensor_calibration_manager/sensor_calibration_manager/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibration_manager_model.py b/sensor_calibration_manager/sensor_calibration_manager/calibration_manager_model.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibration_manager_model.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibration_manager_model.py
index 2361d608..9a0ef755 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibration_manager_model.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibration_manager_model.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
from PySide2.QtCore import QAbstractTableModel
from PySide2.QtCore import Qt
+
from sensor_calibration_manager.calibrator_wrapper import CalibratorServiceWrapper
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_base.py b/sensor_calibration_manager/sensor_calibration_manager/calibrator_base.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_base.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrator_base.py
index db719fdf..33917c81 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_base.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrator_base.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -26,14 +26,15 @@
from PySide2.QtCore import Signal
from geometry_msgs.msg import Transform
import numpy as np
+import transforms3d
+import yaml
+
from sensor_calibration_manager.calibrator_wrapper import CalibratorServiceWrapper
from sensor_calibration_manager.ros_interface import RosInterface
from sensor_calibration_manager.types import CalibratorState
from sensor_calibration_manager.types import FramePair
from sensor_calibration_manager.utils import tf_message_to_transform_matrix
from sensor_calibration_manager.utils import transform_matrix_to_tf_message
-import transforms3d
-import yaml
class CalibratorBase(QObject):
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_registry.py b/sensor_calibration_manager/sensor_calibration_manager/calibrator_registry.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_registry.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrator_registry.py
index d076f241..1f619f1a 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_registry.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrator_registry.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_wrapper.py b/sensor_calibration_manager/sensor_calibration_manager/calibrator_wrapper.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_wrapper.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrator_wrapper.py
index 5d509cae..eb1dc768 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrator_wrapper.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrator_wrapper.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -25,11 +25,12 @@
from PySide2.QtCore import QTimer
from PySide2.QtCore import Signal
from geometry_msgs.msg import Transform
-from sensor_calibration_manager.ros_interface import RosInterface
-from sensor_calibration_manager.types import FramePair
from tier4_calibration_msgs.msg import CalibrationResult
from tier4_calibration_msgs.srv import ExtrinsicCalibrator
+from sensor_calibration_manager.ros_interface import RosInterface
+from sensor_calibration_manager.types import FramePair
+
class CalibratorServiceWrapper(QObject):
data_changed = Signal()
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/ground_plane_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/ground_plane_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/ground_plane_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/ground_plane_calibrator.py
index 851935f6..41437d10 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/ground_plane_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/ground_plane_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/lidar_lidar_2d_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/lidar_lidar_2d_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/lidar_lidar_2d_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/lidar_lidar_2d_calibrator.py
index ce82c261..426b4285 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/lidar_lidar_2d_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/lidar_lidar_2d_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_base_lidar_calibrator.py
index 99501c23..9848b8c5 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_lidar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_lidar_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_lidar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_lidar_lidar_calibrator.py
index 68570624..e5b5b9f6 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_lidar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/mapping_based_lidar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/marker_radar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/marker_radar_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/marker_radar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/marker_radar_lidar_calibrator.py
index c0165fe6..9a9010f9 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/marker_radar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/marker_radar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py
index 753da0c5..3b9d9b1d 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_pnp_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidar_calibrator.py
index 1311d8db..3bdb71ad 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_calibrator.py
index 70b78bcd..32d51a7f 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_cameras_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_cameras_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_cameras_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_cameras_calibrator.py
index 51614df7..fbe54bd8 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_cameras_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/default_project/tag_based_sfm_base_lidars_cameras_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_base_lidar_calibrator.py
index efcd1904..1d349903 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py
index dde171b3..90db2a7f 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/mapping_based_lidar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/marker_radar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/marker_radar_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/marker_radar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/marker_radar_lidar_calibrator.py
index 45fbb11f..0c59f005 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/marker_radar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/marker_radar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_pnp_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_pnp_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_pnp_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_pnp_calibrator.py
index 18a8952b..6bd46ae4 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_pnp_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_pnp_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidar_calibrator.py
index c5832354..16171adf 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_calibrator.py
index 7fab90aa..8348a2d8 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_cameras_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_cameras_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_cameras_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_cameras_calibrator.py
index 42b6e3a5..b32065ac 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_cameras_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/rdv/tag_based_sfm_base_lidars_cameras_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/ground_plane_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/ground_plane_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/ground_plane_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/ground_plane_calibrator.py
index b25e3af6..3fe3438e 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/ground_plane_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x1/ground_plane_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/ground_plane_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/ground_plane_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/ground_plane_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/ground_plane_calibrator.py
index f2b6fd8e..8c97fa30 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/ground_plane_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/ground_plane_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_base_lidar_calibrator.py
index 123bb166..0493ede7 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_lidar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_lidar_lidar_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_lidar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_lidar_lidar_calibrator.py
index 55222bd3..0d16450a 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_lidar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/mapping_based_lidar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py
index 96188498..ca0b78a7 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/marker_radar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py
index e0857724..01f64319 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_pnp_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidar_calibrator.py
index 11536eff..a9f322fe 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_calibrator.py
index e54b3cec..29d56269 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_cameras_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_cameras_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_cameras_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_cameras_calibrator.py
index 4373c4a2..1d3b51a2 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_cameras_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/x2/tag_based_sfm_base_lidars_cameras_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -18,6 +18,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/ground_plane_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/ground_plane_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/ground_plane_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/ground_plane_calibrator.py
index fda4d2dc..ae198cea 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/ground_plane_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/ground_plane_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_base_lidar_calibrator.py
index b73d27b7..3b74ed40 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_lidar_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_lidar_lidar_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_lidar_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_lidar_lidar_calibrator.py
index be36cb88..c9486c8d 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_lidar_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/mapping_based_lidar_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py
index 5098df1d..305110f2 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_pnp_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_sfm_base_lidar_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_sfm_base_lidar_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_sfm_base_lidar_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_sfm_base_lidar_calibrator.py
index dbafd6f6..a75b5de0 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_sfm_base_lidar_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1/tag_based_sfm_base_lidar_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/__init__.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/__init__.py
similarity index 100%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/__init__.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/__init__.py
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_pnp_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_pnp_calibrator.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_pnp_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_pnp_calibrator.py
index f69841c2..e371c3ad 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_pnp_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_pnp_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
from typing import Dict
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.py b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.py
rename to sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.py
index 53c73cc3..fdd2e329 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/calibrators/xx1_15/tag_based_sfm_base_lidars_cameras_calibrator.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
from typing import List
import numpy as np
+
from sensor_calibration_manager.calibrator_base import CalibratorBase
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
from sensor_calibration_manager.ros_interface import RosInterface
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/ros_interface.py b/sensor_calibration_manager/sensor_calibration_manager/ros_interface.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/ros_interface.py
rename to sensor_calibration_manager/sensor_calibration_manager/ros_interface.py
index e6f49c41..3d707d37 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/ros_interface.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/ros_interface.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/sensor_calibration_manager.py b/sensor_calibration_manager/sensor_calibration_manager/sensor_calibration_manager.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/sensor_calibration_manager.py
rename to sensor_calibration_manager/sensor_calibration_manager/sensor_calibration_manager.py
index 94c2022d..95450836 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/sensor_calibration_manager.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/sensor_calibration_manager.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -44,6 +44,7 @@
from launch.launch_description import LaunchDescription
import psutil
import rclpy
+
from sensor_calibration_manager.calibration_manager_model import CalibratorManagerModel
from sensor_calibration_manager.calibrator_base import CalibratorState
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
@@ -285,7 +286,10 @@ def tfs_graph_callback(self, tfs_dict):
self.tfs_graph_signal.emit(copy.deepcopy(tfs_dict))
def tf_graph_callback2(self, tfs_dict):
- if self.calibrator.state != CalibratorState.WAITING_TFS:
+ if (
+ self.calibrator.state != CalibratorState.WAITING_SERVICES
+ and self.calibrator.state != CalibratorState.WAITING_TFS
+ ):
return
for parent, children_and_tf_dict in tfs_dict.items():
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/types.py b/sensor_calibration_manager/sensor_calibration_manager/types.py
similarity index 96%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/types.py
rename to sensor_calibration_manager/sensor_calibration_manager/types.py
index 1a59ca63..256438ed 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/types.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/types.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/utils.py b/sensor_calibration_manager/sensor_calibration_manager/utils.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/utils.py
rename to sensor_calibration_manager/sensor_calibration_manager/utils.py
index c79e0835..8d6f2822 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/utils.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/utils.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/views/calibrator_selector_view.py b/sensor_calibration_manager/sensor_calibration_manager/views/calibrator_selector_view.py
similarity index 98%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/views/calibrator_selector_view.py
rename to sensor_calibration_manager/sensor_calibration_manager/views/calibrator_selector_view.py
index 8a9451a0..37ca7652 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/views/calibrator_selector_view.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/views/calibrator_selector_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@
from PySide2.QtWidgets import QPushButton
from PySide2.QtWidgets import QVBoxLayout
from PySide2.QtWidgets import QWidget
+
from sensor_calibration_manager.calibrator_registry import CalibratorRegistry
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/views/launcher_configuration_view.py b/sensor_calibration_manager/sensor_calibration_manager/views/launcher_configuration_view.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/views/launcher_configuration_view.py
rename to sensor_calibration_manager/sensor_calibration_manager/views/launcher_configuration_view.py
index da4de64f..d8082d3d 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/views/launcher_configuration_view.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/views/launcher_configuration_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/sensor_calibration_manager/views/tf_view.py b/sensor_calibration_manager/sensor_calibration_manager/views/tf_view.py
similarity index 99%
rename from sensor/sensor_calibration_manager/sensor_calibration_manager/views/tf_view.py
rename to sensor_calibration_manager/sensor_calibration_manager/views/tf_view.py
index cbef67c0..55a019ac 100644
--- a/sensor/sensor_calibration_manager/sensor_calibration_manager/views/tf_view.py
+++ b/sensor_calibration_manager/sensor_calibration_manager/views/tf_view.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright 2024 Tier IV, Inc.
+# Copyright 2024 TIER IV, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/sensor/sensor_calibration_manager/setup.cfg b/sensor_calibration_manager/setup.cfg
similarity index 100%
rename from sensor/sensor_calibration_manager/setup.cfg
rename to sensor_calibration_manager/setup.cfg
diff --git a/sensor/sensor_calibration_manager/setup.py b/sensor_calibration_manager/setup.py
similarity index 100%
rename from sensor/sensor_calibration_manager/setup.py
rename to sensor_calibration_manager/setup.py
diff --git a/sensor/sensor_calibration_manager/test/test_pep257.py b/sensor_calibration_manager/test/test_pep257.py
similarity index 100%
rename from sensor/sensor_calibration_manager/test/test_pep257.py
rename to sensor_calibration_manager/test/test_pep257.py
diff --git a/sensor/sensor_calibration_tools/CMakeLists.txt b/sensor_calibration_tools/CMakeLists.txt
similarity index 100%
rename from sensor/sensor_calibration_tools/CMakeLists.txt
rename to sensor_calibration_tools/CMakeLists.txt
diff --git a/sensor/sensor_calibration_tools/package.xml b/sensor_calibration_tools/package.xml
similarity index 91%
rename from sensor/sensor_calibration_tools/package.xml
rename to sensor_calibration_tools/package.xml
index 639efa9b..22706c06 100644
--- a/sensor/sensor_calibration_tools/package.xml
+++ b/sensor_calibration_tools/package.xml
@@ -8,8 +8,6 @@
ament_cmake
- extrinsic_manual_calibrator
- extrinsic_map_based_calibratorground_plane_calibratorinteractive_camera_lidar_calibratorintrinsic_camera_calibrator
diff --git a/system/tunable_static_tf_broadcaster/COLCON_IGNORE b/system/tunable_static_tf_broadcaster/COLCON_IGNORE
new file mode 100644
index 00000000..e69de29b