calibrate-suite 0.1.0__py3-none-any.whl → 0.1.2__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calibrate-suite
3
- Version: 0.1.0
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[3d]
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[full]
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/Record | Overlay |
303
+ | Home |
304
+ | ![Home Interface](src/gui/assets/GUI_homepage.png)|
305
+
306
+ | Single-LiDAR Record | Calibrate |
307
+ |---|---|
308
+ | ![Single LiDAR Record](src/gui/assets/single_lidar_record_page.png) | ![Single LiDAR Calibrate](src/gui/assets/single_lidar_calibrate_page.png) |
309
+
310
+ | 2D-3D Record page | 3D-3D Record page |
311
+ |---|---|
312
+ | ![2D-3D Record](src/gui/assets/2d-record-page.png) | ![3D-3D Record](src/gui/assets/3d-record-page.png) |
313
+
314
+ | 2D-3D Calibrate page | 3D-3D Calibrate page |
283
315
  |---|---|
284
- | ![Home Interface](src/gui/assets/GUI_homepage.png) | ![Record Page](src/gui/assets/3d-or-2d-record-page.png) |
316
+ | ![2D-3D Calibrator](src/gui/assets/2d-calibrate-page.png) | ![3D-3D Calibrator](src/gui/assets/3d-calibrate-page.png) |
317
+
318
+ | 2D-3D Overlay page | 3D-3D Overlay page |
319
+ |---|---|
320
+ | ![2D-3D Calibrator](src/gui/assets/2d-overlay-page.png) | ![3D-3D Calibrator](src/gui/assets/3d-overlay-page.png) |
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 2: Direct Python execution
327
+ # Method 1: Direct Python execution
292
328
  python3 -m gui.main
293
329
 
294
- # Method 3: Direct script execution
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 visualize_alignment.py --data_root ../calib_data/multimodal_captures
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
- | ![Single LiDAR Record](src/gui/assets/single_lidar_record_page.png) | ![Single LiDAR Calibrate](src/gui/assets/single_lidar_calibrate_page.png) |
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
- | ![2D-3D Calibration](src/gui/assets/3d_or_2d_calibrate-page.png) | ![Alignment Overlay](src/gui/assets/3d-or-2d-overlay_page.png) |
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(it will be 3d_3d_data extractor for the 3d_3d mode)
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
- --data_root ../calib_data/multimodal_captures
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, they can be changed as per your wish in the GUI):
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.0
828
+ **Package Version:** 0.1.2
761
829
  **License:** MIT
@@ -1,4 +1,4 @@
1
- calibrate_suite-0.1.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
1
+ calibrate_suite-0.1.2.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
@@ -8,12 +8,15 @@ fleet_server/templates/index.html,sha256=YpAqEIQfWN46DP8N5mawyzRiypk56vIpExq9_Xm
8
8
  fleet_server/templates/viewer.html,sha256=2veSnySQiw6w8O7j0rIwSe4j2ANDCsctaaUXyMige9g,16620
9
9
  gui/__init__.py,sha256=NQP_dgQPkLbTEhfhg02dSnsEhav5nS5_BN6CUeNjG1Y,71
10
10
  gui/main.py,sha256=aiVmi8WUiErp75DxEk26lcIsCGETW8bDmDl1bGTaE6Y,492
11
+ gui/assets/2d-calibrate-page.png,sha256=6vnz-0xs56PROdsJvoS3nc87lcXQVgNZH3XKYObY440,97464
11
12
  gui/assets/2d-or-3d-fleet-upload.png,sha256=oYGgiSd2sI3yliMyHNYjkkhmpL8K3fTnHPCArszqi-E,41886
13
+ gui/assets/2d-overlay-page.png,sha256=Nh72KtFcBdMRYYGXN4MuVFdD28CFjvLuD7I_jQR-4Zk,56144
14
+ gui/assets/2d-record-page.png,sha256=_-o2GNtuQHxlRW_k6EmQJNEYB73xStvLPhHuiY-PFqo,69184
12
15
  gui/assets/2d_3d_overlay_output.jpg,sha256=UX77BHFz76YG32E6Ondgstkv6qyNE9m2Tv6MrhK2oBg,801670
13
- gui/assets/3d-or-2d-overlay_page.png,sha256=s59mEWhtqlXg04p4vmVQbMR0g20AXAZ2_nXYP_21KrI,62965
14
- gui/assets/3d-or-2d-record-page.png,sha256=Lsbi0XjJgVDJeKZfSqzWKS90K-xsLzd_DGdaCRNDXVg,71243
16
+ gui/assets/3d-calibrate-page.png,sha256=MmzOANq-ny9WwLH26tXNdqdQw22HyLZmyYw5Wd0SIQE,91215
17
+ gui/assets/3d-overlay-page.png,sha256=s59mEWhtqlXg04p4vmVQbMR0g20AXAZ2_nXYP_21KrI,62965
18
+ gui/assets/3d-record-page.png,sha256=Lsbi0XjJgVDJeKZfSqzWKS90K-xsLzd_DGdaCRNDXVg,71243
15
19
  gui/assets/3d_3d_overlay_output.png,sha256=kA20FdLb7H_AZW0iPPQ7KWHIdpYQ9ku8UsaQOau7NBY,143166
16
- gui/assets/3d_or_2d_calibrate-page.png,sha256=MmzOANq-ny9WwLH26tXNdqdQw22HyLZmyYw5Wd0SIQE,91215
17
20
  gui/assets/GUI_homepage.png,sha256=-Ev-hZ7l2zaOslxL-x3lpWLfBOxybJaHtFSt0C4VWQ4,74582
18
21
  gui/assets/hardware_setup.jpeg,sha256=IrcbI8ADXQO_yiUtembTqP0uBbkQS89P1JLhxnXQNxY,77890
