calibrate-suite 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {calibrate_suite-0.1.0/src/calibrate_suite.egg-info → calibrate_suite-0.1.2}/PKG-INFO +113 -45
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/README.md +112 -44
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/pyproject.toml +2 -1
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/setup.py +2 -1
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2/src/calibrate_suite.egg-info}/PKG-INFO +113 -45
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/calibrate_suite.egg-info/SOURCES.txt +6 -3
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/calibrate_suite.egg-info/entry_points.txt +1 -0
- calibrate_suite-0.1.2/src/gui/assets/2d-calibrate-page.png +0 -0
- calibrate_suite-0.1.2/src/gui/assets/2d-overlay-page.png +0 -0
- calibrate_suite-0.1.2/src/gui/assets/2d-record-page.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/extractor_widget.py +12 -1
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/rviz_configs/3D-3D.rviz +3 -3
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/LICENSE +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/MANIFEST.in +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/requirements.txt +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/setup.cfg +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/calibrate_suite.egg-info/dependency_links.txt +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/calibrate_suite.egg-info/requires.txt +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/calibrate_suite.egg-info/top_level.txt +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/__init__.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/app.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/config.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/templates/error.html +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/templates/index.html +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/templates/viewer.html +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/fleet_server/utils.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/__init__.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/2d-or-3d-fleet-upload.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/2d_3d_overlay_output.jpg +0 -0
- /calibrate_suite-0.1.0/src/gui/assets/3d_or_2d_calibrate-page.png → /calibrate_suite-0.1.2/src/gui/assets/3d-calibrate-page.png +0 -0
- /calibrate_suite-0.1.0/src/gui/assets/3d-or-2d-overlay_page.png → /calibrate_suite-0.1.2/src/gui/assets/3d-overlay-page.png +0 -0
- /calibrate_suite-0.1.0/src/gui/assets/3d-or-2d-record-page.png → /calibrate_suite-0.1.2/src/gui/assets/3d-record-page.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/3d_3d_overlay_output.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/GUI_homepage.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/hardware_setup.jpeg +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/single_lidar_calibrate_page.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/single_lidar_output.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/single_lidar_record_page.png +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/virya.jpg +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/main.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/calibrator_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/home_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/recorder_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/single_lidar_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/three_d_calib_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/two_d_calib_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/uploader_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/widgets/validator_widget.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/windows/main_window.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/windows/main_window_ui.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/rviz_configs/2D-3D.rviz +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/rviz_configs/default_calib.rviz +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/utils/__init__.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/utils/calibration_common.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/utils/cli_calibrate.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/utils/cli_fleet_server.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/utils/data_extractor_common.py +0 -0
- {calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/utils/gui_helpers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: calibrate-suite
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Comprehensive camera-lidar calibration suite with GUI and fleet management
|
|
5
5
|
Home-page: https://github.com/Opera5/calibrate-suite
|
|
6
6
|
Author: Jamih
|
|
@@ -149,46 +149,39 @@ sudo apt update
|
|
|
149
149
|
|
|
150
150
|
### Installation Options
|
|
151
151
|
|
|
152
|
-
**Option 1: ROS2 + System Packages (Recommended for ROS users)**
|
|
152
|
+
**Option 1: ROS2 + System Packages (Recommended for ROS users in development mode)**
|
|
153
153
|
```bash
|
|
154
154
|
# Install system dependencies
|
|
155
155
|
sudo apt install python3-opencv python3-open3d python3-pyqt5 python3-yaml
|
|
156
156
|
|
|
157
|
+
# Install in development mode
|
|
158
|
+
pip install -e .
|
|
159
|
+
|
|
160
|
+
# Or with GUI dependencies
|
|
161
|
+
pip install -e .[gui]
|
|
162
|
+
|
|
163
|
+
# Or with all features
|
|
164
|
+
pip install -e .[full]
|
|
165
|
+
|
|
157
166
|
# Build with ROS2
|
|
158
167
|
cd ~/calib_ws
|
|
159
168
|
colcon build --packages-select calibrate-suite
|
|
160
169
|
source install/setup.bash
|
|
161
|
-
|
|
162
|
-
# Launch after installation
|
|
163
|
-
calibrate-suite # GUI
|
|
164
|
-
fleet-server # REST API
|
|
165
170
|
```
|
|
166
171
|
|
|
167
172
|
**Option 2: pip - Core Only (Minimal)**
|
|
168
173
|
```bash
|
|
169
|
-
pip install calibrate-suite
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
**Option 3: pip - With Computer Vision**
|
|
173
|
-
```bash
|
|
174
|
-
pip install calibrate-suite[cv]
|
|
174
|
+
pip install calibrate-suite==0.1.0
|
|
175
175
|
```
|
|
176
|
-
|
|
177
|
-
**Option 4: pip - With 3D Processing**
|
|
176
|
+
**Option 3: pip - with full features**
|
|
178
177
|
```bash
|
|
179
|
-
pip install calibrate-suite[
|
|
178
|
+
pip install calibrate-suite==0.1.0 [full]
|
|
180
179
|
```
|
|
181
|
-
|
|
182
|
-
**Option 5: pip - With GUI**
|
|
183
|
-
```bash
|
|
184
|
-
pip install calibrate-suite[gui]
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**Option 6: pip - Full Installation (Isolated venv recommended)**
|
|
180
|
+
**Option 4: pip - Full Installation (Isolated venv recommended)**
|
|
188
181
|
```bash
|
|
189
182
|
python3 -m venv calib_env
|
|
190
183
|
source calib_env/bin/activate
|
|
191
|
-
pip install calibrate-suite
|
|
184
|
+
pip install calibrate-suite==0.1.0
|
|
192
185
|
|
|
193
186
|
# Launch commands after installation
|
|
194
187
|
calibrate-suite # GUI
|
|
@@ -235,6 +228,34 @@ fleet-server --version
|
|
|
235
228
|
|
|
236
229
|
### Known Conflicts & Solutions
|
|
237
230
|
|
|
231
|
+
**Issue: RViz snap glibc conflicts**
|
|
232
|
+
```
|
|
233
|
+
Problem: RViz snap conflicts with system glibc (__libc_pthread_init error)
|
|
234
|
+
Solution: Use system RViz instead of snap
|
|
235
|
+
sudo apt install ros-humble-rviz2
|
|
236
|
+
# OR continue without RViz (extractor still works)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Issue: NumPy version conflicts**
|
|
240
|
+
```
|
|
241
|
+
Problem: Mixed system (1.21.5) and pip NumPy versions causing sklearn conflicts
|
|
242
|
+
Solution: Use consistent package sources
|
|
243
|
+
# Remove pip scientific packages
|
|
244
|
+
pip uninstall numpy scipy scikit-learn open3d opencv-python
|
|
245
|
+
|
|
246
|
+
# Use system packages
|
|
247
|
+
sudo apt install python3-numpy python3-scipy python3-sklearn python3-opencv python3-open3d
|
|
248
|
+
|
|
249
|
+
# Reinstall calibrate-suite without dependencies
|
|
250
|
+
pip install -e . --no-deps
|
|
251
|
+
or
|
|
252
|
+
# Remove pip-installed numpy and opencv
|
|
253
|
+
pip uninstall numpy opencv-python
|
|
254
|
+
|
|
255
|
+
# Use system packages
|
|
256
|
+
sudo apt install python3-numpy python3-opencv
|
|
257
|
+
```
|
|
258
|
+
|
|
238
259
|
**Issue: OpenCV conflicts with system Qt/RViz**
|
|
239
260
|
```
|
|
240
261
|
Problem: pip opencv-python can conflict with system OpenCV
|
|
@@ -279,19 +300,34 @@ calibrate-suite
|
|
|
279
300
|
|
|
280
301
|
**GUI Workflow Tabs:**
|
|
281
302
|
|
|
282
|
-
| Home
|
|
303
|
+
| Home |
|
|
304
|
+
| |
|
|
305
|
+
|
|
306
|
+
| Single-LiDAR Record | Calibrate |
|
|
307
|
+
|---|---|
|
|
308
|
+
|  |  |
|
|
309
|
+
|
|
310
|
+
| 2D-3D Record page | 3D-3D Record page |
|
|
311
|
+
|---|---|
|
|
312
|
+
|  |  |
|
|
313
|
+
|
|
314
|
+
| 2D-3D Calibrate page | 3D-3D Calibrate page |
|
|
283
315
|
|---|---|
|
|
284
|
-
|  |  |
|
|
317
|
+
|
|
318
|
+
| 2D-3D Overlay page | 3D-3D Overlay page |
|
|
319
|
+
|---|---|
|
|
320
|
+
|  |  |
|
|
285
321
|
|
|
286
322
|
### Command-Line (Quick Calibration)
|
|
287
323
|
```bash
|
|
288
324
|
cd /home/jamih/calib_ws/src/calibrate-suite/src
|
|
289
325
|
|
|
290
326
|
#launching calibrator suite from terminal
|
|
291
|
-
# Method
|
|
327
|
+
# Method 1: Direct Python execution
|
|
292
328
|
python3 -m gui.main
|
|
293
329
|
|
|
294
|
-
# Method
|
|
330
|
+
# Method 2: Direct script execution
|
|
295
331
|
python3 gui/main.py
|
|
296
332
|
|
|
297
333
|
# 2D-3D Calibration (AprilTag-based, recommended)
|
|
@@ -313,7 +349,7 @@ python3 2d_3d_data_extractor.py \
|
|
|
313
349
|
python3 2d_3d_calibrator.py --data_root ../calib_data/multimodal_captures
|
|
314
350
|
|
|
315
351
|
# 3. Visualize results
|
|
316
|
-
python3
|
|
352
|
+
python3 2d_3d_overlay.py --data_root ../calib_data/multimodal_captures
|
|
317
353
|
```
|
|
318
354
|
|
|
319
355
|
---
|
|
@@ -358,11 +394,6 @@ python3 visualize_alignment.py --data_root ../calib_data/multimodal_captures
|
|
|
358
394
|
```
|
|
359
395
|
GUI → Single LiDAR Tab → Upload PCD files → Select method → Run → View metrics
|
|
360
396
|
```
|
|
361
|
-
|
|
362
|
-
| Record | Calibrate |
|
|
363
|
-
|---|---|
|
|
364
|
-
|  |  |
|
|
365
|
-
|
|
366
397
|
---
|
|
367
398
|
|
|
368
399
|
### Framework 2: 3D-3D Camera-LiDAR Calibration
|
|
@@ -459,17 +490,13 @@ final_extrinsic.yaml:
|
|
|
459
490
|
GUI → 2D-3D Tab → Select data directory → Configure quality filter → Run → View metrics
|
|
460
491
|
```
|
|
461
492
|
|
|
462
|
-
| GUI Interface | Alignment Visualization |
|
|
463
|
-
|---|---|
|
|
464
|
-
|  |  |
|
|
465
|
-
|
|
466
493
|
---
|
|
467
494
|
|
|
468
|
-
## 💻 Command-Line Tools
|
|
495
|
+
## 💻 Command-Line Tools(without GUI)
|
|
469
496
|
|
|
470
497
|
### Data Extraction Tools
|
|
471
498
|
```bash
|
|
472
|
-
# Synchronized extraction from ROS2 bag
|
|
499
|
+
# Synchronized extraction from ROS2 bag for 3d-3d mode
|
|
473
500
|
cd src
|
|
474
501
|
python3 3d_3d_data_extractor.py \
|
|
475
502
|
--bag path-to-bag \
|
|
@@ -477,13 +504,13 @@ python3 3d_3d_data_extractor.py \
|
|
|
477
504
|
--num-poses 20 \
|
|
478
505
|
--sync-tolerance 100
|
|
479
506
|
|
|
480
|
-
# Extract camera images only
|
|
507
|
+
# Extract camera images only for 2D-3D mode
|
|
481
508
|
python3 2d_3d_data_extractor.py \
|
|
482
509
|
--bag path-to-bag \
|
|
483
510
|
--type camera \
|
|
484
511
|
--output ../calib_data/camera_images
|
|
485
512
|
|
|
486
|
-
# Extract LiDAR point clouds only
|
|
513
|
+
# Extract LiDAR point clouds only for 2D-3D mode
|
|
487
514
|
python3 2d_3d_data_extractor.py \
|
|
488
515
|
--bag path-to-bag \
|
|
489
516
|
--type lidar \
|
|
@@ -527,12 +554,26 @@ python3 2d_3d_overlay.py \
|
|
|
527
554
|
--data_root ../calib_data/multimodal_captures \
|
|
528
555
|
--pose 1
|
|
529
556
|
|
|
530
|
-
# generate/Verify corner detection
|
|
557
|
+
# generate/Verify corner detection in lidar and camera
|
|
531
558
|
python3 camtag_det.py \
|
|
532
559
|
--data_root ../calib_data/multimodal_captures
|
|
533
560
|
|
|
534
561
|
python3 lidtag_det.py \
|
|
535
|
-
|
|
562
|
+
--data_root ../calib_data/multimodal_captures
|
|
563
|
+
```
|
|
564
|
+
### To use the package camera calibrator(if you're using AprilTag Grid)
|
|
565
|
+
```bash
|
|
566
|
+
# After pip install calibrate-suite
|
|
567
|
+
calibrate-camera --data_root /path/to/data
|
|
568
|
+
|
|
569
|
+
#For PyPI Users (after adding entry point)
|
|
570
|
+
pip install calibrate-suite[cv] # Need OpenCV
|
|
571
|
+
calibrate-camera --data_root ./my_data
|
|
572
|
+
|
|
573
|
+
#if you already have your camera intrinsics,
|
|
574
|
+
#make sure to select them in the GUI before running any tab execution
|
|
575
|
+
#as it has hardcoded intrinsics params(though if you capture with the GUI,
|
|
576
|
+
#the system saves camera_intrinsics.yaml once, but verify path is right in GUI)
|
|
536
577
|
```
|
|
537
578
|
---
|
|
538
579
|
|
|
@@ -540,7 +581,7 @@ python3 lidtag_det.py \
|
|
|
540
581
|
|
|
541
582
|
### Directory Structure (Package-Created)
|
|
542
583
|
|
|
543
|
-
When using calibrate-suite, the following directory structure is created(note
|
|
584
|
+
When using calibrate-suite, the following directory structure is created(note: they can be changed as per your wish in the GUI or through terminal by passing --data-root flag with folder path):
|
|
544
585
|
|
|
545
586
|
```
|
|
546
587
|
calib_data/
|
|
@@ -564,6 +605,33 @@ calib_data/
|
|
|
564
605
|
|
|
565
606
|
```
|
|
566
607
|
|
|
608
|
+
### Camera Intrinsics Format
|
|
609
|
+
|
|
610
|
+
All calibrate-suite scripts use a standardized `camera_intrinsics.yaml` format. If you have your own camera intrinsics, use this exact format:
|
|
611
|
+
|
|
612
|
+
```yaml
|
|
613
|
+
# Standard format supported across all calibrate-suite scripts
|
|
614
|
+
camera_matrix: [[fx, 0.0, cx], [0.0, fy, cy], [0.0, 0.0, 1.0]] # 3x3 intrinsic matrix
|
|
615
|
+
dist_coeffs: [k1, k2, p1, p2, k3] # Distortion coefficients
|
|
616
|
+
image_size: [width, height] # Image dimensions in pixels
|
|
617
|
+
distortion_model: "plumb_bob" # OpenCV distortion model
|
|
618
|
+
camera_name: "camera_frame" # Camera frame ID (optional)
|
|
619
|
+
|
|
620
|
+
# Example with real values:
|
|
621
|
+
camera_matrix: [[1364.0, 0.0, 944.66], [0.0, 1363.42, 570.16], [0.0, 0.0, 1.0]]
|
|
622
|
+
dist_coeffs: [0.1, -0.2, 0.001, 0.002, 0.05]
|
|
623
|
+
image_size: [1920, 1080]
|
|
624
|
+
distortion_model: "plumb_bob"
|
|
625
|
+
camera_name: "camera_optical_frame"
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
**Important Notes:**
|
|
629
|
+
- File must be named exactly `camera_intrinsics.yaml`
|
|
630
|
+
- Place in your data root directory (e.g., `calib_data/multimodal_captures/camera_intrinsics.yaml`)
|
|
631
|
+
- `camera_matrix` must be a 3×3 nested list (not a flat array)
|
|
632
|
+
- `dist_coeffs` must be a flat list of 5 coefficients [k1, k2, p1, p2, k3]
|
|
633
|
+
- All extractors, calibrators, and visualization scripts use this format
|
|
634
|
+
|
|
567
635
|
### Board Geometry Configuration
|
|
568
636
|
```yaml
|
|
569
637
|
board_type: "AprilTag"
|
|
@@ -757,5 +825,5 @@ A: Run separate calibrations for each camera+LiDAR pair. Combine results using p
|
|
|
757
825
|
|
|
758
826
|
## 📄 Version
|
|
759
827
|
|
|
760
|
-
**Package Version:** 0.1.
|
|
828
|
+
**Package Version:** 0.1.2
|
|
761
829
|
**License:** MIT
|
|
@@ -94,46 +94,39 @@ sudo apt update
|
|
|
94
94
|
|
|
95
95
|
### Installation Options
|
|
96
96
|
|
|
97
|
-
**Option 1: ROS2 + System Packages (Recommended for ROS users)**
|
|
97
|
+
**Option 1: ROS2 + System Packages (Recommended for ROS users in development mode)**
|
|
98
98
|
```bash
|
|
99
99
|
# Install system dependencies
|
|
100
100
|
sudo apt install python3-opencv python3-open3d python3-pyqt5 python3-yaml
|
|
101
101
|
|
|
102
|
+
# Install in development mode
|
|
103
|
+
pip install -e .
|
|
104
|
+
|
|
105
|
+
# Or with GUI dependencies
|
|
106
|
+
pip install -e .[gui]
|
|
107
|
+
|
|
108
|
+
# Or with all features
|
|
109
|
+
pip install -e .[full]
|
|
110
|
+
|
|
102
111
|
# Build with ROS2
|
|
103
112
|
cd ~/calib_ws
|
|
104
113
|
colcon build --packages-select calibrate-suite
|
|
105
114
|
source install/setup.bash
|
|
106
|
-
|
|
107
|
-
# Launch after installation
|
|
108
|
-
calibrate-suite # GUI
|
|
109
|
-
fleet-server # REST API
|
|
110
115
|
```
|
|
111
116
|
|
|
112
117
|
**Option 2: pip - Core Only (Minimal)**
|
|
113
118
|
```bash
|
|
114
|
-
pip install calibrate-suite
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**Option 3: pip - With Computer Vision**
|
|
118
|
-
```bash
|
|
119
|
-
pip install calibrate-suite[cv]
|
|
119
|
+
pip install calibrate-suite==0.1.0
|
|
120
120
|
```
|
|
121
|
-
|
|
122
|
-
**Option 4: pip - With 3D Processing**
|
|
121
|
+
**Option 3: pip - with full features**
|
|
123
122
|
```bash
|
|
124
|
-
pip install calibrate-suite[
|
|
123
|
+
pip install calibrate-suite==0.1.0 [full]
|
|
125
124
|
```
|
|
126
|
-
|
|
127
|
-
**Option 5: pip - With GUI**
|
|
128
|
-
```bash
|
|
129
|
-
pip install calibrate-suite[gui]
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**Option 6: pip - Full Installation (Isolated venv recommended)**
|
|
125
|
+
**Option 4: pip - Full Installation (Isolated venv recommended)**
|
|
133
126
|
```bash
|
|
134
127
|
python3 -m venv calib_env
|
|
135
128
|
source calib_env/bin/activate
|
|
136
|
-
pip install calibrate-suite
|
|
129
|
+
pip install calibrate-suite==0.1.0
|
|
137
130
|
|
|
138
131
|
# Launch commands after installation
|
|
139
132
|
calibrate-suite # GUI
|
|
@@ -180,6 +173,34 @@ fleet-server --version
|
|
|
180
173
|
|
|
181
174
|
### Known Conflicts & Solutions
|
|
182
175
|
|
|
176
|
+
**Issue: RViz snap glibc conflicts**
|
|
177
|
+
```
|
|
178
|
+
Problem: RViz snap conflicts with system glibc (__libc_pthread_init error)
|
|
179
|
+
Solution: Use system RViz instead of snap
|
|
180
|
+
sudo apt install ros-humble-rviz2
|
|
181
|
+
# OR continue without RViz (extractor still works)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Issue: NumPy version conflicts**
|
|
185
|
+
```
|
|
186
|
+
Problem: Mixed system (1.21.5) and pip NumPy versions causing sklearn conflicts
|
|
187
|
+
Solution: Use consistent package sources
|
|
188
|
+
# Remove pip scientific packages
|
|
189
|
+
pip uninstall numpy scipy scikit-learn open3d opencv-python
|
|
190
|
+
|
|
191
|
+
# Use system packages
|
|
192
|
+
sudo apt install python3-numpy python3-scipy python3-sklearn python3-opencv python3-open3d
|
|
193
|
+
|
|
194
|
+
# Reinstall calibrate-suite without dependencies
|
|
195
|
+
pip install -e . --no-deps
|
|
196
|
+
or
|
|
197
|
+
# Remove pip-installed numpy and opencv
|
|
198
|
+
pip uninstall numpy opencv-python
|
|
199
|
+
|
|
200
|
+
# Use system packages
|
|
201
|
+
sudo apt install python3-numpy python3-opencv
|
|
202
|
+
```
|
|
203
|
+
|
|
183
204
|
**Issue: OpenCV conflicts with system Qt/RViz**
|
|
184
205
|
```
|
|
185
206
|
Problem: pip opencv-python can conflict with system OpenCV
|
|
@@ -224,19 +245,34 @@ calibrate-suite
|
|
|
224
245
|
|
|
225
246
|
**GUI Workflow Tabs:**
|
|
226
247
|
|
|
227
|
-
| Home
|
|
248
|
+
| Home |
|
|
249
|
+
| |
|
|
250
|
+
|
|
251
|
+
| Single-LiDAR Record | Calibrate |
|
|
252
|
+
|---|---|
|
|
253
|
+
|  |  |
|
|
254
|
+
|
|
255
|
+
| 2D-3D Record page | 3D-3D Record page |
|
|
256
|
+
|---|---|
|
|
257
|
+
|  |  |
|
|
258
|
+
|
|
259
|
+
| 2D-3D Calibrate page | 3D-3D Calibrate page |
|
|
228
260
|
|---|---|
|
|
229
|
-
|  |  |
|
|
262
|
+
|
|
263
|
+
| 2D-3D Overlay page | 3D-3D Overlay page |
|
|
264
|
+
|---|---|
|
|
265
|
+
|  |  |
|
|
230
266
|
|
|
231
267
|
### Command-Line (Quick Calibration)
|
|
232
268
|
```bash
|
|
233
269
|
cd /home/jamih/calib_ws/src/calibrate-suite/src
|
|
234
270
|
|
|
235
271
|
#launching calibrator suite from terminal
|
|
236
|
-
# Method
|
|
272
|
+
# Method 1: Direct Python execution
|
|
237
273
|
python3 -m gui.main
|
|
238
274
|
|
|
239
|
-
# Method
|
|
275
|
+
# Method 2: Direct script execution
|
|
240
276
|
python3 gui/main.py
|
|
241
277
|
|
|
242
278
|
# 2D-3D Calibration (AprilTag-based, recommended)
|
|
@@ -258,7 +294,7 @@ python3 2d_3d_data_extractor.py \
|
|
|
258
294
|
python3 2d_3d_calibrator.py --data_root ../calib_data/multimodal_captures
|
|
259
295
|
|
|
260
296
|
# 3. Visualize results
|
|
261
|
-
python3
|
|
297
|
+
python3 2d_3d_overlay.py --data_root ../calib_data/multimodal_captures
|
|
262
298
|
```
|
|
263
299
|
|
|
264
300
|
---
|
|
@@ -303,11 +339,6 @@ python3 visualize_alignment.py --data_root ../calib_data/multimodal_captures
|
|
|
303
339
|
```
|
|
304
340
|
GUI → Single LiDAR Tab → Upload PCD files → Select method → Run → View metrics
|
|
305
341
|
```
|
|
306
|
-
|
|
307
|
-
| Record | Calibrate |
|
|
308
|
-
|---|---|
|
|
309
|
-
|  |  |
|
|
310
|
-
|
|
311
342
|
---
|
|
312
343
|
|
|
313
344
|
### Framework 2: 3D-3D Camera-LiDAR Calibration
|
|
@@ -404,17 +435,13 @@ final_extrinsic.yaml:
|
|
|
404
435
|
GUI → 2D-3D Tab → Select data directory → Configure quality filter → Run → View metrics
|
|
405
436
|
```
|
|
406
437
|
|
|
407
|
-
| GUI Interface | Alignment Visualization |
|
|
408
|
-
|---|---|
|
|
409
|
-
|  |  |
|
|
410
|
-
|
|
411
438
|
---
|
|
412
439
|
|
|
413
|
-
## 💻 Command-Line Tools
|
|
440
|
+
## 💻 Command-Line Tools(without GUI)
|
|
414
441
|
|
|
415
442
|
### Data Extraction Tools
|
|
416
443
|
```bash
|
|
417
|
-
# Synchronized extraction from ROS2 bag
|
|
444
|
+
# Synchronized extraction from ROS2 bag for 3d-3d mode
|
|
418
445
|
cd src
|
|
419
446
|
python3 3d_3d_data_extractor.py \
|
|
420
447
|
--bag path-to-bag \
|
|
@@ -422,13 +449,13 @@ python3 3d_3d_data_extractor.py \
|
|
|
422
449
|
--num-poses 20 \
|
|
423
450
|
--sync-tolerance 100
|
|
424
451
|
|
|
425
|
-
# Extract camera images only
|
|
452
|
+
# Extract camera images only for 2D-3D mode
|
|
426
453
|
python3 2d_3d_data_extractor.py \
|
|
427
454
|
--bag path-to-bag \
|
|
428
455
|
--type camera \
|
|
429
456
|
--output ../calib_data/camera_images
|
|
430
457
|
|
|
431
|
-
# Extract LiDAR point clouds only
|
|
458
|
+
# Extract LiDAR point clouds only for 2D-3D mode
|
|
432
459
|
python3 2d_3d_data_extractor.py \
|
|
433
460
|
--bag path-to-bag \
|
|
434
461
|
--type lidar \
|
|
@@ -472,12 +499,26 @@ python3 2d_3d_overlay.py \
|
|
|
472
499
|
--data_root ../calib_data/multimodal_captures \
|
|
473
500
|
--pose 1
|
|
474
501
|
|
|
475
|
-
# generate/Verify corner detection
|
|
502
|
+
# generate/Verify corner detection in lidar and camera
|
|
476
503
|
python3 camtag_det.py \
|
|
477
504
|
--data_root ../calib_data/multimodal_captures
|
|
478
505
|
|
|
479
506
|
python3 lidtag_det.py \
|
|
480
|
-
|
|
507
|
+
--data_root ../calib_data/multimodal_captures
|
|
508
|
+
```
|
|
509
|
+
### To use the package camera calibrator(if you're using AprilTag Grid)
|
|
510
|
+
```bash
|
|
511
|
+
# After pip install calibrate-suite
|
|
512
|
+
calibrate-camera --data_root /path/to/data
|
|
513
|
+
|
|
514
|
+
#For PyPI Users (after adding entry point)
|
|
515
|
+
pip install calibrate-suite[cv] # Need OpenCV
|
|
516
|
+
calibrate-camera --data_root ./my_data
|
|
517
|
+
|
|
518
|
+
#if you already have your camera intrinsics,
|
|
519
|
+
#make sure to select them in the GUI before running any tab execution
|
|
520
|
+
#as it has hardcoded intrinsics params(though if you capture with the GUI,
|
|
521
|
+
#the system saves camera_intrinsics.yaml once, but verify path is right in GUI)
|
|
481
522
|
```
|
|
482
523
|
---
|
|
483
524
|
|
|
@@ -485,7 +526,7 @@ python3 lidtag_det.py \
|
|
|
485
526
|
|
|
486
527
|
### Directory Structure (Package-Created)
|
|
487
528
|
|
|
488
|
-
When using calibrate-suite, the following directory structure is created(note
|
|
529
|
+
When using calibrate-suite, the following directory structure is created(note: they can be changed as per your wish in the GUI or through terminal by passing --data-root flag with folder path):
|
|
489
530
|
|
|
490
531
|
```
|
|
491
532
|
calib_data/
|
|
@@ -509,6 +550,33 @@ calib_data/
|
|
|
509
550
|
|
|
510
551
|
```
|
|
511
552
|
|
|
553
|
+
### Camera Intrinsics Format
|
|
554
|
+
|
|
555
|
+
All calibrate-suite scripts use a standardized `camera_intrinsics.yaml` format. If you have your own camera intrinsics, use this exact format:
|
|
556
|
+
|
|
557
|
+
```yaml
|
|
558
|
+
# Standard format supported across all calibrate-suite scripts
|
|
559
|
+
camera_matrix: [[fx, 0.0, cx], [0.0, fy, cy], [0.0, 0.0, 1.0]] # 3x3 intrinsic matrix
|
|
560
|
+
dist_coeffs: [k1, k2, p1, p2, k3] # Distortion coefficients
|
|
561
|
+
image_size: [width, height] # Image dimensions in pixels
|
|
562
|
+
distortion_model: "plumb_bob" # OpenCV distortion model
|
|
563
|
+
camera_name: "camera_frame" # Camera frame ID (optional)
|
|
564
|
+
|
|
565
|
+
# Example with real values:
|
|
566
|
+
camera_matrix: [[1364.0, 0.0, 944.66], [0.0, 1363.42, 570.16], [0.0, 0.0, 1.0]]
|
|
567
|
+
dist_coeffs: [0.1, -0.2, 0.001, 0.002, 0.05]
|
|
568
|
+
image_size: [1920, 1080]
|
|
569
|
+
distortion_model: "plumb_bob"
|
|
570
|
+
camera_name: "camera_optical_frame"
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
**Important Notes:**
|
|
574
|
+
- File must be named exactly `camera_intrinsics.yaml`
|
|
575
|
+
- Place in your data root directory (e.g., `calib_data/multimodal_captures/camera_intrinsics.yaml`)
|
|
576
|
+
- `camera_matrix` must be a 3×3 nested list (not a flat array)
|
|
577
|
+
- `dist_coeffs` must be a flat list of 5 coefficients [k1, k2, p1, p2, k3]
|
|
578
|
+
- All extractors, calibrators, and visualization scripts use this format
|
|
579
|
+
|
|
512
580
|
### Board Geometry Configuration
|
|
513
581
|
```yaml
|
|
514
582
|
board_type: "AprilTag"
|
|
@@ -702,5 +770,5 @@ A: Run separate calibrations for each camera+LiDAR pair. Combine results using p
|
|
|
702
770
|
|
|
703
771
|
## 📄 Version
|
|
704
772
|
|
|
705
|
-
**Package Version:** 0.1.
|
|
773
|
+
**Package Version:** 0.1.2
|
|
706
774
|
**License:** MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "calibrate-suite"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "Comprehensive camera-lidar calibration suite with GUI and fleet management"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
|
@@ -70,6 +70,7 @@ Repository = "https://github.com/Opera5/calibrate-suite.git"
|
|
|
70
70
|
[project.scripts]
|
|
71
71
|
calibrate-suite = "utils.cli_calibrate:main"
|
|
72
72
|
fleet-server = "utils.cli_fleet_server:main"
|
|
73
|
+
calibrate-camera = "calibrate_camera:main"
|
|
73
74
|
|
|
74
75
|
[tool.setuptools.packages]
|
|
75
76
|
find = {where = ["src"]}
|
|
@@ -15,7 +15,7 @@ long_description = readme_file.read_text(encoding="utf-8") if readme_file.exists
|
|
|
15
15
|
|
|
16
16
|
setup(
|
|
17
17
|
name="calibrate-suite",
|
|
18
|
-
version="0.1.
|
|
18
|
+
version="0.1.2",
|
|
19
19
|
description="camera-lidar calibration suite with GUI and fleet management",
|
|
20
20
|
long_description=long_description,
|
|
21
21
|
long_description_content_type="text/markdown",
|
|
@@ -29,6 +29,7 @@ setup(
|
|
|
29
29
|
"console_scripts": [
|
|
30
30
|
"calibrate-suite=utils.cli_calibrate:main",
|
|
31
31
|
"fleet-server=utils.cli_fleet_server:main",
|
|
32
|
+
"calibrate-camera=calibrate_camera:main",
|
|
32
33
|
],
|
|
33
34
|
},
|
|
34
35
|
package_data={
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: calibrate-suite
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Comprehensive camera-lidar calibration suite with GUI and fleet management
|
|
5
5
|
Home-page: https://github.com/Opera5/calibrate-suite
|
|
6
6
|
Author: Jamih
|
|
@@ -149,46 +149,39 @@ sudo apt update
|
|
|
149
149
|
|
|
150
150
|
### Installation Options
|
|
151
151
|
|
|
152
|
-
**Option 1: ROS2 + System Packages (Recommended for ROS users)**
|
|
152
|
+
**Option 1: ROS2 + System Packages (Recommended for ROS users in development mode)**
|
|
153
153
|
```bash
|
|
154
154
|
# Install system dependencies
|
|
155
155
|
sudo apt install python3-opencv python3-open3d python3-pyqt5 python3-yaml
|
|
156
156
|
|
|
157
|
+
# Install in development mode
|
|
158
|
+
pip install -e .
|
|
159
|
+
|
|
160
|
+
# Or with GUI dependencies
|
|
161
|
+
pip install -e .[gui]
|
|
162
|
+
|
|
163
|
+
# Or with all features
|
|
164
|
+
pip install -e .[full]
|
|
165
|
+
|
|
157
166
|
# Build with ROS2
|
|
158
167
|
cd ~/calib_ws
|
|
159
168
|
colcon build --packages-select calibrate-suite
|
|
160
169
|
source install/setup.bash
|
|
161
|
-
|
|
162
|
-
# Launch after installation
|
|
163
|
-
calibrate-suite # GUI
|
|
164
|
-
fleet-server # REST API
|
|
165
170
|
```
|
|
166
171
|
|
|
167
172
|
**Option 2: pip - Core Only (Minimal)**
|
|
168
173
|
```bash
|
|
169
|
-
pip install calibrate-suite
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
**Option 3: pip - With Computer Vision**
|
|
173
|
-
```bash
|
|
174
|
-
pip install calibrate-suite[cv]
|
|
174
|
+
pip install calibrate-suite==0.1.0
|
|
175
175
|
```
|
|
176
|
-
|
|
177
|
-
**Option 4: pip - With 3D Processing**
|
|
176
|
+
**Option 3: pip - with full features**
|
|
178
177
|
```bash
|
|
179
|
-
pip install calibrate-suite[
|
|
178
|
+
pip install calibrate-suite==0.1.0 [full]
|
|
180
179
|
```
|
|
181
|
-
|
|
182
|
-
**Option 5: pip - With GUI**
|
|
183
|
-
```bash
|
|
184
|
-
pip install calibrate-suite[gui]
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**Option 6: pip - Full Installation (Isolated venv recommended)**
|
|
180
|
+
**Option 4: pip - Full Installation (Isolated venv recommended)**
|
|
188
181
|
```bash
|
|
189
182
|
python3 -m venv calib_env
|
|
190
183
|
source calib_env/bin/activate
|
|
191
|
-
pip install calibrate-suite
|
|
184
|
+
pip install calibrate-suite==0.1.0
|
|
192
185
|
|
|
193
186
|
# Launch commands after installation
|
|
194
187
|
calibrate-suite # GUI
|
|
@@ -235,6 +228,34 @@ fleet-server --version
|
|
|
235
228
|
|
|
236
229
|
### Known Conflicts & Solutions
|
|
237
230
|
|
|
231
|
+
**Issue: RViz snap glibc conflicts**
|
|
232
|
+
```
|
|
233
|
+
Problem: RViz snap conflicts with system glibc (__libc_pthread_init error)
|
|
234
|
+
Solution: Use system RViz instead of snap
|
|
235
|
+
sudo apt install ros-humble-rviz2
|
|
236
|
+
# OR continue without RViz (extractor still works)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Issue: NumPy version conflicts**
|
|
240
|
+
```
|
|
241
|
+
Problem: Mixed system (1.21.5) and pip NumPy versions causing sklearn conflicts
|
|
242
|
+
Solution: Use consistent package sources
|
|
243
|
+
# Remove pip scientific packages
|
|
244
|
+
pip uninstall numpy scipy scikit-learn open3d opencv-python
|
|
245
|
+
|
|
246
|
+
# Use system packages
|
|
247
|
+
sudo apt install python3-numpy python3-scipy python3-sklearn python3-opencv python3-open3d
|
|
248
|
+
|
|
249
|
+
# Reinstall calibrate-suite without dependencies
|
|
250
|
+
pip install -e . --no-deps
|
|
251
|
+
or
|
|
252
|
+
# Remove pip-installed numpy and opencv
|
|
253
|
+
pip uninstall numpy opencv-python
|
|
254
|
+
|
|
255
|
+
# Use system packages
|
|
256
|
+
sudo apt install python3-numpy python3-opencv
|
|
257
|
+
```
|
|
258
|
+
|
|
238
259
|
**Issue: OpenCV conflicts with system Qt/RViz**
|
|
239
260
|
```
|
|
240
261
|
Problem: pip opencv-python can conflict with system OpenCV
|
|
@@ -279,19 +300,34 @@ calibrate-suite
|
|
|
279
300
|
|
|
280
301
|
**GUI Workflow Tabs:**
|
|
281
302
|
|
|
282
|
-
| Home
|
|
303
|
+
| Home |
|
|
304
|
+
| |
|
|
305
|
+
|
|
306
|
+
| Single-LiDAR Record | Calibrate |
|
|
307
|
+
|---|---|
|
|
308
|
+
|  |  |
|
|
309
|
+
|
|
310
|
+
| 2D-3D Record page | 3D-3D Record page |
|
|
311
|
+
|---|---|
|
|
312
|
+
|  |  |
|
|
313
|
+
|
|
314
|
+
| 2D-3D Calibrate page | 3D-3D Calibrate page |
|
|
283
315
|
|---|---|
|
|
284
|
-
|  |  |
|
|
317
|
+
|
|
318
|
+
| 2D-3D Overlay page | 3D-3D Overlay page |
|
|
319
|
+
|---|---|
|
|
320
|
+
|  |  |
|
|
285
321
|
|
|
286
322
|
### Command-Line (Quick Calibration)
|
|
287
323
|
```bash
|
|
288
324
|
cd /home/jamih/calib_ws/src/calibrate-suite/src
|
|
289
325
|
|
|
290
326
|
#launching calibrator suite from terminal
|
|
291
|
-
# Method
|
|
327
|
+
# Method 1: Direct Python execution
|
|
292
328
|
python3 -m gui.main
|
|
293
329
|
|
|
294
|
-
# Method
|
|
330
|
+
# Method 2: Direct script execution
|
|
295
331
|
python3 gui/main.py
|
|
296
332
|
|
|
297
333
|
# 2D-3D Calibration (AprilTag-based, recommended)
|
|
@@ -313,7 +349,7 @@ python3 2d_3d_data_extractor.py \
|
|
|
313
349
|
python3 2d_3d_calibrator.py --data_root ../calib_data/multimodal_captures
|
|
314
350
|
|
|
315
351
|
# 3. Visualize results
|
|
316
|
-
python3
|
|
352
|
+
python3 2d_3d_overlay.py --data_root ../calib_data/multimodal_captures
|
|
317
353
|
```
|
|
318
354
|
|
|
319
355
|
---
|
|
@@ -358,11 +394,6 @@ python3 visualize_alignment.py --data_root ../calib_data/multimodal_captures
|
|
|
358
394
|
```
|
|
359
395
|
GUI → Single LiDAR Tab → Upload PCD files → Select method → Run → View metrics
|
|
360
396
|
```
|
|
361
|
-
|
|
362
|
-
| Record | Calibrate |
|
|
363
|
-
|---|---|
|
|
364
|
-
|  |  |
|
|
365
|
-
|
|
366
397
|
---
|
|
367
398
|
|
|
368
399
|
### Framework 2: 3D-3D Camera-LiDAR Calibration
|
|
@@ -459,17 +490,13 @@ final_extrinsic.yaml:
|
|
|
459
490
|
GUI → 2D-3D Tab → Select data directory → Configure quality filter → Run → View metrics
|
|
460
491
|
```
|
|
461
492
|
|
|
462
|
-
| GUI Interface | Alignment Visualization |
|
|
463
|
-
|---|---|
|
|
464
|
-
|  |  |
|
|
465
|
-
|
|
466
493
|
---
|
|
467
494
|
|
|
468
|
-
## 💻 Command-Line Tools
|
|
495
|
+
## 💻 Command-Line Tools(without GUI)
|
|
469
496
|
|
|
470
497
|
### Data Extraction Tools
|
|
471
498
|
```bash
|
|
472
|
-
# Synchronized extraction from ROS2 bag
|
|
499
|
+
# Synchronized extraction from ROS2 bag for 3d-3d mode
|
|
473
500
|
cd src
|
|
474
501
|
python3 3d_3d_data_extractor.py \
|
|
475
502
|
--bag path-to-bag \
|
|
@@ -477,13 +504,13 @@ python3 3d_3d_data_extractor.py \
|
|
|
477
504
|
--num-poses 20 \
|
|
478
505
|
--sync-tolerance 100
|
|
479
506
|
|
|
480
|
-
# Extract camera images only
|
|
507
|
+
# Extract camera images only for 2D-3D mode
|
|
481
508
|
python3 2d_3d_data_extractor.py \
|
|
482
509
|
--bag path-to-bag \
|
|
483
510
|
--type camera \
|
|
484
511
|
--output ../calib_data/camera_images
|
|
485
512
|
|
|
486
|
-
# Extract LiDAR point clouds only
|
|
513
|
+
# Extract LiDAR point clouds only for 2D-3D mode
|
|
487
514
|
python3 2d_3d_data_extractor.py \
|
|
488
515
|
--bag path-to-bag \
|
|
489
516
|
--type lidar \
|
|
@@ -527,12 +554,26 @@ python3 2d_3d_overlay.py \
|
|
|
527
554
|
--data_root ../calib_data/multimodal_captures \
|
|
528
555
|
--pose 1
|
|
529
556
|
|
|
530
|
-
# generate/Verify corner detection
|
|
557
|
+
# generate/Verify corner detection in lidar and camera
|
|
531
558
|
python3 camtag_det.py \
|
|
532
559
|
--data_root ../calib_data/multimodal_captures
|
|
533
560
|
|
|
534
561
|
python3 lidtag_det.py \
|
|
535
|
-
|
|
562
|
+
--data_root ../calib_data/multimodal_captures
|
|
563
|
+
```
|
|
564
|
+
### To use the package camera calibrator(if you're using AprilTag Grid)
|
|
565
|
+
```bash
|
|
566
|
+
# After pip install calibrate-suite
|
|
567
|
+
calibrate-camera --data_root /path/to/data
|
|
568
|
+
|
|
569
|
+
#For PyPI Users (after adding entry point)
|
|
570
|
+
pip install calibrate-suite[cv] # Need OpenCV
|
|
571
|
+
calibrate-camera --data_root ./my_data
|
|
572
|
+
|
|
573
|
+
#if you already have your camera intrinsics,
|
|
574
|
+
#make sure to select them in the GUI before running any tab execution
|
|
575
|
+
#as it has hardcoded intrinsics params(though if you capture with the GUI,
|
|
576
|
+
#the system saves camera_intrinsics.yaml once, but verify path is right in GUI)
|
|
536
577
|
```
|
|
537
578
|
---
|
|
538
579
|
|
|
@@ -540,7 +581,7 @@ python3 lidtag_det.py \
|
|
|
540
581
|
|
|
541
582
|
### Directory Structure (Package-Created)
|
|
542
583
|
|
|
543
|
-
When using calibrate-suite, the following directory structure is created(note
|
|
584
|
+
When using calibrate-suite, the following directory structure is created(note: they can be changed as per your wish in the GUI or through terminal by passing --data-root flag with folder path):
|
|
544
585
|
|
|
545
586
|
```
|
|
546
587
|
calib_data/
|
|
@@ -564,6 +605,33 @@ calib_data/
|
|
|
564
605
|
|
|
565
606
|
```
|
|
566
607
|
|
|
608
|
+
### Camera Intrinsics Format
|
|
609
|
+
|
|
610
|
+
All calibrate-suite scripts use a standardized `camera_intrinsics.yaml` format. If you have your own camera intrinsics, use this exact format:
|
|
611
|
+
|
|
612
|
+
```yaml
|
|
613
|
+
# Standard format supported across all calibrate-suite scripts
|
|
614
|
+
camera_matrix: [[fx, 0.0, cx], [0.0, fy, cy], [0.0, 0.0, 1.0]] # 3x3 intrinsic matrix
|
|
615
|
+
dist_coeffs: [k1, k2, p1, p2, k3] # Distortion coefficients
|
|
616
|
+
image_size: [width, height] # Image dimensions in pixels
|
|
617
|
+
distortion_model: "plumb_bob" # OpenCV distortion model
|
|
618
|
+
camera_name: "camera_frame" # Camera frame ID (optional)
|
|
619
|
+
|
|
620
|
+
# Example with real values:
|
|
621
|
+
camera_matrix: [[1364.0, 0.0, 944.66], [0.0, 1363.42, 570.16], [0.0, 0.0, 1.0]]
|
|
622
|
+
dist_coeffs: [0.1, -0.2, 0.001, 0.002, 0.05]
|
|
623
|
+
image_size: [1920, 1080]
|
|
624
|
+
distortion_model: "plumb_bob"
|
|
625
|
+
camera_name: "camera_optical_frame"
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
**Important Notes:**
|
|
629
|
+
- File must be named exactly `camera_intrinsics.yaml`
|
|
630
|
+
- Place in your data root directory (e.g., `calib_data/multimodal_captures/camera_intrinsics.yaml`)
|
|
631
|
+
- `camera_matrix` must be a 3×3 nested list (not a flat array)
|
|
632
|
+
- `dist_coeffs` must be a flat list of 5 coefficients [k1, k2, p1, p2, k3]
|
|
633
|
+
- All extractors, calibrators, and visualization scripts use this format
|
|
634
|
+
|
|
567
635
|
### Board Geometry Configuration
|
|
568
636
|
```yaml
|
|
569
637
|
board_type: "AprilTag"
|
|
@@ -757,5 +825,5 @@ A: Run separate calibrations for each camera+LiDAR pair. Combine results using p
|
|
|
757
825
|
|
|
758
826
|
## 📄 Version
|
|
759
827
|
|
|
760
|
-
**Package Version:** 0.1.
|
|
828
|
+
**Package Version:** 0.1.2
|
|
761
829
|
**License:** MIT
|
|
@@ -19,12 +19,15 @@ src/fleet_server/templates/index.html
|
|
|
19
19
|
src/fleet_server/templates/viewer.html
|
|
20
20
|
src/gui/__init__.py
|
|
21
21
|
src/gui/main.py
|
|
22
|
+
src/gui/assets/2d-calibrate-page.png
|
|
22
23
|
src/gui/assets/2d-or-3d-fleet-upload.png
|
|
24
|
+
src/gui/assets/2d-overlay-page.png
|
|
25
|
+
src/gui/assets/2d-record-page.png
|
|
23
26
|
src/gui/assets/2d_3d_overlay_output.jpg
|
|
24
|
-
src/gui/assets/3d-
|
|
25
|
-
src/gui/assets/3d-
|
|
27
|
+
src/gui/assets/3d-calibrate-page.png
|
|
28
|
+
src/gui/assets/3d-overlay-page.png
|
|
29
|
+
src/gui/assets/3d-record-page.png
|
|
26
30
|
src/gui/assets/3d_3d_overlay_output.png
|
|
27
|
-
src/gui/assets/3d_or_2d_calibrate-page.png
|
|
28
31
|
src/gui/assets/GUI_homepage.png
|
|
29
32
|
src/gui/assets/hardware_setup.jpeg
|
|
30
33
|
src/gui/assets/single_lidar_calibrate_page.png
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -506,10 +506,21 @@ class ExtractorWidget(QWidget):
|
|
|
506
506
|
|
|
507
507
|
def stop_process(self):
|
|
508
508
|
if self.record_process and self.record_process.state() == QProcess.Running:
|
|
509
|
+
self.rec_log.append("🛑 Stopping process and closing RViz...")
|
|
509
510
|
self.record_process.write(b'q\n')
|
|
510
|
-
self.record_process.waitForFinished(
|
|
511
|
+
self.record_process.waitForFinished(3000) # Wait longer for graceful shutdown
|
|
511
512
|
if self.record_process.state() == QProcess.Running:
|
|
513
|
+
self.rec_log.append("⚠️ Force killing process...")
|
|
512
514
|
self.record_process.kill()
|
|
515
|
+
self.record_process.waitForFinished(1000)
|
|
516
|
+
|
|
517
|
+
# Force kill any remaining RViz processes
|
|
518
|
+
try:
|
|
519
|
+
import subprocess
|
|
520
|
+
subprocess.run(['pkill', '-f', 'rviz2'], capture_output=True)
|
|
521
|
+
self.rec_log.append("🔧 Cleaned up RViz processes")
|
|
522
|
+
except Exception as e:
|
|
523
|
+
self.rec_log.append(f"⚠️ RViz cleanup warning: {e}")
|
|
513
524
|
|
|
514
525
|
def capture_frame(self):
|
|
515
526
|
if self.record_process: self.record_process.write(b'n\n')
|
|
@@ -63,7 +63,7 @@ Visualization Manager:
|
|
|
63
63
|
Enabled: true
|
|
64
64
|
Invert Rainbow: false
|
|
65
65
|
Max Color: 255; 255; 255
|
|
66
|
-
Max Intensity:
|
|
66
|
+
Max Intensity: 206
|
|
67
67
|
Min Color: 0; 0; 0
|
|
68
68
|
Min Intensity: 0
|
|
69
69
|
Name: PointCloud2
|
|
@@ -180,5 +180,5 @@ Window Geometry:
|
|
|
180
180
|
Views:
|
|
181
181
|
collapsed: false
|
|
182
182
|
Width: 1200
|
|
183
|
-
X:
|
|
184
|
-
Y:
|
|
183
|
+
X: 555
|
|
184
|
+
Y: 101
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/calibrate_suite.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{calibrate_suite-0.1.0 → calibrate_suite-0.1.2}/src/gui/assets/single_lidar_calibrate_page.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|