ros2-calib


Nameros2-calib JSON
Version 0.0.4 PyPI version JSON
download
home_pageNone
SummaryA manual LiDAR-Camera calibration tool for ROS 2
upload_time2025-08-29 13:06:34
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords ros2 lidar camera calibration robotics computer-vision
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ros2_calib

[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Python](https://img.shields.io/badge/Python-3.10+-brightgreen.svg)](https://python.org)
[![ROS 2](https://img.shields.io/badge/ROS_2-mcap-blue.svg)](https://docs.ros.org/en/jazzy/p/rosbag2_storage_mcap/)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![PySide6](https://img.shields.io/badge/PySide6-GUI-orange.svg)](https://pypi.org/project/PySide6/)
[![Publish to PyPI](https://github.com/ika-rwth-aachen/ros2_calib/actions/workflows/publish.yml/badge.svg)](https://github.com/ika-rwth-aachen/ros2_calib/actions/workflows/publish.yml)

```
          ██████   ██████  ███████ ██████       ██████  █████   ██      ██ ██████  
          ██   ██ ██    ██ ██           ██      ██      ██   ██ ██      ██ ██   ██ 
          ██████  ██    ██ ███████  █████       ██      ███████ ██      ██ ██████  
          ██   ██ ██    ██      ██ ██           ██      ██   ██ ██      ██ ██   ██ 
          ██   ██  ██████  ███████ ███████       ██████ ██   ██ ███████ ██ ██████  

              ═══════════════════════════════════════════════════════════
                           Manual LiDAR-Camera Calibration Tool          
                          🎯 Precise • 🚀 Fast • 🔧 Interactive
                             >>>  pip install ros2-calib  <<<
              ═══════════════════════════════════════════════════════════
```

**ros2_calib** is a manual LiDAR-Camera calibration tool for ROS 2 that provides an intuitive graphical interface for performing precise extrinsic calibration between LiDAR sensors and cameras. Built with PySide6, it operates on recorded rosbag data without requiring a ROS 2 environment. It supports reading `/tf_static` transforms from rosbags and allows users to quickly calibrate and export the resulting transformation directly into URDF format. Although it is a manual calibration tool, it is faster to use than a target-based calibration method and is more accurate than automatic methods.

## Screenshots

### Rosbag Loading and Topic Selection
![Topic View](assets/topic_view.png)

### TF Tree Visualization and Initial Transform Selection
![Transform View](assets/tree_view.png)

### Calibration Interface
![Screenshot](assets/calibration_view.png)

### Target Link Selection and URDF Export
![Node View](assets/export_view.png)

## Features

- **🎯 Interactive Calibration**: Point-and-click interface for 2D-3D correspondences
- **🔄 Real-time Visualization**: Live point cloud projection with adjustable parameters  
- **🧠 Smart Algorithms**: RANSAC-based PnP solver with Scipy least-squares refinement
- **🌳 TF Tree Integration**: Visual transform chain management and URDF export
- **🧹 Point Cloud Cleaning**: Advanced occlusion removal using the RePLAy algorithm
- **💾 Offline Processing**: Works with .mcap rosbag files - no live ROS 2 required
- **⌨️ Keyboard Shortcuts**: ESC to cancel, Backspace to delete, Enter to confirm
- **🎨 Easy to  UI**: Organized sections with responsive design

## Installation

### Prerequisites

- Tested with Python 3.12.3 and Ubuntu 24.04
- Compatible rosbag files in `.mcap` format

### Rosbag Requirements

Your rosbag file (.mcap format) should contain the following topics:

**Required:**
- **Camera topics**: `/camera/image_raw` or `/camera/image_rect`
    - `sensor_msgs/Image`
    - `sensor_msgs/CompressedImage`
- **Camera info**: `/camera/camera_info` (sensor_msgs/CameraInfo)
- **LiDAR topics**: `/lidar/points` or similar (sensor_msgs/PointCloud2)

**Optional but Recommended:**
- **Transform topics**: `/tf_static` (tf2_msgs/TFMessage) 
  - Contains static transformations between sensor frames
  - If not available, you'll need to manually specify initial transforms


### Install from Source

```bash
# Clone the repository
git clone https://github.com/ika-rwth-aachen/ros2_calib.git
cd ros2_calib

# Create a virtual environment
python -m venv .venv
source ./venv/bin/activate

# Install in development mode
python -m pip install .
```

### Install from PyPI

```bash
pip install ros2-calib
```

## Quick Start

1. **Launch the application**:
   ```bash
   ros2_calib
   ```

2. **Load your rosbag**: Click "Load Rosbag" and select your .mcap file

3. **Select topics**: Choose your image, point cloud, camera info, and TF topics

4. **Set initial transform**: Configure the transformation between LiDAR and camera frames

5. **Create correspondences**: Click corresponding points in the 2D image and 3D point cloud

6. **Calibrate**: Run the calibration algorithm to get precise extrinsic parameters

7. **Export results**: View transformation chains and export URDF-ready transforms

## Workflow Overview

```
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Load Rosbag   │ -> │  Select Topics  │ -> │ Set Initial TF  │ -> │   Interactive   │
│   (.mcap file)  │    │  (img/pcd/info) │    │  (manual/auto)  │    │  Calibration    │
└─────────────────┘    └─────────────────┘    └─────────────────┘    └─────────────────┘
                                                                             │
┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐            │
│   Export URDF   │ <- │ Transform Chain │ <- │ View Results &  │ <----------┘
│   Transform     │    │  Visualization  │    │  TF Integration │
└─────────────────┘    └─────────────────┘    └─────────────────┘
```

## Core Architecture

- **main.py**: Application entry point with PySide6 QApplication setup
- **main_window.py**: Multi-view interface with stacked widget navigation
- **calibration_widget.py**: Interactive calibration view with 2D/3D visualization
- **calibration.py**: Core mathematical algorithms using OpenCV and Scipy
- **transformation_widget.py**: TF tree visualization using NodeGraphQt
- **bag_handler.py**: Rosbag processing and message extraction utilities
- **ros_utils.py**: Mock ROS 2 message types for offline operation
- **lidar_cleaner.py**: Point cloud cleaning based on RePLAy Algorithm (ECCV 2024)

## Algorithm Details

### Two-Stage Calibration Process

1. **Initial Estimation**: OpenCV's `solvePnPRansac` for robust pose estimation
2. **Refinement**: Scipy's `least_squares` optimization minimizing reprojection error
3. **Quality Assessment**: Automatic outlier detection and correspondence validation

### Point Cloud Processing

- **Occlusion Removal**: RePLAy algorithm removes projective artifacts
- **Intensity-based Coloring**: Configurable colormap visualization
- **Real-time Projection**: Live updates during manual adjustments

## Configuration

The tool automatically handles:
- **Message Format Detection**: Supports Image and CompressedImage types
- **Coordinate Frame Resolution**: TF tree parsing and path finding
- **Camera Model Integration**: Full camera info and distortion support

## Development

### Code Quality

```bash
# Run linter
ruff check

# Format code  
ruff format
```

### Project Structure

```
ros2_calib/
├── ros2_calib/
│   ├── __init__.py
│   ├── main.py              # Application entry point
│   ├── main_window.py       # Main GUI window with multi-view navigation
│   ├── calibration_widget.py # Interactive calibration interface
│   ├── calibration.py       # Core calibration algorithms
│   ├── transformation_widget.py # TF tree visualization
│   ├── bag_handler.py       # Rosbag processing utilities
│   ├── ros_utils.py         # Mock ROS message types
│   └── lidar_cleaner.py     # Point cloud cleaning algorithms
├── pyproject.toml          # Project configuration
└── README.md              # This file
```

## Contributing

We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## Troubleshooting

### Common Issues

- **"No topics found"**: Ensure your .mcap file contains the required sensor topics
- **"TF tree empty"**: Check that your rosbag includes transform messages
- **Calibration fails**: Verify you have at least 4 correspondence points

### Getting Help

- Open an [issue](https://github.com/ika-rwth-aachen/ros2_calib/issues) for bug reports

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Citation

If you use this tool in your research, please cite:

```bibtex
@software{ros2_calib,
  title={ros2\_calib: Manual LiDAR-Camera Calibration Tool},
  author={Till Beemelmanns},
  year={2025},
  url={https://github.com/ika-rwth-aachen/ros2_calib}
}
```

## Acknowledgments

### Point Cloud Cleaning Algorithm

We integrate the RePLAy algorithm for removing projective LiDAR artifacts:

```bibtex
@inproceedings{zhu2024replay,
  title={RePLAy: Remove Projective LiDAR Depthmap Artifacts via Exploiting Epipolar Geometry},
  author={Zhu, Shengjie and Ganesan, Girish Chandar and Kumar, Abhinav and Liu, Xiaoming},
  booktitle={ECCV},
  year={2024},
}
```

### Dependencies

- [PySide6](https://pypi.org/project/PySide6/) - Cross-platform GUI toolkit
- [OpenCV](https://opencv.org/) - Computer vision algorithms  
- [NumPy](https://numpy.org/) - Numerical computing
- [SciPy](https://scipy.org/) - Scientific computing
- [NodeGraphQt](https://github.com/jchanvfx/NodeGraphQt) - Node graph visualization
- [rosbags](https://github.com/ternaris/rosbags) - Pure Python rosbag processing

---

## Notice 

> [!IMPORTANT]  
> This repository is open-sourced and maintained by the [**Institute for Automotive Engineering (ika) at RWTH Aachen University**](https://www.ika.rwth-aachen.de/).  
> We cover a wide variety of research topics within our [*Vehicle Intelligence & Automated Driving*](https://www.ika.rwth-aachen.de/en/competences/fields-of-research/vehicle-intelligence-automated-driving.html) domain.  
> If you would like to learn more about how we can support your automated driving or robotics efforts, feel free to reach out to us!  
> :email: ***opensource@ika.rwth-aachen.de***





            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ros2-calib",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "Till Beemelmanns <till.beemelmanns@rwth-aachen.de>",
    "keywords": "ros2, lidar, camera, calibration, robotics, computer-vision",
    "author": null,
    "author_email": "Till Beemelmanns <till.beemelmanns@rwth-aachen.de>",
    "download_url": "https://files.pythonhosted.org/packages/dd/cd/4d1efddaa98b1c3a1bf59708ddb8bd3ae04fe6a52a7caf92168dbeab44c7/ros2_calib-0.0.4.tar.gz",
    "platform": null,
    "description": "# ros2_calib\n\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Python](https://img.shields.io/badge/Python-3.10+-brightgreen.svg)](https://python.org)\n[![ROS 2](https://img.shields.io/badge/ROS_2-mcap-blue.svg)](https://docs.ros.org/en/jazzy/p/rosbag2_storage_mcap/)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![PySide6](https://img.shields.io/badge/PySide6-GUI-orange.svg)](https://pypi.org/project/PySide6/)\n[![Publish to PyPI](https://github.com/ika-rwth-aachen/ros2_calib/actions/workflows/publish.yml/badge.svg)](https://github.com/ika-rwth-aachen/ros2_calib/actions/workflows/publish.yml)\n\n```\n          \u2588\u2588\u2588\u2588\u2588\u2588   \u2588\u2588\u2588\u2588\u2588\u2588  \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588       \u2588\u2588\u2588\u2588\u2588\u2588  \u2588\u2588\u2588\u2588\u2588   \u2588\u2588      \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588  \n          \u2588\u2588   \u2588\u2588 \u2588\u2588    \u2588\u2588 \u2588\u2588           \u2588\u2588      \u2588\u2588      \u2588\u2588   \u2588\u2588 \u2588\u2588      \u2588\u2588 \u2588\u2588   \u2588\u2588 \n          \u2588\u2588\u2588\u2588\u2588\u2588  \u2588\u2588    \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588  \u2588\u2588\u2588\u2588\u2588       \u2588\u2588      \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588      \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588  \n          \u2588\u2588   \u2588\u2588 \u2588\u2588    \u2588\u2588      \u2588\u2588 \u2588\u2588           \u2588\u2588      \u2588\u2588   \u2588\u2588 \u2588\u2588      \u2588\u2588 \u2588\u2588   \u2588\u2588 \n          \u2588\u2588   \u2588\u2588  \u2588\u2588\u2588\u2588\u2588\u2588  \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588       \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588   \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588  \n\n              \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n                           Manual LiDAR-Camera Calibration Tool          \n                          \ud83c\udfaf Precise \u2022 \ud83d\ude80 Fast \u2022 \ud83d\udd27 Interactive\n                             >>>  pip install ros2-calib  <<<\n              \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n```\n\n**ros2_calib** is a manual LiDAR-Camera calibration tool for ROS 2 that provides an intuitive graphical interface for performing precise extrinsic calibration between LiDAR sensors and cameras. Built with PySide6, it operates on recorded rosbag data without requiring a ROS 2 environment. It supports reading `/tf_static` transforms from rosbags and allows users to quickly calibrate and export the resulting transformation directly into URDF format. Although it is a manual calibration tool, it is faster to use than a target-based calibration method and is more accurate than automatic methods.\n\n## Screenshots\n\n### Rosbag Loading and Topic Selection\n![Topic View](assets/topic_view.png)\n\n### TF Tree Visualization and Initial Transform Selection\n![Transform View](assets/tree_view.png)\n\n### Calibration Interface\n![Screenshot](assets/calibration_view.png)\n\n### Target Link Selection and URDF Export\n![Node View](assets/export_view.png)\n\n## Features\n\n- **\ud83c\udfaf Interactive Calibration**: Point-and-click interface for 2D-3D correspondences\n- **\ud83d\udd04 Real-time Visualization**: Live point cloud projection with adjustable parameters  \n- **\ud83e\udde0 Smart Algorithms**: RANSAC-based PnP solver with Scipy least-squares refinement\n- **\ud83c\udf33 TF Tree Integration**: Visual transform chain management and URDF export\n- **\ud83e\uddf9 Point Cloud Cleaning**: Advanced occlusion removal using the RePLAy algorithm\n- **\ud83d\udcbe Offline Processing**: Works with .mcap rosbag files - no live ROS 2 required\n- **\u2328\ufe0f Keyboard Shortcuts**: ESC to cancel, Backspace to delete, Enter to confirm\n- **\ud83c\udfa8 Easy to  UI**: Organized sections with responsive design\n\n## Installation\n\n### Prerequisites\n\n- Tested with Python 3.12.3 and Ubuntu 24.04\n- Compatible rosbag files in `.mcap` format\n\n### Rosbag Requirements\n\nYour rosbag file (.mcap format) should contain the following topics:\n\n**Required:**\n- **Camera topics**: `/camera/image_raw` or `/camera/image_rect`\n    - `sensor_msgs/Image`\n    - `sensor_msgs/CompressedImage`\n- **Camera info**: `/camera/camera_info` (sensor_msgs/CameraInfo)\n- **LiDAR topics**: `/lidar/points` or similar (sensor_msgs/PointCloud2)\n\n**Optional but Recommended:**\n- **Transform topics**: `/tf_static` (tf2_msgs/TFMessage) \n  - Contains static transformations between sensor frames\n  - If not available, you'll need to manually specify initial transforms\n\n\n### Install from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/ika-rwth-aachen/ros2_calib.git\ncd ros2_calib\n\n# Create a virtual environment\npython -m venv .venv\nsource ./venv/bin/activate\n\n# Install in development mode\npython -m pip install .\n```\n\n### Install from PyPI\n\n```bash\npip install ros2-calib\n```\n\n## Quick Start\n\n1. **Launch the application**:\n   ```bash\n   ros2_calib\n   ```\n\n2. **Load your rosbag**: Click \"Load Rosbag\" and select your .mcap file\n\n3. **Select topics**: Choose your image, point cloud, camera info, and TF topics\n\n4. **Set initial transform**: Configure the transformation between LiDAR and camera frames\n\n5. **Create correspondences**: Click corresponding points in the 2D image and 3D point cloud\n\n6. **Calibrate**: Run the calibration algorithm to get precise extrinsic parameters\n\n7. **Export results**: View transformation chains and export URDF-ready transforms\n\n## Workflow Overview\n\n```\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502   Load Rosbag   \u2502 -> \u2502  Select Topics  \u2502 -> \u2502 Set Initial TF  \u2502 -> \u2502   Interactive   \u2502\n\u2502   (.mcap file)  \u2502    \u2502  (img/pcd/info) \u2502    \u2502  (manual/auto)  \u2502    \u2502  Calibration    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                                                                             \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510            \u2502\n\u2502   Export URDF   \u2502 <- \u2502 Transform Chain \u2502 <- \u2502 View Results &  \u2502 <----------\u2518\n\u2502   Transform     \u2502    \u2502  Visualization  \u2502    \u2502  TF Integration \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n## Core Architecture\n\n- **main.py**: Application entry point with PySide6 QApplication setup\n- **main_window.py**: Multi-view interface with stacked widget navigation\n- **calibration_widget.py**: Interactive calibration view with 2D/3D visualization\n- **calibration.py**: Core mathematical algorithms using OpenCV and Scipy\n- **transformation_widget.py**: TF tree visualization using NodeGraphQt\n- **bag_handler.py**: Rosbag processing and message extraction utilities\n- **ros_utils.py**: Mock ROS 2 message types for offline operation\n- **lidar_cleaner.py**: Point cloud cleaning based on RePLAy Algorithm (ECCV 2024)\n\n## Algorithm Details\n\n### Two-Stage Calibration Process\n\n1. **Initial Estimation**: OpenCV's `solvePnPRansac` for robust pose estimation\n2. **Refinement**: Scipy's `least_squares` optimization minimizing reprojection error\n3. **Quality Assessment**: Automatic outlier detection and correspondence validation\n\n### Point Cloud Processing\n\n- **Occlusion Removal**: RePLAy algorithm removes projective artifacts\n- **Intensity-based Coloring**: Configurable colormap visualization\n- **Real-time Projection**: Live updates during manual adjustments\n\n## Configuration\n\nThe tool automatically handles:\n- **Message Format Detection**: Supports Image and CompressedImage types\n- **Coordinate Frame Resolution**: TF tree parsing and path finding\n- **Camera Model Integration**: Full camera info and distortion support\n\n## Development\n\n### Code Quality\n\n```bash\n# Run linter\nruff check\n\n# Format code  \nruff format\n```\n\n### Project Structure\n\n```\nros2_calib/\n\u251c\u2500\u2500 ros2_calib/\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 main.py              # Application entry point\n\u2502   \u251c\u2500\u2500 main_window.py       # Main GUI window with multi-view navigation\n\u2502   \u251c\u2500\u2500 calibration_widget.py # Interactive calibration interface\n\u2502   \u251c\u2500\u2500 calibration.py       # Core calibration algorithms\n\u2502   \u251c\u2500\u2500 transformation_widget.py # TF tree visualization\n\u2502   \u251c\u2500\u2500 bag_handler.py       # Rosbag processing utilities\n\u2502   \u251c\u2500\u2500 ros_utils.py         # Mock ROS message types\n\u2502   \u2514\u2500\u2500 lidar_cleaner.py     # Point cloud cleaning algorithms\n\u251c\u2500\u2500 pyproject.toml          # Project configuration\n\u2514\u2500\u2500 README.md              # This file\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## Troubleshooting\n\n### Common Issues\n\n- **\"No topics found\"**: Ensure your .mcap file contains the required sensor topics\n- **\"TF tree empty\"**: Check that your rosbag includes transform messages\n- **Calibration fails**: Verify you have at least 4 correspondence points\n\n### Getting Help\n\n- Open an [issue](https://github.com/ika-rwth-aachen/ros2_calib/issues) for bug reports\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Citation\n\nIf you use this tool in your research, please cite:\n\n```bibtex\n@software{ros2_calib,\n  title={ros2\\_calib: Manual LiDAR-Camera Calibration Tool},\n  author={Till Beemelmanns},\n  year={2025},\n  url={https://github.com/ika-rwth-aachen/ros2_calib}\n}\n```\n\n## Acknowledgments\n\n### Point Cloud Cleaning Algorithm\n\nWe integrate the RePLAy algorithm for removing projective LiDAR artifacts:\n\n```bibtex\n@inproceedings{zhu2024replay,\n  title={RePLAy: Remove Projective LiDAR Depthmap Artifacts via Exploiting Epipolar Geometry},\n  author={Zhu, Shengjie and Ganesan, Girish Chandar and Kumar, Abhinav and Liu, Xiaoming},\n  booktitle={ECCV},\n  year={2024},\n}\n```\n\n### Dependencies\n\n- [PySide6](https://pypi.org/project/PySide6/) - Cross-platform GUI toolkit\n- [OpenCV](https://opencv.org/) - Computer vision algorithms  \n- [NumPy](https://numpy.org/) - Numerical computing\n- [SciPy](https://scipy.org/) - Scientific computing\n- [NodeGraphQt](https://github.com/jchanvfx/NodeGraphQt) - Node graph visualization\n- [rosbags](https://github.com/ternaris/rosbags) - Pure Python rosbag processing\n\n---\n\n## Notice \n\n> [!IMPORTANT]  \n> This repository is open-sourced and maintained by the [**Institute for Automotive Engineering (ika) at RWTH Aachen University**](https://www.ika.rwth-aachen.de/).  \n> We cover a wide variety of research topics within our [*Vehicle Intelligence & Automated Driving*](https://www.ika.rwth-aachen.de/en/competences/fields-of-research/vehicle-intelligence-automated-driving.html) domain.  \n> If you would like to learn more about how we can support your automated driving or robotics efforts, feel free to reach out to us!  \n> :email: ***opensource@ika.rwth-aachen.de***\n\n\n\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A manual LiDAR-Camera calibration tool for ROS 2",
    "version": "0.0.4",
    "project_urls": {
        "Homepage": "https://github.com/beemelmanns/ros2_calib",
        "Issues": "https://github.com/beemelmanns/ros2_calib/issues",
        "Repository": "https://github.com/beemelmanns/ros2_calib"
    },
    "split_keywords": [
        "ros2",
        " lidar",
        " camera",
        " calibration",
        " robotics",
        " computer-vision"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1137a1acac5424ff56fcbe9c2670ba23b2906f897f747bc97dac1a7f82ecbdb",
                "md5": "2419127d9465915f88ba3b65a136396a",
                "sha256": "e4ae1a875549f1d8c37f6f9e4358b2722b03fa68d28bb9755d6cedb0d354f01e"
            },
            "downloads": -1,
            "filename": "ros2_calib-0.0.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2419127d9465915f88ba3b65a136396a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 56312,
            "upload_time": "2025-08-29T13:06:33",
            "upload_time_iso_8601": "2025-08-29T13:06:33.130079Z",
            "url": "https://files.pythonhosted.org/packages/e1/13/7a1acac5424ff56fcbe9c2670ba23b2906f897f747bc97dac1a7f82ecbdb/ros2_calib-0.0.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ddcd4d1efddaa98b1c3a1bf59708ddb8bd3ae04fe6a52a7caf92168dbeab44c7",
                "md5": "8ca8a1f0ba6450a097f8a79b7e6226cd",
                "sha256": "8608e6302c7d2cde5906806e04f59c76ef6c47aea229d80a5a1217e7bbab7d77"
            },
            "downloads": -1,
            "filename": "ros2_calib-0.0.4.tar.gz",
            "has_sig": false,
            "md5_digest": "8ca8a1f0ba6450a097f8a79b7e6226cd",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 2497113,
            "upload_time": "2025-08-29T13:06:34",
            "upload_time_iso_8601": "2025-08-29T13:06:34.760807Z",
            "url": "https://files.pythonhosted.org/packages/dd/cd/4d1efddaa98b1c3a1bf59708ddb8bd3ae04fe6a52a7caf92168dbeab44c7/ros2_calib-0.0.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-29 13:06:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "beemelmanns",
    "github_project": "ros2_calib",
    "github_not_found": true,
    "lcname": "ros2-calib"
}
        
Elapsed time: 1.64230s