19
22
  gui/assets/single_lidar_calibrate_page.png,sha256=wAJ2_l0Hqf_Tq5wTlk6j1ev6VYDk7VkKFp9Xkfna3PM,45377
@@ -21,7 +24,7 @@ gui/assets/single_lidar_output.png,sha256=L6nwvXaS2noNq4W13ZG65miI_AG1I8EuY2sDMy
21
24
  gui/assets/single_lidar_record_page.png,sha256=OwZAuXOoiE443kZkopZOxhehvDwTjej85xgkJ9xX1tM,60437
22
25
  gui/assets/virya.jpg,sha256=F4VdYXoMO8F80jc32n-tgWQwJTCEGjtd7vgya18Diag,23752
23
26
  gui/widgets/calibrator_widget.py,sha256=wS5Bo6VIJBOXj-mi1vB8tO9zKocieQd08TdL_Lejn7U,40732
24
- gui/widgets/extractor_widget.py,sha256=ztlGSIzUsMKlqSXSjdVvDxpsUsrm7Z0FylgVAXjpvWs,22146
27
+ gui/widgets/extractor_widget.py,sha256=Eq4-X-Zdyf9j2xc6H16mAQ6quErpaCUmRhw5WLwHZm8,22731
25
28
  gui/widgets/home_widget.py,sha256=XRDCcAZNqFfS41aCkotT-hET9n4IR0TtGV7qhMQkR88,4305
26
29
  gui/widgets/recorder_widget.py,sha256=5DBI7rrDTSQrBJ4Bp_iFvdv0rNmKvBPLNW_WeVDapA0,4612
27
30
  gui/widgets/single_lidar_widget.py,sha256=AtM5cKzXglNZjFUdksVwQVYpFvlqwFbAe9xZwrvqupI,25731
@@ -32,7 +35,7 @@ gui/widgets/validator_widget.py,sha256=lS4EI-9hWZwOJwX1d0EtgsGioPRvdbmtBSeCLukcd
32
35
  gui/windows/main_window.py,sha256=6OstmZfWjQzBgnHyCTJc3LzEymgTQpWrapx2cjORHmY,1982
33
36
  gui/windows/main_window_ui.py,sha256=4yVIRJ6KIDwxeP0kvy_IkoI29cIBp2LSUarr7AZuEH4,1627
34
37
  rviz_configs/2D-3D.rviz,sha256=QfBz1jXWHeZH93HYoq2Ee_tXFS6QC1DIO2rexUB6Wgk,6143
35
- rviz_configs/3D-3D.rviz,sha256=p4EA2kVYB-FNCRapjBjkIIn_uv6Ysznfj9aW1SMQ6es,6094
38
+ rviz_configs/3D-3D.rviz,sha256=DUqOlOTq1CFoilkRW1Jov5Wd8fWi9BWPs-9h5_oqI-c,6095
36
39
  rviz_configs/default_calib.rviz,sha256=nYIH16YlNcbQhAXPBfQbsQ5AXkNT7BXTWfdxwkvOJgo,5610
37
40
  utils/__init__.py,sha256=jGrHBgfZKHPs8RloUjIW-f7LAH_n6uGKfCaDnjcz7Yk,376
38
41
  utils/calibration_common.py,sha256=M6IAyi97tPpQk320aoPruGffa7dAO679RWax5tVQoL4,606
@@ -40,8 +43,8 @@ utils/cli_calibrate.py,sha256=F1l-JLTOs39JHm-sTLWcUwcjKerZGpXjEXm8USFt9QY,1267
40
43
  utils/cli_fleet_server.py,sha256=OvkCo-ClGlwNKDJTfH5InLm0NWjxWSiSf-yAZnl2QVk,1700
41
44
  utils/data_extractor_common.py,sha256=3DsIwFd35dfl8ZoKfsm5VA-gZmveySmBUkiErXbCN18,2611
42
45
  utils/gui_helpers.py,sha256=hgj5AG0oH2dZMnclwzazFQlwebpBPW0JjNM_AHb9hko,723
43
- calibrate_suite-0.1.0.dist-info/METADATA,sha256=Y_mxIIZjcbnkocqexaznleEvkwGNmkWcQK_fQdqkFHk,25332
44
- calibrate_suite-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
45
- calibrate_suite-0.1.0.dist-info/entry_points.txt,sha256=huEnH7M9a_ycUhzZ3FnXR0rw8iRsr3jj71TTSd4Srl8,104
46
- calibrate_suite-0.1.0.dist-info/top_level.txt,sha256=SCAdU5VbFfkNGQO4zgAwM2qsZnWr0I_8k3F70Ch0EcQ,36
47
- calibrate_suite-0.1.0.dist-info/RECORD,,
46
+ calibrate_suite-0.1.2.dist-info/METADATA,sha256=pJh5-_lllhWOO48y_XFxs_JX1U-l8is7PlfZ1qXiC0A,28385
47
+ calibrate_suite-0.1.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
48
+ calibrate_suite-0.1.2.dist-info/entry_points.txt,sha256=4EUgvjrn0X-p0RKCHbgLqGk5PohIk5Qoh94bO5JPhcs,145
49
+ calibrate_suite-0.1.2.dist-info/top_level.txt,sha256=SCAdU5VbFfkNGQO4zgAwM2qsZnWr0I_8k3F70Ch0EcQ,36
50
+ calibrate_suite-0.1.2.dist-info/RECORD,,
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
+ calibrate-camera = calibrate_camera:main
2
3
  calibrate-suite = utils.cli_calibrate:main
3
4
  fleet-server = utils.cli_fleet_server:main
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(1000)
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: 217
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: 720
184
- Y: 79
183
+ X: 555
184
+ Y: 101