fix: enforce Y-up in visualize_extrinsics and sync README
This commit is contained in:
+61
-2
@@ -41,6 +41,65 @@ Arguments:
|
||||
- Camera live point cloud is retreived
|
||||
- An OpenGL windows displays it in 3D
|
||||
|
||||
## Support
|
||||
### Camera Extrinsics
|
||||
|
||||
```bash
|
||||
uv run calibrate_extrinsics.py \
|
||||
-s output/ -m aruco/markers/standard_box_markers_600mm.parquet \
|
||||
--aruco-dictionary DICT_APRILTAG_36h11 \
|
||||
--verify-depth -refine-depth -no-preview \
|
||||
-—max-samples 20 \
|
||||
--report-csv output/e2e_refine_depth_smoke.csv \
|
||||
--auto-align \
|
||||
--output output/e2e_refine_depth_smoke.json
|
||||
```
|
||||
|
||||
### Visualize Extrinsics
|
||||
|
||||
Visualize camera poses and frustums from a JSON extrinsics file using Plotly.
|
||||
|
||||
**Basic 3D Visualization (Interactive HTML):**
|
||||
```bash
|
||||
uv run visualize_extrinsics.py -i output/extrinsics.json --show
|
||||
```
|
||||
|
||||
**Static Image Export (PNG):**
|
||||
Requires `kaleido` (installed by default).
|
||||
```bash
|
||||
uv run visualize_extrinsics.py -i output/extrinsics.json -o output/viz.png
|
||||
```
|
||||
|
||||
**Bird-Eye View:**
|
||||
Use `--birdseye` for a top-down X-Z view (looking down Y axis).
|
||||
```bash
|
||||
uv run visualize_extrinsics.py -i output/extrinsics.json --birdseye --show
|
||||
```
|
||||
|
||||
**Using ZED Configs for Accurate Frustums:**
|
||||
Load intrinsics from ZED calibration files to render accurate frustum shapes.
|
||||
- **Directory**: Matches `SN<serial>.conf` files to camera serials in the JSON.
|
||||
- **Single File**: Applies one config to ALL cameras (useful for homogeneous setups).
|
||||
- **Defaults**: Uses `--resolution FHD1200` and `--eye left` unless overridden.
|
||||
|
||||
*Example: Load from config directory*
|
||||
```bash
|
||||
uv run visualize_extrinsics.py -i output/extrinsics.json \
|
||||
--zed-configs /workspaces/zed-playground/zed_settings \
|
||||
--resolution HD1080 --show
|
||||
```
|
||||
|
||||
**Troubleshooting:**
|
||||
- **Cameras bunched up?** Check `--pose-convention`. `world_from_cam` is typical for optimization outputs.
|
||||
- **Config not matching?** Ensure JSON keys match the serial numbers in `SN<serial>.conf` filenames.
|
||||
|
||||
For full options:
|
||||
```bash
|
||||
uv run visualize_extrinsics.py --help
|
||||
```
|
||||
|
||||
**Diagnostics Mode:**
|
||||
Run numerical sanity checks on the poses (orthonormality, coplanarity, consistency).
|
||||
```bash
|
||||
uv run visualize_extrinsics.py -i output/extrinsics.json --diagnose
|
||||
```
|
||||
|
||||
If you need assistance go to our Community site at https://community.stereolabs.com/
|
||||
@@ -495,6 +495,7 @@ def main(
|
||||
yaxis_title="Y (m)",
|
||||
zaxis_title="Z (m)",
|
||||
aspectmode="data", # Important for correct proportions
|
||||
camera=dict(up=dict(x=0, y=1, z=0)), # Enforce Y-up convention
|
||||
)
|
||||
|
||||
if birdseye:
|
||||
@@ -505,6 +506,12 @@ def main(
|
||||
# Wait, we want X-Z plane. So we look down Y.
|
||||
# Plotly default is Z up.
|
||||
# If our data is Y-up (standard graphics), then we look from +Y down to X-Z.
|
||||
# Actually, for X-Z plane top-down, we want to look from +Y.
|
||||
# So eye should be (0, high, 0).
|
||||
# And "up" vector for the camera should be aligned with Z (or -Z) to orient the map correctly.
|
||||
# Let's try Z-up for the camera orientation so X is right and Z is up on screen?
|
||||
# No, usually map is X right, Z up (or down).
|
||||
# If we look from +Y, and up is +Z, then Z is "up" on screen.
|
||||
eye=dict(x=0, y=2.5, z=0),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user