Singularity API Referenceο
This page documents ManipulaPy.singularity, the module for comprehensive singularity analysis of robotic manipulators including detection, visualization, and workspace analysis with optional CUDA acceleration.
β
Singularity Classο
β
Singularity Detectionο
Primary Detection Methodsο
Condition Analysisο
β
Manipulability Analysisο
Ellipsoid Visualizationο
β
Workspace Analysisο
Monte Carlo Methodsο
β
Mathematical Implementationο
Jacobian Analysisο
All methods rely on the Jacobian matrix computation from the SerialManipulator:
Frame: Uses βspaceβ frame for consistency
Dimensions: 6Γn matrix (6 DOF Γ n joints)
Components: Upper 3 rows (linear), lower 3 rows (angular)
Determinant Computationο
Singularity detection uses numpy.linalg.det() with absolute value comparison:
Threshold: 1e-4 (configurable in source)
Method: Direct determinant calculation
Precision: Double precision floating point
Condition Number Calculationο
Uses numpy.linalg.cond() which implements:
Method: Ratio of largest to smallest singular values
Algorithm: SVD-based computation
Stability: Numerically stable for ill-conditioned matrices
SVD Implementationο
Manipulability ellipsoid generation uses numpy.linalg.svd():
Decomposition: J = U @ diag(S) @ V.T
Radii computation: 1.0 / sqrt(S)
Transformation: Ellipsoid points = U @ diag(radii) @ sphere_points
Convex Hull Generationο
Workspace visualization uses scipy.spatial.ConvexHull:
Algorithm: Quickhull algorithm
Input: NΓ3 array of workspace points
Output: Triangulated surface mesh
Visualization: Matplotlib plot_trisurf with viridis colormap
β
Performance Characteristicsο
Computational Complexityο
Method |
Complexity |
Primary Operations |
|---|---|---|
|
O(nΒ³) |
Jacobian + determinant |
|
O(nΒ³) |
Jacobian + SVD |
|
O(nΒ³ + m) |
2ΓSVD + sphere generation |
|
O(kΓnΒ²) |
kΓforward_kinematics + convex_hull |
Memory Requirementsο
CUDA kernel memory allocation:
joint_samples: num_samples Γ num_joints Γ float32
rng_states: num_samples Γ state_size
device_joint_limits: num_joints Γ 2 Γ float32
Thread Configurationο
CUDA kernel execution parameters:
threads_per_block: 256 (fixed)
blocks_per_grid: ceil(num_samples / 256)
total_threads: blocks_per_grid Γ threads_per_block
β
Data Flow Architectureο
Singularity Analysis Pipelineο
Input: Joint angles (numpy.ndarray)
Jacobian Computation: SerialManipulator.jacobian()
Analysis: Determinant or condition number calculation
Output: Boolean or float result
Manipulability Ellipsoid Pipelineο
Input: Joint angles + optional axis
Jacobian Decomposition: Split into linear/angular components
SVD Analysis: Compute singular values and vectors
Ellipsoid Generation: Transform unit sphere using SVD results
Visualization: Matplotlib 3D surface plotting
Workspace Analysis Pipelineο
CUDA Setup: Initialize device memory and random states
Parallel Sampling: Generate random joint configurations
Host Transfer: Copy samples from GPU to CPU
Forward Kinematics: Batch computation of end-effector positions
Convex Hull: Geometric analysis of workspace boundary
Visualization: 3D triangulated surface rendering
β
Error Handling and Validationο
Input Validationο
Joint angles: Verified as numpy arrays with correct dimensions
Joint limits: Validated as list of tuples with numeric values
Thresholds: Checked for positive numeric values
Numerical Stabilityο
Singular matrices: Handled gracefully in condition number computation
Zero determinants: Managed with absolute value thresholding
Ill-conditioned systems: SVD provides robust decomposition
CUDA Error Managementο
Memory allocation: Automatic cleanup on kernel completion
Thread synchronization: Implicit synchronization after kernel launch
Device compatibility: Runtime detection of CUDA availability
β
See Alsoο
Kinematics API Reference β SerialManipulator class for Jacobian computation
Utils Module β Mathematical utilities and matrix operations
Path Planning API Reference β Trajectory planning with singularity considerations
Control API Reference β Control algorithms affected by singularities