235 lines
14 KiB
XML
235 lines
14 KiB
XML
|
|
<svg width="1000" height="600" xmlns="http://www.w3.org/2000/svg">
|
||
|
|
<defs>
|
||
|
|
<linearGradient id="primaryGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
|
|
<stop offset="0%" style="stop-color:#6366F1;stop-opacity:1" />
|
||
|
|
<stop offset="100%" style="stop-color:#8B5CF6;stop-opacity:1" />
|
||
|
|
</linearGradient>
|
||
|
|
|
||
|
|
<linearGradient id="cyanGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
|
|
<stop offset="0%" style="stop-color:#06B6D4;stop-opacity:1" />
|
||
|
|
<stop offset="100%" style="stop-color:#0EA5E9;stop-opacity:1" />
|
||
|
|
</linearGradient>
|
||
|
|
|
||
|
|
<linearGradient id="greenGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
|
|
<stop offset="0%" style="stop-color:#10B981;stop-opacity:1" />
|
||
|
|
<stop offset="100%" style="stop-color:#34D399;stop-opacity:1" />
|
||
|
|
</linearGradient>
|
||
|
|
|
||
|
|
<linearGradient id="orangeGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
|
|
<stop offset="0%" style="stop-color:#F59E0B;stop-opacity:1" />
|
||
|
|
<stop offset="100%" style="stop-color:#FBBF24;stop-opacity:1" />
|
||
|
|
</linearGradient>
|
||
|
|
|
||
|
|
<linearGradient id="pinkGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||
|
|
<stop offset="0%" style="stop-color:#EC4899;stop-opacity:1" />
|
||
|
|
<stop offset="100%" style="stop-color:#F472B6;stop-opacity:1" />
|
||
|
|
</linearGradient>
|
||
|
|
|
||
|
|
<filter id="cardShadow" x="-10%" y="-10%" width="120%" height="130%">
|
||
|
|
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#6366F1" flood-opacity="0.15"/>
|
||
|
|
</filter>
|
||
|
|
|
||
|
|
<marker id="arrowPurple" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
|
||
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#8B5CF6"/>
|
||
|
|
</marker>
|
||
|
|
|
||
|
|
<marker id="arrowCyan" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
|
||
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#06B6D4"/>
|
||
|
|
</marker>
|
||
|
|
|
||
|
|
<marker id="arrowGreen" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
|
||
|
|
<path d="M0,0 L0,6 L9,3 z" fill="#10B981"/>
|
||
|
|
</marker>
|
||
|
|
|
||
|
|
<pattern id="dots" patternUnits="userSpaceOnUse" width="20" height="20">
|
||
|
|
<circle cx="10" cy="10" r="1" fill="#6366F1" opacity="0.08"/>
|
||
|
|
</pattern>
|
||
|
|
</defs>
|
||
|
|
|
||
|
|
<style>
|
||
|
|
.title-text { fill: #1E1B4B; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
||
|
|
.main-text { fill: #334155; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
||
|
|
.secondary-text { fill: #64748B; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
||
|
|
.white-text { fill: #FFFFFF; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; }
|
||
|
|
.mono-text { fill: #475569; font-family: 'SF Mono', 'Fira Code', Consolas, monospace; }
|
||
|
|
|
||
|
|
@media (prefers-color-scheme: dark) {
|
||
|
|
.title-text { fill: #F1F5F9; }
|
||
|
|
.main-text { fill: #E2E8F0; }
|
||
|
|
.secondary-text { fill: #94A3B8; }
|
||
|
|
.mono-text { fill: #CBD5E1; }
|
||
|
|
}
|
||
|
|
</style>
|
||
|
|
|
||
|
|
<!-- Background -->
|
||
|
|
<rect width="1000" height="600" fill="#FAFBFC"/>
|
||
|
|
<rect width="1000" height="600" fill="url(#dots)"/>
|
||
|
|
|
||
|
|
<!-- Title -->
|
||
|
|
<text x="500" y="35" text-anchor="middle" font-size="22" font-weight="600" class="title-text">Humanoid Robot Architecture</text>
|
||
|
|
<text x="500" y="57" text-anchor="middle" font-size="12" class="secondary-text">General Bots + Computer Vision + LLM + Movement Control</text>
|
||
|
|
|
||
|
|
<!-- Main Container -->
|
||
|
|
<rect x="25" y="75" width="950" height="500" rx="12" fill="#FFFFFF" stroke="#E2E8F0" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
|
||
|
|
<!-- Left Column: Sensors -->
|
||
|
|
<g transform="translate(50, 100)">
|
||
|
|
<text x="80" y="0" text-anchor="middle" font-size="12" font-weight="600" class="secondary-text">SENSORS</text>
|
||
|
|
|
||
|
|
<!-- Camera -->
|
||
|
|
<rect x="0" y="15" width="160" height="70" rx="8" fill="#FFFFFF" stroke="#06B6D4" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="15" width="160" height="25" rx="8" fill="url(#cyanGrad)"/>
|
||
|
|
<rect x="0" y="35" width="160" height="5" fill="url(#cyanGrad)"/>
|
||
|
|
<text x="80" y="33" text-anchor="middle" font-size="10" font-weight="600" class="white-text">📷 Camera</text>
|
||
|
|
<text x="80" y="58" text-anchor="middle" font-size="9" class="main-text">RGB + Depth</text>
|
||
|
|
<text x="80" y="73" text-anchor="middle" font-size="8" class="mono-text">USB / CSI</text>
|
||
|
|
|
||
|
|
<!-- Microphone -->
|
||
|
|
<rect x="0" y="100" width="160" height="70" rx="8" fill="#FFFFFF" stroke="#06B6D4" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="100" width="160" height="25" rx="8" fill="url(#cyanGrad)"/>
|
||
|
|
<rect x="0" y="120" width="160" height="5" fill="url(#cyanGrad)"/>
|
||
|
|
<text x="80" y="118" text-anchor="middle" font-size="10" font-weight="600" class="white-text">🎤 Microphone</text>
|
||
|
|
<text x="80" y="143" text-anchor="middle" font-size="9" class="main-text">Voice Input</text>
|
||
|
|
<text x="80" y="158" text-anchor="middle" font-size="8" class="mono-text">USB / I2S</text>
|
||
|
|
|
||
|
|
<!-- IMU -->
|
||
|
|
<rect x="0" y="185" width="160" height="70" rx="8" fill="#FFFFFF" stroke="#06B6D4" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="185" width="160" height="25" rx="8" fill="url(#cyanGrad)"/>
|
||
|
|
<rect x="0" y="205" width="160" height="5" fill="url(#cyanGrad)"/>
|
||
|
|
<text x="80" y="203" text-anchor="middle" font-size="10" font-weight="600" class="white-text">⚖️ IMU</text>
|
||
|
|
<text x="80" y="228" text-anchor="middle" font-size="9" class="main-text">Balance + Orientation</text>
|
||
|
|
<text x="80" y="243" text-anchor="middle" font-size="8" class="mono-text">I2C</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Center Column: Processing -->
|
||
|
|
<g transform="translate(280, 100)">
|
||
|
|
<text x="200" y="0" text-anchor="middle" font-size="12" font-weight="600" class="secondary-text">PROCESSING</text>
|
||
|
|
|
||
|
|
<!-- botmodels (CV) -->
|
||
|
|
<rect x="0" y="15" width="180" height="90" rx="10" fill="#FFFFFF" stroke="#EC4899" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="15" width="180" height="30" rx="10" fill="url(#pinkGrad)"/>
|
||
|
|
<rect x="0" y="40" width="180" height="5" fill="url(#pinkGrad)"/>
|
||
|
|
<text x="90" y="36" text-anchor="middle" font-size="11" font-weight="600" class="white-text">botmodels</text>
|
||
|
|
<text x="90" y="65" text-anchor="middle" font-size="10" class="main-text">Computer Vision</text>
|
||
|
|
<text x="90" y="82" text-anchor="middle" font-size="9" class="secondary-text">Face • Object • Gesture</text>
|
||
|
|
<text x="90" y="97" text-anchor="middle" font-size="8" class="mono-text">ONNX / Python</text>
|
||
|
|
|
||
|
|
<!-- botserver (Brain) -->
|
||
|
|
<rect x="0" y="120" width="180" height="110" rx="10" fill="#FFFFFF" stroke="#8B5CF6" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="120" width="180" height="30" rx="10" fill="url(#primaryGrad)"/>
|
||
|
|
<rect x="0" y="145" width="180" height="5" fill="url(#primaryGrad)"/>
|
||
|
|
<text x="90" y="141" text-anchor="middle" font-size="11" font-weight="600" class="white-text">botserver</text>
|
||
|
|
<text x="90" y="168" text-anchor="middle" font-size="10" class="main-text">Brain / LLM</text>
|
||
|
|
<text x="90" y="185" text-anchor="middle" font-size="9" class="secondary-text">Conversation • Decisions</text>
|
||
|
|
<text x="90" y="202" text-anchor="middle" font-size="9" class="secondary-text">Knowledge • Memory</text>
|
||
|
|
<text x="90" y="220" text-anchor="middle" font-size="8" class="mono-text">Rust / Port 8088</text>
|
||
|
|
|
||
|
|
<!-- BASIC Runtime -->
|
||
|
|
<rect x="0" y="245" width="180" height="90" rx="10" fill="#FFFFFF" stroke="#F59E0B" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="245" width="180" height="30" rx="10" fill="url(#orangeGrad)"/>
|
||
|
|
<rect x="0" y="270" width="180" height="5" fill="url(#orangeGrad)"/>
|
||
|
|
<text x="90" y="266" text-anchor="middle" font-size="11" font-weight="600" class="white-text">BASIC Runtime</text>
|
||
|
|
<text x="90" y="295" text-anchor="middle" font-size="10" class="main-text">Movement Control</text>
|
||
|
|
<text x="90" y="312" text-anchor="middle" font-size="9" class="secondary-text">SERVO • ROBOT • SEQUENCE</text>
|
||
|
|
<text x="90" y="327" text-anchor="middle" font-size="8" class="mono-text">Keywords → Commands</text>
|
||
|
|
|
||
|
|
<!-- Hardware Bridge -->
|
||
|
|
<rect x="200" y="120" width="180" height="90" rx="10" fill="#FFFFFF" stroke="#64748B" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="200" y="120" width="180" height="30" rx="10" fill="#64748B"/>
|
||
|
|
<rect x="200" y="145" width="180" height="5" fill="#64748B"/>
|
||
|
|
<text x="290" y="141" text-anchor="middle" font-size="11" font-weight="600" class="white-text">Hardware Bridge</text>
|
||
|
|
<text x="290" y="168" text-anchor="middle" font-size="10" class="main-text">Protocol Translation</text>
|
||
|
|
<text x="290" y="185" text-anchor="middle" font-size="9" class="secondary-text">GPIO • Serial • CAN</text>
|
||
|
|
<text x="290" y="200" text-anchor="middle" font-size="8" class="mono-text">PCA9685 / Dynamixel</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Right Column: Actuators -->
|
||
|
|
<g transform="translate(720, 100)">
|
||
|
|
<text x="110" y="0" text-anchor="middle" font-size="12" font-weight="600" class="secondary-text">ACTUATORS</text>
|
||
|
|
|
||
|
|
<!-- Servos -->
|
||
|
|
<rect x="0" y="15" width="220" height="90" rx="8" fill="#FFFFFF" stroke="#10B981" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="15" width="220" height="25" rx="8" fill="url(#greenGrad)"/>
|
||
|
|
<rect x="0" y="35" width="220" height="5" fill="url(#greenGrad)"/>
|
||
|
|
<text x="110" y="33" text-anchor="middle" font-size="10" font-weight="600" class="white-text">⚙️ Servos / Motors</text>
|
||
|
|
<text x="110" y="58" text-anchor="middle" font-size="9" class="main-text">Joint Movement</text>
|
||
|
|
<text x="110" y="73" text-anchor="middle" font-size="8" class="secondary-text">Head • Arms • Legs • Grippers</text>
|
||
|
|
<text x="110" y="90" text-anchor="middle" font-size="8" class="mono-text">PWM / TTL / RS485</text>
|
||
|
|
|
||
|
|
<!-- Speaker -->
|
||
|
|
<rect x="0" y="120" width="220" height="70" rx="8" fill="#FFFFFF" stroke="#10B981" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="120" width="220" height="25" rx="8" fill="url(#greenGrad)"/>
|
||
|
|
<rect x="0" y="140" width="220" height="5" fill="url(#greenGrad)"/>
|
||
|
|
<text x="110" y="138" text-anchor="middle" font-size="10" font-weight="600" class="white-text">🔊 Speaker</text>
|
||
|
|
<text x="110" y="163" text-anchor="middle" font-size="9" class="main-text">Voice Output (TTS)</text>
|
||
|
|
<text x="110" y="178" text-anchor="middle" font-size="8" class="mono-text">USB / Audio Jack</text>
|
||
|
|
|
||
|
|
<!-- Display -->
|
||
|
|
<rect x="0" y="205" width="220" height="70" rx="8" fill="#FFFFFF" stroke="#10B981" stroke-width="2" filter="url(#cardShadow)"/>
|
||
|
|
<rect x="0" y="205" width="220" height="25" rx="8" fill="url(#greenGrad)"/>
|
||
|
|
<rect x="0" y="225" width="220" height="5" fill="url(#greenGrad)"/>
|
||
|
|
<text x="110" y="223" text-anchor="middle" font-size="10" font-weight="600" class="white-text">🖥️ Display</text>
|
||
|
|
<text x="110" y="248" text-anchor="middle" font-size="9" class="main-text">Face / Status / Emotions</text>
|
||
|
|
<text x="110" y="263" text-anchor="middle" font-size="8" class="mono-text">HDMI / LCD / OLED</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<!-- Arrows: Sensors → Processing -->
|
||
|
|
<path d="M215 145 L275 85" stroke="#06B6D4" stroke-width="2" fill="none" marker-end="url(#arrowCyan)"/>
|
||
|
|
<path d="M215 230 L275 175" stroke="#06B6D4" stroke-width="2" fill="none" marker-end="url(#arrowCyan)"/>
|
||
|
|
<path d="M215 315 L275 290" stroke="#06B6D4" stroke-width="2" fill="none" marker-end="url(#arrowCyan)"/>
|
||
|
|
|
||
|
|
<!-- Arrows: Between Processing -->
|
||
|
|
<path d="M370 200 L370 235" stroke="#8B5CF6" stroke-width="2" fill="none" marker-end="url(#arrowPurple)"/>
|
||
|
|
<path d="M465 265 L475 215" stroke="#8B5CF6" stroke-width="2" fill="none" marker-end="url(#arrowPurple)"/>
|
||
|
|
|
||
|
|
<!-- Arrows: Processing → Actuators -->
|
||
|
|
<path d="M660 210 L715 145" stroke="#10B981" stroke-width="2" fill="none" marker-end="url(#arrowGreen)"/>
|
||
|
|
<path d="M660 210 L715 220" stroke="#10B981" stroke-width="2" fill="none" marker-end="url(#arrowGreen)"/>
|
||
|
|
<path d="M660 210 L715 290" stroke="#10B981" stroke-width="2" fill="none" marker-end="url(#arrowGreen)"/>
|
||
|
|
|
||
|
|
<!-- Bottom: Flow Summary -->
|
||
|
|
<g transform="translate(50, 460)">
|
||
|
|
<rect x="0" y="0" width="900" height="95" rx="10" fill="#F8FAFC" stroke="#E2E8F0" stroke-width="1"/>
|
||
|
|
<text x="450" y="22" text-anchor="middle" font-size="11" font-weight="600" class="main-text">Data Flow</text>
|
||
|
|
|
||
|
|
<!-- Flow steps -->
|
||
|
|
<g transform="translate(30, 40)">
|
||
|
|
<rect x="0" y="0" width="140" height="40" rx="6" fill="#EFF6FF" stroke="#BFDBFE" stroke-width="1"/>
|
||
|
|
<text x="70" y="17" text-anchor="middle" font-size="9" font-weight="500" class="main-text">1. Voice / Vision</text>
|
||
|
|
<text x="70" y="32" text-anchor="middle" font-size="8" class="mono-text">Input sensors</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<text x="185" y="60" font-size="16" class="secondary-text">→</text>
|
||
|
|
|
||
|
|
<g transform="translate(200, 40)">
|
||
|
|
<rect x="0" y="0" width="140" height="40" rx="6" fill="#F5F3FF" stroke="#DDD6FE" stroke-width="1"/>
|
||
|
|
<text x="70" y="17" text-anchor="middle" font-size="9" font-weight="500" class="main-text">2. CV Analysis</text>
|
||
|
|
<text x="70" y="32" text-anchor="middle" font-size="8" class="mono-text">botmodels</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<text x="355" y="60" font-size="16" class="secondary-text">→</text>
|
||
|
|
|
||
|
|
<g transform="translate(370, 40)">
|
||
|
|
<rect x="0" y="0" width="140" height="40" rx="6" fill="#EEF2FF" stroke="#C7D2FE" stroke-width="1"/>
|
||
|
|
<text x="70" y="17" text-anchor="middle" font-size="9" font-weight="500" class="main-text">3. LLM Decision</text>
|
||
|
|
<text x="70" y="32" text-anchor="middle" font-size="8" class="mono-text">botserver</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<text x="525" y="60" font-size="16" class="secondary-text">→</text>
|
||
|
|
|
||
|
|
<g transform="translate(540, 40)">
|
||
|
|
<rect x="0" y="0" width="140" height="40" rx="6" fill="#FEF3C7" stroke="#FCD34D" stroke-width="1"/>
|
||
|
|
<text x="70" y="17" text-anchor="middle" font-size="9" font-weight="500" class="main-text">4. BASIC Script</text>
|
||
|
|
<text x="70" y="32" text-anchor="middle" font-size="8" class="mono-text">Movement cmds</text>
|
||
|
|
</g>
|
||
|
|
|
||
|
|
<text x="695" y="60" font-size="16" class="secondary-text">→</text>
|
||
|
|
|
||
|
|
<g transform="translate(710, 40)">
|
||
|
|
<rect x="0" y="0" width="140" height="40" rx="6" fill="#ECFDF5" stroke="#A7F3D0" stroke-width="1"/>
|
||
|
|
<text x="70" y="17" text-anchor="middle" font-size="9" font-weight="500" class="main-text">5. Physical Action</text>
|
||
|
|
<text x="70" y="32" text-anchor="middle" font-size="8" class="mono-text">Servos + Voice</text>
|
||
|
|
</g>
|
||
|
|
</g>
|
||
|
|
</svg>
|