<style> :root { --primary-color: #2563eb; --primary-dark: #1d4ed8; --background-color: #ffffff; --text-primary: #1e293b; --text-secondary: #475569; --card-background: #ffffff; --shadow-color: rgba(0, 0, 0, 0.1); } @media (prefers-color-scheme: dark) { :root { --primary-color: #3b82f6; --primary-dark: #2563eb; --background-color: #1e293b; --text-primary: #f8fafc; --text-secondary: #cbd5e1; --card-background: #334155; --shadow-color: rgba(0, 0, 0, 0.3); } } </style> <div style="max-width: 1000px; margin: 0 auto; font-family: 'Arial', sans-serif;"> <!-- Combined Header and Logo Section --> <div style=" background: var(--primary-color); padding: 40px 40px 60px 40px; border-radius: 12px; margin-bottom: 40px; box-shadow: 0 4px 15px var(--shadow-color); "> <h1 style=" color: #FFFFFF; font-size: 36px; margin: 0 0 40px 0; letter-spacing: 1px; font-weight: 500; text-align: center; ">Research and Project Proposal</h1> <!-- Logo Container with Flexbox --> <div style=" display: flex; justify-content: center; align-items: center; gap: 60px; max-width: 800px; margin: 0 auto; "> <!-- Playard Logo --> <div style=" flex: 0 1 300px; padding: 25px; background: var(--card-background); border-radius: 12px; box-shadow: 0 4px 6px var(--shadow-color); transition: transform 0.3s ease, box-shadow 0.3s ease; " onmouseover="this.style.transform='translateY(-5px)';this.style.boxShadow='0 6px 12px var(--shadow-color)';" onmouseout="this.style.transform='translateY(0)';this.style.boxShadow='0 4px 6px var(--shadow-color)';"> <img src="https://hackmd.io/_uploads/rkWlrcjZ1g.svg" alt="Playard Logo" style="width: 100%; height: auto;"/> </div> <!-- Customer Logo --> <div style=" flex: 0 1 300px; padding: 25px; background: var(--card-background); border-radius: 12px; box-shadow: 0 4px 6px var(--shadow-color); transition: transform 0.3s ease, box-shadow 0.3s ease; " onmouseover="this.style.transform='translateY(-5px)';this.style.boxShadow='0 6px 12px var(--shadow-color)';" onmouseout="this.style.transform='translateY(0)';this.style.boxShadow='0 4px 6px var(--shadow-color)';"> <img src="https://hackmd.io/_uploads/r1cQ-vibkx.png" alt="Customer Logo" style="width: 100%; height: auto;"/> </div> </div> </div> <!-- Project Title Section --> <div style="text-align: center; padding: 20px 40px; margin-bottom: 40px;"> <h2 style=" color: var(--primary-color); font-size: 42px; margin-bottom: 15px; font-weight: 600; ">Relentless Golf</h2> <h3 style=" color: var(--text-secondary); font-size: 24px; font-weight: 400; margin-top: 0; ">Golf Kinematic Sequence Analyzer</h3> </div> <!-- Year --> <div style="text-align: center; margin-bottom: 40px;"> <p style=" color: var(--text-secondary); font-size: 20px; font-weight: 500; ">2024</p> </div> <!-- Bottom Bar --> <div style=" height: 6px; background: var(--primary-color); border-radius: 3px; margin-bottom: 40px; box-shadow: 0 2px 4px var(--shadow-color); "></div> </div> # Science Behind the Golf Kinematics ## Understanding Different Swing Patterns ### Simulation ### 1. Professional Swing Pattern ![golf_swing_professional_swing](https://hackmd.io/_uploads/rJPB0ujbJe.gif) *Perfect sequence with ideal timing: Notice how the hips initiate the movement, followed by the torso, and finally the arms. This creates maximum power with minimum effort.* ### 2. Over The Top Pattern ![golf_swing_over_the_top](https://hackmd.io/_uploads/S1vrAOjZJx.gif) *Common fault where arms move too early: This pattern often leads to slicing and loss of power. Compare the arm movement timing with the professional pattern above.* ### 3. Early Extension Pattern ![golf_swing_early_extension](https://hackmd.io/_uploads/ByIHCdsWkx.gif) *Hip thrust pattern: Notice how the hip rotation differs from the professional pattern, causing loss of spine angle and inconsistent contact.* ### 4. Slow Transition Pattern ![golf_swing_slow_transition](https://hackmd.io/_uploads/rJvBROoZJl.gif) *Delayed downswing initiation: Observe how the transition from backswing to downswing is slower, reducing potential power generation.* ### 5. Fast Hips Pattern ![golf_swing_fast_hip_rotation](https://hackmd.io/_uploads/B1DB0OoZJx.gif) *Overly aggressive hip rotation: The hips rotate too quickly, not allowing proper sequence development and power transfer.* ## Key Points to Observe in Each Pattern: 1. **Hip Movement** (Blue Segment) - Initiates the downswing - Sets the sequence timing - Controls rotation speed 2. **Torso Rotation** (Green Segment) - Follows hip movement - Creates torque multiplication - Maintains spine angle 3. **Arms/Club Path** (Red Segment) - Responds to body rotation - Shows lag and release - Indicates swing efficiency ### 1. Real-Time Motion Capture Just like in our simulation, we'll track three key body segments: - 🔵 Hips (Blue sensor) - 🟢 Upper Body/Torso (Green sensor) - 🔴 Arms/Club (Red sensor) But instead of computer animation, we'll use real IMU sensors (BNO085) attached to your body that can detect: - Exact rotation angles - Movement speed - Acceleration - Position changes ### 2. Pattern Recognition ```mermaid flowchart LR classDef sensorNode fill:#2E86C1,stroke:#000,stroke-width:2px,color:#fff classDef processNode fill:#27AE60,stroke:#000,stroke-width:2px,color:#fff classDef feedbackNode fill:#E74C3C,stroke:#000,stroke-width:2px,color:#fff S1["Sensor Data"]:::sensorNode --> P1["Compare with\nIdeal Pattern"]:::processNode P1 --> P2["Calculate\nDeviations"]:::processNode P2 --> F1["Real-time\nAudio Feedback"]:::feedbackNode ``` ### What is an IMU? An IMU (Inertial Measurement Unit) is a sophisticated electronic device that combines multiple sensors to measure motion, orientation, and environmental conditions. Think of it as your smartphone's ability to know when you rotate it or move it, but with much higher precision and speed. ### BNO085: Our Chosen IMU ![bno_085](https://hackmd.io/_uploads/HyBxRFob1l.jpg) *The BNO085 is a high-precision smart sensor with built-in processing capabilities* #### Key Features: 1. **9-Axis Sensing** - 3-axis Accelerometer: Measures linear movement - 3-axis Gyroscope: Detects rotation - 3-axis Magnetometer: Determines orientation 2. **Built-in Processing** - Automatic sensor fusion - Self-calibration - Error correction - Low latency (fast response) ### Motion Capture System #### 1. Sensor Placement We'll track three key body segments with precision sensors: - 🔵 **Hips (Base Sensor)** * Measures core rotation * Tracks power initiation * Monitors hip sway and thrust - 🟢 **Upper Body/Torso (Mid Sensor)** * Analyzes spine angle * Measures shoulder rotation * Tracks torso-hip differential - 🔴 **Arms/Club (Lead Sensor)** * Monitors swing path * Measures club head speed * Tracks lag and release #### 2. What We Measure ```mermaid flowchart TB classDef measureNode fill:#2E86C1,stroke:#000,stroke-width:2px,color:#fff classDef dataNode fill:#27AE60,stroke:#000,stroke-width:2px,color:#fff subgraph Measurements["Key Measurements"] direction TB M1["Rotation"]:::measureNode M2["Acceleration"]:::measureNode M3["Angular Velocity"]:::measureNode M4["Orientation"]:::measureNode D1["0-360° angles\n±2000°/sec"]:::dataNode D2["±16g force\n0.01g resolution"]:::dataNode D3["Real-time speed\n1000Hz sampling"]:::dataNode D4["3D positioning\n0.1° accuracy"]:::dataNode M1 --> D1 M2 --> D2 M3 --> D3 M4 --> D4 end ``` # Golf Training System ## System Architecture ```mermaid flowchart TB classDef nodeHW fill:#2E86C1,stroke:#000,stroke-width:2px,color:#fff classDef audioNode fill:#27AE60,stroke:#000,stroke-width:2px,color:#fff classDef powerNode fill:#E74C3C,stroke:#000,stroke-width:2px,color:#fff classDef appNode fill:#8E44AD,stroke:#000,stroke-width:2px,color:#fff classDef networkNode fill:#F39C12,stroke:#000,stroke-width:2px,color:#fff subgraph Nodes["Smart Audio Sensor Nodes"] direction TB subgraph Node1["Node 1 - Pelvis"] direction LR N1_IMU["BNO085\nOrientation"]:::nodeHW N1_NRF["nRF52\n- Local Analysis\n- Audio Gen\n- BLE Mesh"]:::nodeHW N1_AUD["Buzzer\n- Timing\n- Speed"]:::audioNode N1_BAT["🔋 LiPo\n130mAh"]:::powerNode end subgraph Node2["Node 2 - Thorax"] direction LR N2_IMU["BNO085\nOrientation"]:::nodeHW N2_NRF["nRF52\n- Local Analysis\n- Audio Gen\n- BLE Mesh"]:::nodeHW N2_AUD["Buzzer\n- Rotation\n- Sequence"]:::audioNode N2_BAT["🔋 LiPo\n130mAh"]:::powerNode end subgraph Node3["Node 3 - Club"] direction LR N3_IMU["BNO085\nOrientation"]:::nodeHW N3_NRF["nRF52\n- Local Analysis\n- Audio Gen\n- BLE Mesh"]:::nodeHW N3_AUD["Buzzer\n- Speed\n- Impact"]:::audioNode N3_BAT["🔋 LiPo\n130mAh"]:::powerNode end end subgraph Mobile["📱 Mobile Application"] direction TB APP["Mobile App\n- Configuration\n- Data Analysis\n- Training History"]:::appNode CLOUD["Cloud Storage"]:::networkNode end %% Node internal connections N1_IMU --> N1_NRF --> N1_AUD N2_IMU --> N2_NRF --> N2_AUD N3_IMU --> N3_NRF --> N3_AUD %% Wireless connections N1_NRF <--> |"BLE Mesh\nSync & Timing"| N2_NRF N2_NRF <--> |"BLE Mesh\nSync & Timing"| N3_NRF N1_NRF & N2_NRF & N3_NRF --> |"Data"| APP APP --> CLOUD ``` ### Audio Generation ```mermaid flowchart TB classDef pelvisNode fill:#2E86C1,stroke:#000,stroke-width:2px,color:#fff classDef thoraxNode fill:#27AE60,stroke:#000,stroke-width:2px,color:#fff classDef clubNode fill:#E74C3C,stroke:#000,stroke-width:2px,color:#fff classDef patternNode fill:#F39C12,stroke:#000,stroke-width:2px,color:#fff subgraph Patterns["Audio Pattern Specifications"] direction TB subgraph Pelvis["Pelvis Node Patterns (200-400Hz)"] direction LR P1["Early Rotation\n⚠️ 3 quick beeps\n200Hz, 100ms each"]:::pelvisNode P2["Perfect Timing\n✅ Single long beep\n300Hz, 500ms"]:::pelvisNode P3["Late Rotation\n⚠️ 2 slow beeps\n400Hz, 250ms each"]:::pelvisNode end subgraph Thorax["Thorax Node Patterns (500-800Hz)"] direction LR T1["Wrong Sequence\n⚠️ Descending tones\n800→500Hz, 200ms"]:::thoraxNode T2["Good Sequence\n✅ Ascending tones\n500→800Hz, 200ms"]:::thoraxNode T3["Over Rotation\n⚠️ Continuous tone\n600Hz, 300ms"]:::thoraxNode end subgraph Club["Club Node Patterns (900-1200Hz)"] direction LR C1["Slow Speed\n⚠️ Low pitch pulse\n900Hz, 150ms"]:::clubNode C2["Ideal Speed\n✅ High pitch tone\n1100Hz, 200ms"]:::clubNode C3["Too Fast\n⚠️ High-Low warble\n1200-900Hz, 100ms"]:::clubNode end subgraph Sync["Combined Patterns"] direction TB S1["Perfect Swing\n✅ Harmonious ascending\nAll nodes sequential"]:::patternNode S2["Timing Error\n⚠️ Dissonant pattern\nError node emphasized"]:::patternNode end end ``` ### Audio System Timing Diagram ```mermaid sequenceDiagram participant IMU as BNO085 participant MCU as nRF52 participant Hub as Mobile App participant Audio as Audio System Note over IMU,Audio: Initialization Phase IMU->>MCU: Config Ready MCU->>Hub: Node Connected Note over IMU,Audio: Calibration Phase Hub->>MCU: Request Calibration MCU->>IMU: Start Calibration IMU-->>MCU: Calibration Status MCU-->>Hub: Calibration Complete Note over IMU,Audio: Data Collection (100Hz) loop Every 10ms IMU->>MCU: Sensor Data MCU->>MCU: Process Data MCU->>Hub: Send Packet end Note over IMU,Audio: Swing Detection Hub->>Hub: Detect Swing Start Note over IMU,Audio: Real-time Processing loop During Swing IMU->>MCU: High-Speed Data MCU->>Hub: Processed Data Hub->>Hub: Analyze Sequence Hub->>Audio: Generate Feedback end Note over IMU,Audio: Post-Swing Analysis Hub->>Hub: Complete Analysis Hub->>Audio: Final Feedback Hub->>MCU: Reset for Next Swing ``` ### Node Software Flow ```mermaid stateDiagram-v2 [*] --> Initialization state Initialization { [*] --> SensorConfig SensorConfig --> CalibrationCheck CalibrationCheck --> Ready } state DataCollection { [*] --> CollectIMUData CollectIMUData --> ProcessData ProcessData --> DetectMovement DetectMovement --> SendData } state AudioGeneration { [*] --> AnalyzeSpeed AnalyzeSpeed --> TimingCheck TimingCheck --> GenerateSound } Ready --> DataCollection : Start Recording DataCollection --> AudioGeneration : Movement Detected AudioGeneration --> DataCollection : Complete state "Sensor Configuration" as SensorConfig { BNO085_Config RadioConfig BuzzerConfig } state "Movement Analysis" as DetectMovement { CheckRotationalSpeed CheckLinearSpeed PatternMatching } state "Sound Generation" as GenerateSound { SpeedToVolume TimingToDuration PlayFeedback } ``` ## What Are We Matching? Think of a golf swing like a musical symphony - every part needs to move in perfect harmony. We're creating a system that listens to this "body symphony" and tells you when you're hitting the right notes at the right time. ```mermaid flowchart TB classDef perfectNode fill:#27AE60,stroke:#000,stroke-width:2px,color:#fff classDef errorNode fill:#E74C3C,stroke:#000,stroke-width:2px,color:#fff classDef infoNode fill:#3498DB,stroke:#000,stroke-width:2px,color:#fff subgraph IDEAL["Ideal Swing Sequence"] I1["1. Pelvis Start\n22-25 mph"]:::perfectNode I2["2. Thorax Follow\n45-50 mph"]:::perfectNode I3["3. Arms Speed\n70-75 mph"]:::perfectNode I4["4. Club Impact\n90-100 mph"]:::perfectNode I1 --> I2 --> I3 --> I4 end subgraph SYSTEM["Real-time Analysis"] S1["Sensor\nMeasurements"]:::infoNode S2["Pattern\nComparison"]:::infoNode S3["Audio\nFeedback"]:::infoNode S1 --> S2 --> S3 end subgraph FEEDBACK["Feedback Types"] F1["Perfect: Ascending Tone"]:::perfectNode F2["Early: Warning Beep"]:::errorNode F3["Slow: Low Tone"]:::errorNode end IDEAL --> SYSTEM --> FEEDBACK ``` # Development Roadmap ## Fast Prototyping Approach ### Why Fast Prototyping? Before diving into full-scale hardware development, we need to validate our system design and gather real-world insights. This approach allows us to: - Test our core functionality quickly - Identify potential issues early - Refine our system requirements - Begin software development in parallel - Save time and resources ## Two-Phase Prototype Development ### Phase 1: Quick Assembly Test System In this phase, we'll create working prototypes using off-the-shelf development boards. Think of it as building with "electronic LEGO" - quick to assemble and easy to modify. #### Components Needed: - **5x nRF52840 Development Boards** ([Adafruit nRF52840 Express](https://www.digikey.com/en/products/detail/adafruit-industries-llc/4062/9843410)) - Bluetooth connectivity - Built-in USB charging - Easy programming interface - **5x BNO085 IMU Sensors** ([Adafruit BNO085](https://www.adafruit.com/product/4754)) - 9-axis motion sensing - Built-in sensor fusion - Perfect for tracking body movement #### Assembly Plan: 1. Connect BNO085 to nRF52 boards 2. Add LiPo batteries for portability 3. 3D print simple protective cases 4. Create mounting straps for body attachment This setup will let us: - Start software development immediately - Test sensor placement on the body - Validate our audio feedback system - Experiment with different configurations ### Phase 2: Custom PCB Development While Phase 1 is ongoing, we'll move to creating our first custom PCB. This isn't the final product, but rather a refined prototype that will: - Be smaller and lighter - Use less power - Be more reliable for extended testing - Help us optimize component placement #### Custom PCB Features: - Integrated nRF52 and BNO085 - Optimized power management - Smaller form factor - Better durability for testing ## What This Achieves This two-phase approach gives us several advantages: 1. **Quick Start**: We can begin testing within days of receiving components 2. **Risk Reduction**: Major issues can be identified before custom PCB design 3. **Parallel Development**: Software work can progress while hardware is being refined 4. **User Feedback**: Early testing with real golfers can guide development 5. **Cost Effective**: Changes are cheaper at the prototype stage ### Phase 3: Web Application Prototype (Cross Platform) ```mermaid flowchart TD classDef userNode fill:#3498DB,stroke:#000,stroke-width:2px,color:#fff classDef deviceNode fill:#2ECC71,stroke:#000,stroke-width:2px,color:#fff classDef featureNode fill:#9B59B6,stroke:#000,stroke-width:2px,color:#fff classDef dataNode fill:#E74C3C,stroke:#000,stroke-width:2px,color:#fff classDef storageNode fill:#F1C40F,stroke:#000,stroke-width:2px,color:#fff subgraph User["User Interface Layer"] direction TB UI1["Device Connection\n& Management"]:::userNode UI2["Real-time\nVisualization"]:::userNode UI3["Analysis\nDashboard"]:::userNode end subgraph Devices["Sensor Layer"] direction TB D1["Hip Sensor\nBLE Device"]:::deviceNode D2["Torso Sensor\nBLE Device"]:::deviceNode D3["Club Sensor\nBLE Device"]:::deviceNode end subgraph Features["Processing Layer"] direction TB F1["Pattern\nRecognition"]:::featureNode F2["Data\nAnalysis"]:::featureNode F3["Performance\nMetrics"]:::featureNode end subgraph Storage["Data Storage"] direction TB S1["Session\nHistory"]:::storageNode S2["User\nPreferences"]:::storageNode S3["Pattern\nTemplates"]:::storageNode end %% Connections Devices --> UI1 UI1 --> Features Features --> UI2 Features --> UI3 Features <--> Storage %% Add notes style User fill:#fff,stroke:#000 style Devices fill:#fff,stroke:#000 style Features fill:#fff,stroke:#000 style Storage fill:#fff,stroke:#000 ``` For rapid development and quick validation of our golf swing analysis system, we'll create a web-based prototype application that allows us to demonstrate core functionalities and gather user feedback efficiently. ### 1. Device Connection Interface - Simple device scanning and connection - Device configuration options ### 2. Real-Time Data Visualization - Live swing data display from sensors - Visual representation of body positions - Simple 2D animation of swing sequence - Basic metrics display (speed, angles, timing) ### 3. Basic Analysis Features - Swing pattern comparison - Simple performance metrics - Session history view - Basic data export ## Technology Stack We'll use modern web technologies for rapid development: - React for user interface - Web Bluetooth API for sensor connection - Canvas/SVG for visualizations - Local storage for session data ### Planned output of the first 3 phases Below are photos of a similar product currently in our workshop. At the end of the first 3 phases, a product similar to this product will emerge. <div style="display: flex;"> <img src="https://hackmd.io/_uploads/rkGGoYjWJe.jpg" alt="Photo 1" style="width: 33%;"> <img src="https://hackmd.io/_uploads/rkzfsYoWJx.jpg" alt="Photo 2" style="width: 33%;"> <img src="https://hackmd.io/_uploads/HJMMsto-kx.jpg" alt="Photo 3" style="width: 33%;"> </div> # Technical Challenges ### Placement Challenges - Different body types require flexible mounting solutions - Optimal sensor positions may vary by user - Movement artifacts from loose attachments - Need for robust yet comfortable mounting system - Node count can be vary # Project Timeline and Budget Estimation ## Timeline Breakdown | Phase | Duration | Hours/Week | Total Hours | Activities | |-------|----------|------------|-------------|------------| | **Phase 1: Quick Assembly** | 2-3 weeks | 35 | 70-105 | - Hardware assembly<br>- Initial firmware development<br>- Basic sensor integration<br>- Testing connections | | **Phase 2: Custom PCB** | 2-3 weeks | 35 | 70-105 | - PCB design<br>- Component optimization<br>- Power management<br>- Testing and validation | | **Phase 3: Web Application** | 2 weeks | 35 | 70 | - UI development<br>- BLE integration<br>- Data visualization<br>- Basic analysis features | | **Total** | 6-8 weeks | 35 | 210-280 | | ## Budget Estimation ### Hardware Costs (Phase 1) | Component | Quantity | Unit Price ($) | Total ($) | |-----------|----------|----------------|-----------| | nRF52840 Dev Board | 5 | 25.95 | 129.75 | | BNO085 Sensors | 5 | 20.95 | 104.75 | | LiPo Batteries | 5 | 9.95 | 49.75 | | 3D Printing Materials | - | 50.00 | 50.00 | | Misc. Components | - | 100.00 | 100.00 | | **Total Hardware** | | | **434.25** | ### Development Labor | Phase | Hours | Rate ($/hr) | Total ($) | |-------|-------|-------------|-----------| | Phase 1 | 70-105 | 40 | Hours × Rate | | Phase 2 | 70-105 | 40 | Hours × Rate | | Phase 3 | 70 | 40 | Hours × Rate | | **Total Hours** | 210-280 | | | ## Next Steps (to Kickstart our Project) After getting your approval, we can: 1. Order the development boards and sensors 2. Begin assembly of the first test unit 3. Start basic software development 4. Design the first 3D printed cases 5. Begin preliminary PCB design ### Product Links -> nRF52840 Development Boards (https://www.digikey.com/en/products/detail/adafruit-industries-llc/4062/9843410) -> BNO085 -> (https://www.adafruit.com/product/4754)