Ho bisogno di sapere se posso ottenere dati di accelerazione da un IMU a 500Hz via USB.
Ho letto il codice fornito dal produttore e sto cercando di migliorarlo. Al momento non posso andare più veloce di 166Hz. Cose che ho provato:
-
Passa dalla modalità streaming al polling. Il motivo è che in modalità streaming l'SDK del produttore utilizza la libreria ioctl per sapere se ci sono nuovi dati da leggere. Il più veloce andrei era 10Hz. Nella modalità di polling, ogni dato N millisecondi viene letto dalla porta usando un comando di lettura standard. Sono passato da 10 Hz a 166 Hz, ovvero, per N = 6. Ma con N < 6 non ho alcun miglioramento. 166Hz è un soffitto in questo momento.
-
Aumentata la priorità del processo. Questo non ha alcun effetto. Forse perché sto solo eseguendo il browser e il codice su cui sto lavorando?
Sì, so che Linux non è un sistema in tempo reale. Alla fine del giorno dovrò vivere con quello. Potrei usare xenomai più tardi nel codice. Ma adesso ho bisogno di sapere quanto posso andare veloce. Non in teoria, ma in una vera applicazione. Qualche idea su come aumentare le prestazioni?
EDIT: Questi sono i timestamp del momento in cui ottengo i dati, in millisencod. Nota gli scoppi.
1449258970519
1449258970519
1449258970525
1449258970531
1449258970531
1449258970543
1449258970543
1449258970543
1449258970549
1449258970555
1449258970555
1449258970562
1449258970567
1449258970567
1449258970573
1449258970579
1449258970579
1449258970585
EDIT: La quantità di dati che devo trasferire è molto piccola ... diciamo al massimo 16 float, più alcune intestazioni. Posso tranquillamente supporre che 128 byte siano sufficienti. Quindi 128x1000 è ancora MOLTO inferiore ai 480 Mpbs che USB 2 offre.