pywayne-visualization-pangolin-utils
3D visualization toolkit wrapping Pangolin viewer for real-time display of point clouds, trajectories, cameras, planes, chessboards, and images. Use when visualizing sensor data (IMU, SLAM, tracking), robot states, or any 3D data with camera poses and trajectories. Supports dual-image display, step mode for debugging, and main camera following.
What this skill does
# Pywayne Visualization Pangolin Utils
`pywayne.visualization.pangolin_utils.PangolinViewer` provides a Python interface to Pangolin 3D visualization library.
## Quick Start
```python
from pywayne.visualization.pangolin_utils import PangolinViewer, Colors
import numpy as np
# Create viewer
viewer = PangolinViewer(800, 600)
viewer.init()
# Run visualization loop
while viewer.should_not_quit():
# ... add/update visual elements ...
viewer.show(delay_time_in_s=0.03)
viewer.join() # Wait for window to close
```
## Colors
Use `Colors` class for common colors:
```python
Colors.RED # [1.0, 0.0, 0.0]
Colors.GREEN # [0.0, 1.0, 0.0]
Colors.BLUE # [0.0, 0.0, 1.0]
Colors.YELLOW # [1.0, 1.0, 0.0]
Colors.CYAN # [0.0, 1.0, 1.0]
Colors.MAGENTA # [1.0, 0.0, 1.0]
Colors.WHITE # [1.0, 1.0, 1.0]
Colors.BLACK # [0.0, 0.0, 0.0]
Colors.ORANGE # [1.0, 0.5, 0.0]
Colors.PURPLE # [0.5, 0.5, 0.5]
Colors.GRAY # [0.5, 0.5, 0.5]
Colors.BROWN # [0.6, 0.3, 0.1]
Colors.PINK # [1.0, 0.75, 0.8]
```
## Core Control
```python
viewer.run() # Start main loop (blocking)
viewer.close() # Close viewer
viewer.join() # Wait for process to end
viewer.reset() # Reset viewer state
viewer.init() # Initialize view (set initial camera)
viewer.show(0.03) # Render frame with delay (s)
viewer.should_not_quit() # Check if viewer should continue
viewer.clear_all_visual_elements() # Clear all elements
```
## Point Cloud
```python
# Clear all points
viewer.clear_all_points()
# Add single-color points (default: red)
viewer.add_points(points, point_size=4.0)
# Add points with custom colors
viewer.add_points_with_colors(points, colors, point_size=4.0)
# Add points with named color
viewer.add_points_with_color_name(points, color_name="red", point_size=4.0)
# Data format: points (N, 3), colors (N, 3)
```
## Trajectory
```python
# Clear all trajectories
viewer.clear_all_trajectories()
# Add trajectory with quaternions (positions + orientations)
viewer.add_trajectory_quat(
positions, # (N, 3)
orientations, # (N, 4) or (N, 7) depending on quat_format
color=Colors.GREEN,
quat_format="wxyz", # "wxyz" or "xyzw"
line_width=2.0,
show_cameras=True, # Show camera models along trajectory
camera_size=0.05
)
# Add trajectory with SE3 poses
viewer.add_trajectory_se3(
poses_se3, # (N, 4) or (N, 7)
color=Colors.GREEN,
line_width=2.0,
show_cameras=False
)
```
## Camera
```python
# Clear all cameras
viewer.clear_all_cameras()
# Set main camera (view follows this camera)
viewer.set_main_camera(camera_id)
# Add camera with quaternion
cam_id = viewer.add_camera_quat(
position, # (3,)
orientation, # (4,) or (7) depending on quat_format
color=Colors.YELLOW,
quat_format="wxyz",
scale=0.1,
line_width=1.0
)
# Add camera with SE3 pose
cam_id = viewer.add_camera_se3(
pose_se3, # (4,) or (7)
color=Colors.YELLOW,
scale=0.1,
line_width=1.0
)
```
## Plane
```python
# Clear all planes
viewer.clear_all_planes()
# Add plane by vertices
viewer.add_plane(
vertices, # (>=3, 3)
color=Colors.GRAY,
alpha=0.5, # Transparency 0-1
label="plane"
)
# Add plane by normal + center
viewer.add_plane_normal_center(
normal, # (3,) - direction of plane normal
center, # (3,) - center point
size, # half-size (distance from center to edge)
color=Colors.GRAY,
alpha=0.5,
label="plane"
)
# Add plane from SE3 transformation
viewer.add_plane_from_Twp(
Twp, # (4, 4) - world pose matrix
size=1.0,
color=Colors.GREEN,
alpha=0.5,
label="plane"
)
```
## Chessboard
Useful for camera calibration and spatial reference:
```python
# Add chessboard on XY plane
viewer.add_chessboard(rows=8, cols=8, cell_size=0.1)
# Add chessboard on custom plane with normal
viewer.add_chessboard(
rows=9, cols=6, cell_size=0.025,
origin=np.array([0, 0, 0]),
normal=np.array([1, 0, 0]), # YZ plane
color1=Colors.RED,
color2=Colors.YELLOW,
alpha=0.8
)
# Add chessboard from SE3 transformation
viewer.add_chessboard_from_Twp(
rows=9, cols=6, cell_size=0.025,
Twp=pose_matrix,
color1=Colors.BLACK,
color2=Colors.WHITE,
alpha=0.8,
label="calib"
)
```
## Line
```python
viewer.clear_all_lines()
viewer.add_line(
start_point, # (3,)
end_point, # (3,)
color=Colors.WHITE,
line_width=1.0
)
```
## Image Display
```python
# Set image resolution
viewer.set_img_resolution(width, height)
# Add left image
viewer.add_image_1(img_array) # Use numpy array
viewer.add_image_1(image_path="path.jpg") # Use file path
# Add right image
viewer.add_image_2(img_array)
viewer.add_image_2(image_path="path.jpg")
```
## Step Mode (Debugging)
```python
viewer.is_step_mode_active() # Check if step mode is active
viewer.wait_for_step() # Wait for step trigger
```
## Important Notes
- **Dependencies**: Requires Pangolin library (auto-downloaded via `gettool`)
- **Data types**: All position/point inputs must be `float32`
- **Quaternion formats**: Support `wxyz` and `xyzw` formats
- **SE3 poses**: Support (4, 4) or (4, 7) matrix formats
- **Automatic cleaning**: `clear_all_visual_elements()` clears points, trajectories, cameras, planes, lines
- **Camera following**: Use `set_main_camera()` with camera ID from `add_camera_*()` return
Related in Image & Video
watch
IncludedWatch a video (URL or local path). Downloads with yt-dlp, extracts auto-scaled frames with ffmpeg, pulls the transcript from captions (or Whisper API fallback), and hands the result to Claude so it can answer questions about what's in the video.
physical-ai-defect-image-generation
IncludedUse when the user wants to orchestrate defect image generation, run associated setup, or handle outputs on OSMO. The Day 0 path handles cold-start with USD-to-ROI, image-edit augmentation, and AnomalyGen to create initial PCBA datasets. The Day 1 path performs inference and labeling on real images. This skill helps with first-time asset setup, creation of finetuning checkpoints, and configuring deployment. Trigger keywords: defect image generation, dig workflow, dig pipeline, defect image detection workflow, aoi pipeline, aoi anomalygen, usd2roi anomalygen, day 0 pcba, day 1 pcba, day 1 real-photo alignment, day 1 manual roi, metal surface anomaly, glass defect, anomalygen finetune, setup_pcb, setup_metal, setup_glass, setup_pretrained, dig setup, dig datasets, dig pretrained checkpoint, dig image-edit endpoint.
accelint-react-best-practices
IncludedReact performance optimization and best practices. ALWAYS use this skill when working with any React code - writing components, hooks, JSX; refactoring; optimizing re-renders, memoization, state management; reviewing for performance; fixing hydration mismatches; debugging infinite re-renders, stale closures, input focus loss, animations restarting; preventing remounting; implementing transitions, lazy initialization, effect dependencies. Even simple React tasks benefit from these patterns. Covers React 19+ (useEffectEvent, Activity, ref props). Triggers - useEffect, useState, useMemo, useCallback, memo, inline components, nested components, components inside components, re-render, performance, hydration, SSR, Next.js, useDeferredValue, combined hooks.
elevenlabs-agents
IncludedBuild conversational AI voice agents with ElevenLabs Platform using React, JavaScript, React Native, or Swift SDKs. Configure agents, tools (client/server/MCP), RAG knowledge bases, multi-voice, and Scribe real-time STT. Use when: building voice chat interfaces, implementing AI phone agents with Twilio, configuring agent workflows or tools, adding RAG knowledge bases, testing with CLI "agents as code", or troubleshooting deprecated @11labs packages, Android audio cutoff, CSP violations, dynamic variables, or WebRTC config. Keywords: ElevenLabs Agents, ElevenLabs voice agents, AI voice agents, conversational AI, @elevenlabs/react, @elevenlabs/client, @elevenlabs/react-native, @elevenlabs/elevenlabs-js, @elevenlabs/agents-cli, elevenlabs SDK, voice AI, TTS, text-to-speech, ASR, speech recognition, turn-taking model, WebRTC voice, WebSocket voice, ElevenLabs conversation, agent system prompt, agent tools, agent knowledge base, RAG voice agents, multi-voice agents, pronunciation dictionary, voice speed control, elevenlabs scribe, @11labs deprecated, Android audio cutoff, CSP violation elevenlabs, dynamic variables elevenlabs, case-sensitive tool names, webhook authentication
humanizer
IncludedHumanize AI-generated text by detecting and removing patterns typical of LLM output. Rewrites text to sound natural, specific, and human. Uses 28 pattern detectors, 560+ AI vocabulary terms across 3 tiers, and statistical analysis (burstiness, type-token ratio, readability) for comprehensive detection. Use when asked to humanize text, de-AI writing, make content sound more natural/human, review writing for AI patterns, score text for AI detection, or improve AI-generated drafts. Covers content, language, style, communication, and filler categories.
generating-mermaid-diagrams
IncludedSalesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says "diagram", "visualize", "ERD", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user wants PNG/SVG image output (use generating-visual-diagrams), or asks about non-Salesforce systems.