# Systems Perspective Description Language — Robotics & Kinematics (SPDL-ROBO) **Specification Document ID:** `SPDL-ROBO-SPEC-2026-v4.2` **Classification:** Open Epistemic Standard / Hard Real-Time Robotic Substrate **Principal Architect:** Asse van Nix | Systems Perspective Framework & Proof-Driven Architecture Group **Target Environment:** Zig 0.16.0 Freestanding Bare-Metal · EtherCAT Motion Master · ROS 2 Replacement **Applied Standards:** ISO/IEC 14977 EBNF · GBNF Maskable · ISO 10218-1/2 (Industrial Robot Safety) · ISO/TS 15066 (Collaborative Robots) · IEEE 1873 --- ## 1. Epistemic Architecture: Why ROS 2 (DDS) and PLCopen Motion Must Be Replaced Current robotic stacks rely on **ROS 2 (built on OMG DDS)** and **PLCopen Motion Control (IEC 61131-7)**: 1. **The DDS Configuration Labyrinth:** ROS 2 relies on DDS implementations containing dozens of interacting, unprovable Quality of Service (QoS) parameters (History, Reliability, Durability, Liveliness). Misconfigured QoS causes silent packet dropping and unbounded heap queuing under high-frequency LiDAR and motor feedback streams. 2. **Decoupled Kinematic Safety:** PLCopen Function Blocks (`MC_MoveAbsolute`, `MC_CamIn`) sequence joint positions, but delegate collision avoidance and kinematic singular-point evasion to user application code. Joint jerk and acceleration limits are frequently violated during manual jogging or estop resets. **SPDL-ROBO** enforces forward invariance in joint configuration space $\mathcal{Q} \subset \mathbb{R}^n$ via native Control Barrier Functions. --- ## 2. Physical Invariants, DAEs & Mathematical Proof Gates ``` SPDL-ROBO DYNAMIC MANIFOLD ┌─────────────────────────────────────────────────────────────────────────────┐ │ RIGID MULTIBODY MANIPULATOR EQUATION (Euler-Lagrange Form) │ │ M(q)*q_ddot + C(q, q_dot)*q_dot + g(q) = tau - J(q)^T * F_ext │ ├─────────────────────────────────────────────────────────────────────────────┤ │ KINEMATIC SINGULARITY BARRIER (Yoshikawa Manipulability Measure) │ │ w(q) = sqrt(det(J(q) * J(q)^T)) >= w_min > 0 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ ISO/TS 15066 COLLABORATIVE SPEED & SEPARATION BARRIER (SE(3) Metric) │ │ h_collab(p_robot, p_human) = ||p_robot - p_human||_2 - (v_r * t_r + B) >= 0│ └─────────────────────────────────────────────────────────────────────────────┘ ``` --- ## 3. Formal ISO/IEC 14977 EBNF Grammar ```ebnf RoboManifest = { Line } ; Line = [ Whitespace ] , ( Comment | RoboRecord ) , Newline ; Whitespace = { " " | "\t" | "\r" } ; Newline = "\n" | "\r\n" ; Comment = "#" , { AnyChar - Newline } ; RoboRecord = "(I) @ROBO_INVARIANT" , " " , InvariantFields | "(M) @KINEMATIC_CHAIN" , " " , ChainFields | "(B) @COLLISION_BARRIER" , " " , CollisionFields | "(B) @SINGULAR_BARRIER" , " " , SingularFields | "(M) @JOINT_TRAJECTORY" , " " , TrajectoryFields | "(L) @LYAPUNOV_TRACK" , " " , LyapunovFields | "(T) @JOINT_OBSERVER" , " " , ObserverFields ; InvariantFields = "id:" , Token , " dof:" , Integer , " bus:" , BusType , " cycle_us:" , Integer , " alloc_policy:ZERO_HEAP" ; BusType = "ETHERCAT" | "CANOPEN" | "PROFINET_IRT" | "DIRECT_SPI" ; ChainFields = "id:" , Token , " base_frame:[" , Coord6D , "]" , " tool_flange:[" , Coord6D , "]" ; CollisionFields = "id:" , Token , " zone:[" , CoordBox , "] min_clearance_mm:" , Number , " human_track:TRUE" ; SingularFields = "id:" , Token , " min_manipulability_w:" , Number ; TrajectoryFields = "id:" , Token , " target_q:[" , VectorN , "]" , " max_qdot:[" , VectorN , "]" , " blend_radius_mm:" , Number ; LyapunovFields = "id:" , Token , " candidate_v:" , QuotedStr , " alpha:" , Number ; ObserverFields = "id:" , Token , " actual_q:[" , VectorN , "]" , " torque_nm:[" , VectorN , "]" , " tool_force_n:" , Number ; Coord6D = Number , " " , Number , " " , Number , " " , Number , " " , Number , " " , Number ; CoordBox = Number , " " , Number , " " , Number , " " , Number , " " , Number , " " , Number ; VectorN = Number , { " " , Number } ; QuotedStr = '"' , { AnyChar - ( '"' | Newline ) } , '"' ; Token = Letter , { Letter | Digit | "_" | "-" } ; Number = [ "-" ] , Digit , { Digit } , [ "." , { Digit } ] ; Integer = [ "-" ] , Digit , { Digit } ; Letter = "A".."Z" | "a".."z" ; Digit = "0".."9" ; AnyChar = ? Any valid Unicode code point ? ; ``` --- ## 4. GBNF Structured Sampling Grammar ```gbnf root ::= RoboRecord "\n" RoboRecord ::= "(I) @ROBO_INVARIANT" " " InvariantFields | "(M) @KINEMATIC_CHAIN" " " ChainFields | "(B) @COLLISION_BARRIER" " " CollisionFields | "(B) @SINGULAR_BARRIER" " " SingularFields | "(M) @JOINT_TRAJECTORY" " " TrajectoryFields | "(L) @LYAPUNOV_TRACK" " " LyapunovFields | "(T) @JOINT_OBSERVER" " " ObserverFields InvariantFields ::= "id:" [A-Za-z0-9_-]+ " dof:" [0-9]+ " bus:" ("ETHERCAT"|"CANOPEN"|"PROFINET_IRT"|"DIRECT_SPI") " cycle_us:" [0-9]+ " alloc_policy:ZERO_HEAP" ChainFields ::= "id:" [A-Za-z0-9_-]+ " base_frame:[" [0-9. -]+ "] tool_flange:[" [0-9. -]+ "]" CollisionFields ::= "id:" [A-Za-z0-9_-]+ " zone:[" [0-9. -]+ "] min_clearance_mm:" [0-9.]+ " human_track:TRUE" SingularFields ::= "id:" [A-Za-z0-9_-]+ " min_manipulability_w:" [0-9.]+ TrajectoryFields::= "id:" [A-Za-z0-9_-]+ " target_q:[" [0-9. -]+ "] max_qdot:[" [0-9. -]+ "] blend_radius_mm:" [0-9.]+ LyapunovFields ::= "id:" [A-Za-z0-9_-]+ " candidate_v:\"" [^"\n]* "\"" " alpha:" [0-9.]+ ObserverFields ::= "id:" [A-Za-z0-9_-]+ " actual_q:[" [0-9. -]+ "] torque_nm:[" [0-9. -]+ "] tool_force_n:" [0-9.]+ ``` --- ## 5. Production SPDL-ROBO Manifest Exemplar ```spdl # ============================================================================== # SPDL-ROBO v4.2 MANIFEST: 6-DOF INDUSTRIAL COLLABORATIVE ASSEMBLY ROBOT # Standard: ISO/TS 15066 | Controller: Zero-Heap EtherCAT Master (1000 Hz) # ============================================================================== (I) @ROBO_INVARIANT id:INV-UR-ROBOT dof:6 bus:ETHERCAT cycle_us:1000 alloc_policy:ZERO_HEAP # --- KINEMATIC GEOMETRY --- (M) @KINEMATIC_CHAIN id:ROBOT_ARM_6AX base_frame:[0.0 0.0 0.0 0.0 0.0 0.0] tool_flange:[0.0 0.0 145.0 0.0 0.0 0.0] # --- SAFETY BARRIER GATES --- (B) @COLLISION_BARRIER id:BAR_OPERATOR_SAFETY zone:[400.0 1200.0 -300.0 300.0 0.0 1800.0] min_clearance_mm:150.0 human_track:TRUE (B) @SINGULAR_BARRIER id:BAR_WRIST_SINGULAR min_manipulability_w:0.045 (L) @LYAPUNOV_TRACK id:LYA_CONVERGENCE candidate_v:"0.5*e^T*M*e" alpha:12.0 # --- CONTROL DIRECTIVES --- (M) @JOINT_TRAJECTORY id:TRAJ_PICK_FAST target_q:[0.0 -45.0 90.0 -45.0 90.0 0.0] max_qdot:[180.0 180.0 180.0 360.0 360.0 360.0] blend_radius_mm:25.0 # --- REAL-TIME JOINT OBSERVERS --- (T) @JOINT_OBSERVER id:TEL_ARM_FEEDBACK actual_q:[0.02 -44.98 90.01 -45.01 89.98 0.0] torque_nm:[1.2 45.2 24.1 6.8 4.2 0.8] tool_force_n:12.4 ``` --- ## 6. Standards Compliance Matrix ``` ╔═════════════════════════════════╦══════════════════════╦═════════════════════════════════════════════════════╗ ║ Dimension │ Verification Standard│ Enforced Implementation Evidence ║ ╠═════════════════════════════════╬══════════════════════╬═════════════════════════════════════════════════════╣ ║ Collaborative Safety │ ISO/TS 15066 │ Active SE(3) distance barrier to operator volume. ║ ║ Kinematic Singularity Avoidance │ Yoshikawa Metric │ det(J*J^T) >= 0.045 barrier prevents joint runaway. ║ ║ Hard Real-Time Execution │ EtherCAT / POSIX RT │ Zero-heap parsing (<128B stack) in 1ms cycle. ║ ║ Trajectory Stability │ Lyapunov Stability │ dV/dt <= -12.0 * V exponential tracking verified. ║ ╚═════════════════════════════════╩══════════════════════╩═════════════════════════════════════════════════════╝ ```