-
-
Notifications
You must be signed in to change notification settings - Fork 228
Enh/acceleration data to trigger parachutes #911
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Enh/acceleration data to trigger parachutes #911
Conversation
…Team#XXX) * ENH: add u_dot parameter computation inside parachute trigger evaluation. * ENH: add acceleration_noise_function parameter to Flight class for realistic IMU simulation. * ENH: implement automatic detection of trigger signature to compute derivatives only when needed. * TST: add unit tests for parachute trigger with acceleration data and noise injection. * TST: add test runner for trigger acceleration validation without full test suite dependencies.
…tion This enhancement enables realistic avionics algorithms by providing access to acceleration data (u_dot) within parachute trigger functions, simulating how real flight computers use accelerometers (IMU) to detect flight phases. * ENH: Pass acceleration data (u_dot) to parachute trigger callbacks - Flight class now computes and injects u_dot derivatives into triggers - Automatic detection of trigger signatures to optimize performance - Only calculates u_dot when trigger explicitly requires it * ENH: Add built-in acceleration-based trigger functions - detect_apogee_acceleration: Detects apogee via vz ≈ 0 and az < 0 - detect_motor_burnout: Detects motor shutdown by acceleration drop - detect_freefall: Detects free-fall condition (low total acceleration) - detect_liftoff: Detects liftoff by high total acceleration - altitude_trigger_factory: Factory for altitude-based triggers * ENH: Implement optional accelerometer noise injection - New parameter acceleration_noise_function in Flight.__init__ - Simulates MEMS accelerometer noise (typical 0.1-0.3 m/s²) - Applied transparently to all acceleration-based triggers * TST: Add comprehensive unit tests for trigger evaluation - Validates u_dot computation and noise injection - Tests backward compatibility with legacy 3-parameter triggers - Ensures performance optimization skips u_dot for non-accelerating triggers Notes ----- - Triggers can now use signatures: (p, h, y) or (p, h, y, u_dot/acc/acceleration) - Built-in string triggers: apogee, apogee_acc, burnout, freefall, liftoff - Performance: u_dot computation doubles physics evaluations at trigger points - Fully backward compatible with existing altitude and custom triggers
Allow parachute triggers to accept (p, h, y, sensors, u_dot); Flight passes sensors+u_dot, computing u_dot on demand with noise; numeric/apogee legacy triggers carry metadata.\n\nTests: pytest tests/unit/test_parachute_trigger_acceleration.py -v\nLint: black rocketpy tests && ruff check rocketpy tests
|
Fixed the linting/test errors reported by the CI workflow in the latest commit. |
|
@ViniciusCMB how do you compare your implementation against #854, is there any overlap we should be worried about? |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #911 +/- ##
===========================================
+ Coverage 80.27% 80.68% +0.41%
===========================================
Files 104 107 +3
Lines 12769 13887 +1118
===========================================
+ Hits 10250 11205 +955
- Misses 2519 2682 +163 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
I have reviewed the definition of Controllers and analyzed the __simulate loop in flight.py. My Conclusion: While Controllers allow for dynamic logic, the RocketPy simulation engine iterates over them in separate loops:
Impact Assessment:
However, since both modify the critical __simulate method and #854 involves significant changes to the Controller architecture (10 files), I cannot guarantee zero friction without running an integration test merging both branches. I am available to rebase and test my branch on top of #854 once it is merged to ensure stability. |
|
@ViniciusCMB I have merged the #854 so you can rebase your work on top of develop branch again. Pls fix conflicts and linters so we can proceed with the review. |
…iggers - TestTriggerSignatures: Validates 3, 4, and 5-parameter trigger signatures - TestBuiltInTriggers: Tests all built-in triggers (apogee_acc, burnout, freefall, liftoff) - TestParachuteInitialization: Verifies parachute creation with different trigger types - TestEdgeCases: Covers NaN/Inf handling, low altitude, and error conditions Tests use AAA pattern (Arrange, Act, Assert) and follow NumPy docstring style. All edge cases for realistic avionics simulation are covered. Fixes codecov patch coverage from 42.85% to >85%.
… triggers - Created docs/user/parachute_triggers.rst with complete guide - Enhanced Parachute class docstring with trigger signature details - Added parachute_triggers.rst to docs/user/index.rst Documentation covers: - Built-in triggers (burnout, apogee_acc, freefall, liftoff) - Custom trigger examples (3, 4, and 5-parameter signatures) - IMU noise simulation - Performance considerations - Best practices and complete dual-deploy example
- Reorder imports: standard library before third-party - Prefix unused arguments with underscore - Add broad-exception-caught disable for test runner
Direct calls to parachute.triggerfunc() were missing the u_dot parameter, causing TypeError in unit tests. Added u_dot=None to non-overshoot and overshoot trigger evaluation paths where u_dot is not computed. Fixes test failures in: - tests/unit/simulation/test_flight.py - tests/unit/test_utilities.py - tests/unit/test_rail_buttons_bending_moments.py - tests/unit/test_flight_data_exporter.py
Pull Request: Add Acceleration-Based Parachute Triggers with IMU Sensor Simulation
Pull request type
Checklist
black rocketpy/ tests/) has passed locallypytest tests -m slow --runslow) have passed locallyCurrent behavior
Currently, RocketPy forces users to trigger parachute deployment based on state variables (altitude
z, vertical velocityvz) or pressure. This simulates "God Mode" avionics rather than realistic flight computer behavior.Real-world rocket avionics (flight computers) trigger events based on accelerometer data (IMU):
Users had no way to access acceleration (
u_dot) inside trigger functions, making it impossible to simulate realistic avionics algorithms.Related Issue: RocketPy#156
New behavior
This PR introduces acceleration-based parachute triggers with the following features:
1. Acceleration Data Access in Triggers
Parachute trigger functions now optionally receive acceleration data (
u_dot):2. Built-in Acceleration-Based Triggers
New triggers on
rocketpy/rocket/parachute.pyprovides realistic avionics functions:detect_apogee_acceleration: Detects apogee when vertical velocity ≈ 0 AND acceleration becomes negativedetect_motor_burnout: Detects motor shutdown by sudden acceleration dropdetect_freefall: Detects free-fall condition (total acceleration < 1.5 m/s²)detect_liftoff: Detects liftoff by high total acceleration (> 15 m/s²)Usage:
3. Optional IMU Sensor Noise Simulation
New parameter
acceleration_noise_functioninFlight.__init__allows simulating realistic accelerometer noise:4. Performance Optimization
The Flight class automatically detects trigger signatures:
u_dotparameter → computes acceleration at event checks5. Full Backward Compatibility
trigger=300) continue workingTechnical Details
Implementation Changes
rocketpy/rocket/parachute.py__evaluate_trigger_function()now wraps triggers with signature detection_expects_udotattribute for Flight optimization"apogee","burnout","freefall","liftoff"flight.py
_evaluate_parachute_trigger()now computesu_dotwhen neededacceleration_noise_functionTests Added
test_parachute_triggers.py
test_trigger_receives_u_dot_and_noise: Validates acceleration computation and noise injectiontest_trigger_with_u_dot_only: Tests acceleration-only triggerstest_legacy_trigger_does_not_compute_u_dot: Ensures performance optimization worksTrade-offs and Considerations
Performance Impact
u_dotat event points doubles physics evaluations locallyCoordinate System
u_dot[3:6]follow state vector convention:[ax, ay, az]Breaking change
Additional information
Examples of Usage
Realistic apogee detection:
Simulating sensor noise:
Custom acceleration trigger:
Testing Performed
Documentation Notes