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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: calibrate-suite
3
- Version: 0.1.0
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[gui]
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[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
@@ -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 2: Direct Python execution
312
+ # Method 1: Direct Python execution
292
313
  python3 -m gui.main
293
314
 
294
- # Method 3: Direct script execution
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 visualize_alignment.py --data_root ../calib_data/multimodal_captures
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(it will be 3d_3d_data extractor for the 3d_3d mode)
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
- --data_root ../calib_data/multimodal_captures
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, they can be changed as per your wish in the GUI):
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.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
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=ztlGSIzUsMKlqSXSjdVvDxpsUsrm7Z0FylgVAXjpvWs,22146
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=p4EA2kVYB-FNCRapjBjkIIn_uv6Ysznfj9aW1SMQ6es,6094
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.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,,
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,,
@@ -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
@@ -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