Ad avere causato lo schianto invece sembra essere stato l’IMU (Inertial Measurement Unit), che dopo l’apertura del paracadute è andato in saturazione per circa un secondo, mandando in tilt tutto il sistema di controllo. Per capire di che cosa si tratta, un esperto vicino alla missione ci ha spiegato che la Inertial Measument Unit è il cuore del sistema di navigazione, contiene giroscopi e accelerometri che misurano costantemente le accelerazioni angolari e lineari a cui è sottoposto lo spacecraft. Quindi misura direttamente imbardate, rollii, accelerazioni assiali e laterali.
Da queste informazioni, integrando nel tempo, si derivano le velocità e la posizione nello spazio e l’assetto del satellite o sonda. Quello che è successo sul lander, come spiegato ieri dall’ESA, è che la IMU ha avuto una saturazione del segnale per circa un secondo; cioè per un lungo lasso di tempo ha rilevato un’accelerazione massima e fuori scala, ma fittizia, tanto da poter essere definita un “glitch”.
Un errore che ha completamente disorientato i sistemi di bordo facendo credere di essere sotto al livello del suolo marziano proprio nel momento in cui avrebbe dovuto decidere cosa fare. Di conseguenza il sistema di controllo ha proceduto all’atterraggio secondo tutti i passaggi previsti, ma nel minor tempo possibile, rilasciando il paracadute in anticipo, accendendo e spegnendo subito i retrorazzi, e azionando tutti gli strumenti che avrebbero dovuto funzionare solo ad atterraggio avvenuto. Il problema è che tutto questo è avvenuto a 3,7 chilometri dal suolo, perfino più in alto di quanto si pensasse in un primo momento.
Ecco cosa succede a usare le malloc() invece dell’allocazione statica, su sistemi real-time multithread con thread a priorità diverse.
ExoMars: Schiaparelli schiantato per un errore di un secondo