Robotics Consumer{roomId ? ` - Room ${roomId}` : ''} - Workspace {workspaceId} - RobotHub TransportServer

🤖 Robotics Consumer

Workspace: {workspaceId} {#if roomId} | Room: {roomId} {:else} | Monitor robot arm state in real-time {/if}

{#if connected}
Connected {:else if connecting}
Connecting... {:else}
Disconnected {/if}
← Back to Robotics
ROBOTICS CONSUMER DEBUG - WORKSPACE {debugInfo.workspaceId}{roomId ? ` - ROOM ${roomId}` : ''}
Attempts: {debugInfo.connectionAttempts}
Messages: {debugInfo.messagesReceived}
Last: {debugInfo.lastMessageType || 'None'}
WS: {debugInfo.wsConnected ? 'ON' : 'OFF'}
Room: {debugInfo.currentRoom || 'None'}
Updates: {updateCount}
State Syncs: {stateSyncCount}
Errors: {errorCount}
Last Update: {lastUpdate ? lastUpdate.toLocaleTimeString() : 'Never'}
{#if error}
Error: {error}
{/if}
{#if !connected}

Connect to Robotics Room

{#if error}

{error}

{/if}
{:else}
{updateCount}
Joint Updates
{stateSyncCount}
State Syncs
{errorCount}
Errors
{lastUpdate ? lastUpdate.toLocaleTimeString() : 'N/A'}
Last Update

Robot Arm Visualization

🦾

3D Robot Visualization

Live joint positions from producer

{#if Object.keys(currentJoints).length > 0}
{#each Object.entries(currentJoints) as [name, value]}
{name.replace(/([A-Z])/g, ' $1').replace(/^./, (str) => str.toUpperCase())}
{value.toFixed(1)}°
{/each}
{/if}

Session Info

Workspace: {workspaceId}
Room: {roomId}
ID: {participantId}
Role: Consumer
Active Joints: {Object.keys(currentJoints).length}
{#if Object.keys(jointTrends).length > 0}

Joint Trends

{#each Object.entries(jointTrends) as [name, values]}
{name.replace(/([A-Z])/g, ' $1').replace(/^./, (str) => str.toUpperCase())} {values[values.length - 1]?.toFixed(1) || '0.0'}°
{#each values as value, i}
{/each}
{/each}
{/if}

Recent Joint Updates

{#each jointHistory.slice(0, 10) as update}
{update.timestamp} JOINT_UPDATE
{update.joints.length} joint(s): {update.joints.map(j => `${j.name}=${j.value.toFixed(1)}°`).join(', ')}
{:else}

No joint updates received yet

{/each}

State Sync History

{#each stateHistory as state}
{state.timestamp} STATE_SYNC
{Object.keys(state.state).length} joints synchronized
{:else}

No state syncs received yet

{/each}
{#if errorHistory.length > 0}

Recent Errors

{#each errorHistory as error}
{error.timestamp} ERROR
{error.message}
{/each}
{/if}
{/if}