Collect short, labeled episodes of:
- Normal contact (steady walking, standing)
- Slip contact (intentional slips on slippery surfaces)
Each episode should be 2-5 seconds long, clearly labeled.
What to collect:
- Steady walking on dry, non-slip surfaces
- Normal heel strikes
- Standing still (optional, but good for baseline)
- Walking at different speeds (slow, normal, fast)
Collection:
- Record 10-20 episodes per session
- Each episode: 2-5 seconds
- Label:
normalor0
Example scenarios:
- Walking on carpet
- Walking on dry tile/wood
- Walking on dry concrete
- Normal stair climbing
What to collect:
- Intentional slips on slippery surfaces
- Wet surfaces (wet tile, wet floor)
- Icy surfaces (if available)
- Oily/greasy surfaces
- Loose surfaces (gravel, sand)
Collection:
- Record 10-20 episodes per session
- Each episode: 2-5 seconds (capture the slip event)
- Label:
slipor1
Safety:
- Use controlled environments
- Have support nearby
- Start with minor slips
- Consider using a test rig/fixture if possible
- Set up Arduino with sensor on heel
- Run collection script:
python collect_sensor_data.py --port COM3 --output data/collection_session_1.csv
For each episode:
- Start recording (script is running)
- Perform action (walk normally OR create slip)
- Mark episode (press Enter or use keyboard shortcut - see script)
- Wait 1-2 seconds between episodes
- Repeat for 10-20 episodes
After collection, label your episodes:
python label_collected_data.py --input data/collection_session_1.csv --output data/labeled_session_1.csvEach episode should contain:
- Pre-contact (0.5s before)
- Contact event (main event - 1-2s)
- Post-contact (0.5s after)
Total: ~2-3 seconds per episode
- Normal episodes: 50-100
- Slip episodes: 50-100
- Total: 100-200 episodes
- Normal episodes: 200-300
- Slip episodes: 200-300
- Total: 400-600 episodes
- Normal episodes: 500+
- Slip episodes: 500+
- Total: 1000+ episodes
- Consistency: Use same sensor placement for all collections
- Variety: Collect different walking speeds, surfaces, conditions
- Balance: Equal number of normal and slip episodes
- Clean data: Avoid transitions between episodes in the same recording
- Mark clearly: Use the labeling tool to mark episode boundaries
- Wet tile floor
- Oily surface
- Icy surface (if available)
- Best for: High-quality, labeled data
- Wet sidewalks
- Slippery floors
- Best for: Validation and edge cases
- Drag foot intentionally
- Quick lateral movements
- Best for: Additional training data
- Steady, rhythmic heel strikes
- Predictable impact patterns
- Consistent amplitude
- Regular timing
- Sudden high-frequency spike
- Unusual force patterns
- Irregular timing
- Higher variance
- Recovery adjustments (post-slip)
data/
├── raw/
│ ├── session_1_normal.csv
│ ├── session_1_slip.csv
│ ├── session_2_normal.csv
│ └── session_2_slip.csv
├── labeled/
│ ├── labeled_session_1.csv
│ └── labeled_session_2.csv
└── training_data.csv (combined, final dataset)
- Label episodes using labeling script
- Combine datasets from multiple sessions
- Split data: 80% training, 20% testing
- Train model:
python train_model.py --data data/training_data.csv - Validate on new, unseen data
- Have support nearby
- Use controlled environments
- Start with minor slips
- Stop if you feel unsafe
- Consider using test fixtures/rigs for repeatability