|
3 | 3 | This module provides industry-standard baselines used during robot model |
4 | 4 | definition and validation. Constants are categorized into: |
5 | 5 |
|
6 | | -- **Physics Defaults**: Standard friction, stiffness, and damping coefficients. |
7 | | -- **Namespaces**: Official URIs and prefixes for XML/XACRO processing. |
8 | | -- **Numerical Stability**: Guardrails (mass, inertia, epsilon) for simulation. |
9 | | -- **Validation**: Thresholds for mesh topology and file size. |
| 6 | +1. **Infrastructure**: XML/XACRO namespaces and structural prefixes. |
| 7 | +2. **Numerical Stability**: Fundamental precision and solver guardrails. |
| 8 | +3. **Validation**: Physical and geometric sanity thresholds. |
| 9 | +4. **Physics & Dynamics**: Global simulation and component behaviors. |
| 10 | +5. **Component Defaults**: Standard baselines for Links, Joints, and Sensors. |
10 | 11 | """ |
11 | 12 |
|
12 | 13 | from __future__ import annotations |
13 | 14 |
|
14 | | -# Physics Defaults (Simulation) |
15 | | -# ---------------------------- |
16 | | - |
17 | | -# Default static friction coefficient (Coulomb) |
18 | | -DEFAULT_FRICTION_MU = 1.0 |
19 | | - |
20 | | -# Default dynamic friction coefficient (Coulomb) |
21 | | -DEFAULT_FRICTION_MU2 = 1.0 |
22 | | - |
23 | | -# Default contact stiffness (N/m) |
24 | | -# 1e12 is the industry standard for 'hard' contact in Gazebo/GZ |
25 | | -DEFAULT_CONTACT_KP = 1e12 |
26 | | - |
27 | | -# Default contact damping (N s/m) |
28 | | -DEFAULT_CONTACT_KD = 1.0 |
29 | | - |
30 | | -# Default gravity inclusion |
31 | | -DEFAULT_GRAVITY = True |
32 | | - |
33 | | -# Default self-collision inclusion |
34 | | -DEFAULT_SELF_COLLIDE = False |
35 | | - |
36 | | -# Default Joint Axis (Z-axis is standard for many robotics defaults) |
37 | | -DEFAULT_AXIS_XYZ = (0.0, 0.0, 1.0) |
38 | | -DEFAULT_AXIS_XYZ_STR = "0 0 1" |
39 | | - |
40 | | - |
41 | | -# XML and XACRO Namespaces |
| 15 | +# 1. XML and XACRO Infrastructure |
42 | 16 | # ---------------------------- |
43 | 17 |
|
44 | 18 | # Official XACRO namespace URIs |
|
52 | 26 | XACRO_PREFIX = "xacro:" |
53 | 27 |
|
54 | 28 |
|
55 | | -# Validation Limits (Sanity Checks) |
| 29 | +# 2. Numerical Stability (Foundation) |
| 30 | +# ---------------------------- |
| 31 | + |
| 32 | +# General small value for floating point comparisons |
| 33 | +EPSILON = 1e-9 |
| 34 | + |
| 35 | +# Stability epsilon for Sylvester's criterion and inertia checks |
| 36 | +SYLVESTER_TOLERANCE_EPSILON = 1e-9 |
| 37 | + |
| 38 | +# Minimum mass in kg to prevent singular matrices in dynamics solvers |
| 39 | +MIN_REASONABLE_MASS = 1e-6 |
| 40 | + |
| 41 | +# Minimum inertia diagonal value to prevent zero-inertia crashes |
| 42 | +MIN_REASONABLE_INERTIA = 1e-9 |
| 43 | + |
| 44 | +# Thresholds for inertia calculation fallback and stability |
| 45 | +MIN_MASS_STABILITY_THRESHOLD = 0.01 # kg |
| 46 | +MIN_INERTIA_STABILITY_VALUE = 1e-6 # kg·m² |
| 47 | + |
| 48 | + |
| 49 | +# 3. Validation Limits (Guardrails) |
56 | 50 | # ---------------------------- |
57 | 51 |
|
58 | 52 | # Maximum absolute value allowed for floats in robot models |
|
68 | 62 | # Maximum depth for XML tree parsing to prevent Billion Laughs / recursion issues |
69 | 63 | MAX_XML_DEPTH = 2000 |
70 | 64 |
|
71 | | - |
72 | | -# Numerical Stability (Guardrails) |
73 | | -# ---------------------------- |
74 | | - |
75 | | -# Small value for floating point comparisons |
76 | | -EPSILON = 1e-9 |
77 | | - |
78 | | -# Minimum mass in kg to prevent singular matrices in dynamics solvers |
79 | | -MIN_REASONABLE_MASS = 1e-6 |
80 | | - |
81 | | -# Minimum inertia diagonal value to prevent zero-inertia crashes |
82 | | -MIN_REASONABLE_INERTIA = 1e-9 |
83 | | - |
84 | | -# Thresholds for inertia calculation fallback and stability |
85 | | -MIN_MASS_STABILITY_THRESHOLD = 0.01 # kg |
86 | | -MIN_INERTIA_STABILITY_VALUE = 1e-6 # kg·m² |
87 | | - |
88 | | -# Geometric thresholds |
| 65 | +# Geometric and Mesh thresholds |
89 | 66 | DEGENERATE_VOL_THRESHOLD = 1e-12 # m³ |
90 | 67 | NEGATIVE_INERTIA_THRESHOLD = -1e-06 |
91 | | -SYLVESTER_TOLERANCE_EPSILON = 1e-9 |
92 | | - |
93 | | -# Mesh Validation Thresholds |
94 | 68 | MESH_PROXIMITY_THRESHOLD = 6 |
95 | 69 | MESH_SLIVER_THRESHOLD = 1000.0 |
96 | 70 | MIN_MESH_AREA = 1e-15 |
97 | 71 |
|
98 | 72 |
|
99 | | -# Joint Dynamics Defaults |
| 73 | +# 4. Global Physics Defaults |
100 | 74 | # ---------------------------- |
101 | 75 |
|
102 | | -# Default joint damping (N s / m or N m s / rad) |
103 | | -DEFAULT_JOINT_DAMPING = 0.0 |
| 76 | +# Default static/dynamic friction coefficient (Coulomb) |
| 77 | +DEFAULT_FRICTION_MU = 1.0 |
| 78 | +DEFAULT_FRICTION_MU2 = 1.0 |
104 | 79 |
|
105 | | -# Default joint friction (N or N m) |
106 | | -DEFAULT_JOINT_FRICTION = 0.0 |
| 80 | +# Default contact stiffness (N/m) and damping (N s/m) |
| 81 | +# 1e12 is the industry standard for 'hard' contact in Gazebo/GZ |
| 82 | +DEFAULT_CONTACT_KP = 1e12 |
| 83 | +DEFAULT_CONTACT_KD = 1.0 |
| 84 | + |
| 85 | +# Simulation toggles |
| 86 | +DEFAULT_GRAVITY = True |
| 87 | +DEFAULT_SELF_COLLIDE = False |
107 | 88 |
|
108 | | -# Visualization Defaults (Core) |
| 89 | + |
| 90 | +# 5. Component Defaults |
109 | 91 | # ---------------------------- |
110 | | -DEFAULT_COLOR_RGBA_STR = "0.7 0.7 0.7 1.0" |
| 92 | + |
| 93 | +# --- Link Defaults --- |
| 94 | +DEFAULT_LINK_MASS = 1.0 |
| 95 | +DEFAULT_MATERIAL_RGBA = (0.7, 0.7, 0.7, 1.0) |
| 96 | +DEFAULT_MATERIAL_RGBA_STR = "0.7 0.7 0.7 1.0" |
111 | 97 | DEFAULT_MESH_SCALE_STR = "1 1 1" |
112 | 98 | DEFAULT_GEOMETRY_RADIUS = 0.1 |
113 | 99 | DEFAULT_GEOMETRY_LENGTH = 0.5 |
| 100 | + |
| 101 | +# --- Joint Defaults --- |
| 102 | +# Default axis (Z-axis is standard for many robotics defaults) |
| 103 | +DEFAULT_AXIS_XYZ = (0.0, 0.0, 1.0) |
| 104 | +DEFAULT_AXIS_XYZ_STR = "0 0 1" |
| 105 | + |
| 106 | +# Joint Dynamics |
| 107 | +DEFAULT_JOINT_DAMPING = 0.0 |
| 108 | +DEFAULT_JOINT_FRICTION = 0.0 |
| 109 | +DEFAULT_JOINT_EFFORT = 10.0 |
| 110 | +DEFAULT_JOINT_VELOCITY = 1.0 |
| 111 | + |
| 112 | +# --- Sensor Defaults --- |
| 113 | +# Common |
| 114 | +DEFAULT_UPDATE_RATE = 30.0 |
| 115 | +DEFAULT_SENSOR_TYPE = "CAMERA" |
| 116 | +DEFAULT_SENSOR_ALWAYS_ON = True |
| 117 | +DEFAULT_SENSOR_VISUALIZE = False |
| 118 | + |
| 119 | +# Camera |
| 120 | +DEFAULT_CAMERA_FOV = 1.047 # Radians (~60 degrees) |
| 121 | +DEFAULT_CAMERA_WIDTH = 640 |
| 122 | +DEFAULT_CAMERA_HEIGHT = 480 |
| 123 | +DEFAULT_CAMERA_FORMAT = "R8G8B8" |
| 124 | +DEFAULT_CAMERA_NEAR = 0.1 |
| 125 | +DEFAULT_CAMERA_FAR = 100.0 |
| 126 | + |
| 127 | +# LIDAR Horizontal Parameters |
| 128 | +DEFAULT_LIDAR_SAMPLES = 640 |
| 129 | +DEFAULT_LIDAR_RANGE_MIN = 0.1 |
| 130 | +DEFAULT_LIDAR_RANGE_MAX = 10.0 |
| 131 | +DEFAULT_LIDAR_RANGE_RESOLUTION = 0.01 |
| 132 | +DEFAULT_LIDAR_MIN_ANGLE = -1.570796 # -90 degrees |
| 133 | +DEFAULT_LIDAR_MAX_ANGLE = 1.570796 # +90 degrees |
| 134 | + |
| 135 | +# LIDAR Vertical Parameters |
| 136 | +DEFAULT_LIDAR_VERTICAL_SAMPLES = 1 |
| 137 | +DEFAULT_LIDAR_VERTICAL_MIN_ANGLE = 0.0 |
| 138 | +DEFAULT_LIDAR_VERTICAL_MAX_ANGLE = 0.0 |
0 commit comments