calibrate-suite 0.1.0__py3-none-any.whl → 0.1.1__py3-none-any.whl
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.dist-info → calibrate_suite-0.1.1.dist-info}/METADATA +92 -33
- {calibrate_suite-0.1.0.dist-info → calibrate_suite-0.1.1.dist-info}/RECORD +8 -8
- {calibrate_suite-0.1.0.dist-info → calibrate_suite-0.1.1.dist-info}/entry_points.txt +1 -0
- gui/widgets/extractor_widget.py +12 -1
- rviz_configs/3D-3D.rviz +3 -3
- {calibrate_suite-0.1.0.dist-info → calibrate_suite-0.1.1.dist-info}/WHEEL +0 -0
- {calibrate_suite-0.1.0.dist-info → calibrate_suite-0.1.1.dist-info}/licenses/LICENSE +0 -0
- {calibrate_suite-0.1.0.dist-info → calibrate_suite-0.1.1.dist-info}/top_level.txt +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.1
|
|
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]
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
**Option 4: pip - With 3D Processing**
|
|
178
|
-
```bash
|
|
179
|
-
pip install calibrate-suite[3d]
|
|
174
|
+
pip install calibrate-suite==0.1.0
|
|
180
175
|
```
|
|
181
|
-
|
|
182
|
-
**Option 5: pip - With GUI**
|
|
176
|
+
**Option 3: pip - with full features**
|
|
183
177
|
```bash
|
|
184
|
-
pip install calibrate-suite[
|
|
178
|
+
pip install calibrate-suite==0.1.0 [full]
|
|
185
179
|
```
|
|
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
|
|
@@ -288,10 +309,10 @@ calibrate-suite
|
|
|
288
309
|
cd /home/jamih/calib_ws/src/calibrate-suite/src
|
|
289
310
|
|
|
290
311
|
#launching calibrator suite from terminal
|
|
291
|
-
# Method
|
|
312
|
+
# Method 1: Direct Python execution
|
|
292
313
|
python3 -m gui.main
|
|
293
314
|
|
|
294
|
-
# Method
|
|
315
|
+
# Method 2: Direct script execution
|
|
295
316
|
python3 gui/main.py
|
|
296
317
|
|
|
297
318
|
# 2D-3D Calibration (AprilTag-based, recommended)
|
|
@@ -313,7 +334,7 @@ python3 2d_3d_data_extractor.py \
|
|
|
313
334
|
python3 2d_3d_calibrator.py --data_root ../calib_data/multimodal_captures
|
|
314
335
|
|
|
315
336
|
# 3. Visualize results
|
|
316
|
-
python3
|
|
337
|
+
python3 2d_3d_overlay.py --data_root ../calib_data/multimodal_captures
|
|
317
338
|
```
|
|
318
339
|
|
|
319
340
|
---
|
|
@@ -465,11 +486,11 @@ GUI → 2D-3D Tab → Select data directory → Configure quality filter → Run
|
|
|
465
486
|
|
|
466
487
|
---
|
|
467
488
|
|
|
468
|
-
## 💻 Command-Line Tools
|
|
489
|
+
## 💻 Command-Line Tools(without GUI)
|
|
469
490
|
|
|
470
491
|
### Data Extraction Tools
|
|
471
492
|
```bash
|
|
472
|
-
# Synchronized extraction from ROS2 bag
|
|
493
|
+
# Synchronized extraction from ROS2 bag for 3d-3d mode
|
|
473
494
|
cd src
|
|
474
495
|
python3 3d_3d_data_extractor.py \
|
|
475
496
|
--bag path-to-bag \
|
|
@@ -477,13 +498,13 @@ python3 3d_3d_data_extractor.py \
|
|
|
477
498
|
--num-poses 20 \
|
|
478
499
|
--sync-tolerance 100
|
|
479
500
|
|
|
480
|
-
# Extract camera images only
|
|
501
|
+
# Extract camera images only for 2D-3D mode
|
|
481
502
|
python3 2d_3d_data_extractor.py \
|
|
482
503
|
--bag path-to-bag \
|
|
483
504
|
--type camera \
|
|
484
505
|
--output ../calib_data/camera_images
|
|
485
506
|
|
|
486
|
-
# Extract LiDAR point clouds only
|
|
507
|
+
# Extract LiDAR point clouds only for 2D-3D mode
|
|
487
508
|
python3 2d_3d_data_extractor.py \
|
|
488
509
|
--bag path-to-bag \
|
|
489
510
|
--type lidar \
|
|
@@ -527,12 +548,23 @@ python3 2d_3d_overlay.py \
|
|
|
527
548
|
--data_root ../calib_data/multimodal_captures \
|
|
528
549
|
--pose 1
|
|
529
550
|
|
|
530
|
-
# generate/Verify corner detection
|
|
551
|
+
# generate/Verify corner detection in lidar and camera
|
|
531
552
|
python3 camtag_det.py \
|
|
532
553
|
--data_root ../calib_data/multimodal_captures
|
|
533
554
|
|
|
534
555
|
python3 lidtag_det.py \
|
|
535
|
-
|
|
556
|
+
--data_root ../calib_data/multimodal_captures
|
|
557
|
+
```
|
|
558
|
+
### To use the package camera calibrator(if you're using AprilTag Grid)
|
|
559
|
+
```bash
|
|
560
|
+
# After pip install calibrate-suite
|
|
561
|
+
calibrate-camera --data_root /path/to/data
|
|
562
|
+
|
|
563
|
+
#For PyPI Users (after adding entry point)
|
|
564
|
+
pip install calibrate-suite[cv] # Need OpenCV
|
|
565
|
+
calibrate-camera --data_root ./my_data
|
|
566
|
+
|
|
567
|
+
#if you already have your camera intrinsics, make sure to select them in the GUI before running any tab execution as it has hardcoded intrinsics params(though if you capture with the GUI, the system saves camera_intrinsics.yaml once, but verify path is right in GUI)
|
|
536
568
|
```
|
|
537
569
|
---
|
|
538
570
|
|
|
@@ -540,7 +572,7 @@ python3 lidtag_det.py \
|
|
|
540
572
|
|
|
541
573
|
### Directory Structure (Package-Created)
|
|
542
574
|
|
|
543
|
-
When using calibrate-suite, the following directory structure is created(note
|
|
575
|
+
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
576
|
|
|
545
577
|
```
|
|
546
578
|
calib_data/
|
|
@@ -564,6 +596,33 @@ calib_data/
|
|
|
564
596
|
|
|
565
597
|
```
|
|
566
598
|
|
|
599
|
+
### Camera Intrinsics Format
|
|
600
|
+
|
|
601
|
+
All calibrate-suite scripts use a standardized `camera_intrinsics.yaml` format. If you have your own camera intrinsics, use this exact format:
|
|
602
|
+
|
|
603
|
+
```yaml
|
|
604
|
+
# Standard format supported across all calibrate-suite scripts
|
|
605
|
+
camera_matrix: [[fx, 0.0, cx], [0.0, fy, cy], [0.0, 0.0, 1.0]] # 3x3 intrinsic matrix
|
|
606
|
+
dist_coeffs: [k1, k2, p1, p2, k3] # Distortion coefficients
|
|
607
|
+
image_size: [width, height] # Image dimensions in pixels
|
|
608
|
+
distortion_model: "plumb_bob" # OpenCV distortion model
|
|
609
|
+
camera_name: "camera_frame" # Camera frame ID (optional)
|
|
610
|
+
|
|
611
|
+
# Example with real values:
|
|
612
|
+
camera_matrix: [[1364.0, 0.0, 944.66], [0.0, 1363.42, 570.16], [0.0, 0.0, 1.0]]
|
|
613
|
+
dist_coeffs: [0.1, -0.2, 0.001, 0.002, 0.05]
|
|
614
|
+
image_size: [1920, 1080]
|
|
615
|
+
distortion_model: "plumb_bob"
|
|
616
|
+
camera_name: "camera_optical_frame"
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
**Important Notes:**
|
|
620
|
+
- File must be named exactly `camera_intrinsics.yaml`
|
|
621
|
+
- Place in your data root directory (e.g., `calib_data/multimodal_captures/camera_intrinsics.yaml`)
|
|
622
|
+
- `camera_matrix` must be a 3×3 nested list (not a flat array)
|
|
623
|
+
- `dist_coeffs` must be a flat list of 5 coefficients [k1, k2, p1, p2, k3]
|
|
624
|
+
- All extractors, calibrators, and visualization scripts use this format
|
|
625
|
+
|
|
567
626
|
### Board Geometry Configuration
|
|
568
627
|
```yaml
|
|
569
628
|
board_type: "AprilTag"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
calibrate_suite-0.1.
|
|
1
|
+
calibrate_suite-0.1.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
2
2
|
fleet_server/__init__.py,sha256=Jf0LmjLdSxA38SIb-lY0nIdeW66QK_FsMxbh-ZqqGx4,870
|
|
3
3
|
fleet_server/app.py,sha256=qzc0ycWyFTjvi_DppD_TqGeO3vxJT6tv2EEUDiSJL7I,13307
|
|
4
4
|
fleet_server/config.py,sha256=aMrHL_z6YuVharn9OLejgKgldxe8wRh8t5NKIrsDMa4,2737
|
|
@@ -21,7 +21,7 @@ gui/assets/single_lidar_output.png,sha256=L6nwvXaS2noNq4W13ZG65miI_AG1I8EuY2sDMy
|
|
|
21
21
|
gui/assets/single_lidar_record_page.png,sha256=OwZAuXOoiE443kZkopZOxhehvDwTjej85xgkJ9xX1tM,60437
|
|
22
22
|
gui/assets/virya.jpg,sha256=F4VdYXoMO8F80jc32n-tgWQwJTCEGjtd7vgya18Diag,23752
|
|
23
23
|
gui/widgets/calibrator_widget.py,sha256=wS5Bo6VIJBOXj-mi1vB8tO9zKocieQd08TdL_Lejn7U,40732
|
|
24
|
-
gui/widgets/extractor_widget.py,sha256=
|
|
24
|
+
gui/widgets/extractor_widget.py,sha256=Eq4-X-Zdyf9j2xc6H16mAQ6quErpaCUmRhw5WLwHZm8,22731
|
|
25
25
|
gui/widgets/home_widget.py,sha256=XRDCcAZNqFfS41aCkotT-hET9n4IR0TtGV7qhMQkR88,4305
|
|
26
26
|
gui/widgets/recorder_widget.py,sha256=5DBI7rrDTSQrBJ4Bp_iFvdv0rNmKvBPLNW_WeVDapA0,4612
|
|
27
27
|
gui/widgets/single_lidar_widget.py,sha256=AtM5cKzXglNZjFUdksVwQVYpFvlqwFbAe9xZwrvqupI,25731
|
|
@@ -32,7 +32,7 @@ gui/widgets/validator_widget.py,sha256=lS4EI-9hWZwOJwX1d0EtgsGioPRvdbmtBSeCLukcd
|
|
|
32
32
|
gui/windows/main_window.py,sha256=6OstmZfWjQzBgnHyCTJc3LzEymgTQpWrapx2cjORHmY,1982
|
|
33
33
|
gui/windows/main_window_ui.py,sha256=4yVIRJ6KIDwxeP0kvy_IkoI29cIBp2LSUarr7AZuEH4,1627
|
|
34
34
|
rviz_configs/2D-3D.rviz,sha256=QfBz1jXWHeZH93HYoq2Ee_tXFS6QC1DIO2rexUB6Wgk,6143
|
|
35
|
-
rviz_configs/3D-3D.rviz,sha256=
|
|
35
|
+
rviz_configs/3D-3D.rviz,sha256=DUqOlOTq1CFoilkRW1Jov5Wd8fWi9BWPs-9h5_oqI-c,6095
|
|
36
36
|
rviz_configs/default_calib.rviz,sha256=nYIH16YlNcbQhAXPBfQbsQ5AXkNT7BXTWfdxwkvOJgo,5610
|
|
37
37
|
utils/__init__.py,sha256=jGrHBgfZKHPs8RloUjIW-f7LAH_n6uGKfCaDnjcz7Yk,376
|
|
38
38
|
utils/calibration_common.py,sha256=M6IAyi97tPpQk320aoPruGffa7dAO679RWax5tVQoL4,606
|
|
@@ -40,8 +40,8 @@ utils/cli_calibrate.py,sha256=F1l-JLTOs39JHm-sTLWcUwcjKerZGpXjEXm8USFt9QY,1267
|
|
|
40
40
|
utils/cli_fleet_server.py,sha256=OvkCo-ClGlwNKDJTfH5InLm0NWjxWSiSf-yAZnl2QVk,1700
|
|
41
41
|
utils/data_extractor_common.py,sha256=3DsIwFd35dfl8ZoKfsm5VA-gZmveySmBUkiErXbCN18,2611
|
|
42
42
|
utils/gui_helpers.py,sha256=hgj5AG0oH2dZMnclwzazFQlwebpBPW0JjNM_AHb9hko,723
|
|
43
|
-
calibrate_suite-0.1.
|
|
44
|
-
calibrate_suite-0.1.
|
|
45
|
-
calibrate_suite-0.1.
|
|
46
|
-
calibrate_suite-0.1.
|
|
47
|
-
calibrate_suite-0.1.
|
|
43
|
+
calibrate_suite-0.1.1.dist-info/METADATA,sha256=CetRZ9l0DEjpzqV0dn2RwUKuxIWOMCxZ2IphkVrZYzU,28125
|
|
44
|
+
calibrate_suite-0.1.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
45
|
+
calibrate_suite-0.1.1.dist-info/entry_points.txt,sha256=4EUgvjrn0X-p0RKCHbgLqGk5PohIk5Qoh94bO5JPhcs,145
|
|
46
|
+
calibrate_suite-0.1.1.dist-info/top_level.txt,sha256=SCAdU5VbFfkNGQO4zgAwM2qsZnWr0I_8k3F70Ch0EcQ,36
|
|
47
|
+
calibrate_suite-0.1.1.dist-info/RECORD,,
|
gui/widgets/extractor_widget.py
CHANGED
|
@@ -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')
|
rviz_configs/3D-3D.rviz
CHANGED
|
@@ -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
|