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
|
- Camera live point cloud is retreived
|
||||||
- An OpenGL windows displays it in 3D
|
- 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)",
|
yaxis_title="Y (m)",
|
||||||
zaxis_title="Z (m)",
|
zaxis_title="Z (m)",
|
||||||
aspectmode="data", # Important for correct proportions
|
aspectmode="data", # Important for correct proportions
|
||||||
|
camera=dict(up=dict(x=0, y=1, z=0)), # Enforce Y-up convention
|
||||||
)
|
)
|
||||||
|
|
||||||
if birdseye:
|
if birdseye:
|
||||||
@@ -505,6 +506,12 @@ def main(
|
|||||||
# Wait, we want X-Z plane. So we look down Y.
|
# Wait, we want X-Z plane. So we look down Y.
|
||||||
# Plotly default is Z up.
|
# Plotly default is Z up.
|
||||||
# If our data is Y-up (standard graphics), then we look from +Y down to X-Z.
|
# 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),
|
eye=dict(x=0, y=2.5, z=0),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user