La transformation de l'accéléromètre de données à partir du dispositif de coordonnées du monde réel coordonnées
Je suis vraiment désolé si c'est une question très simple, mais je n'ai pas le choix, mais de la poser: Comment traduire les données de l'accéléromètre de l'appareil coordonnées du monde réel, coordonnées?
Je veux dire, en supposant que l'accéléromètre est de me donner somenting comme (Ax,Ay,Az) -dans l'appareil coordonnées-, quelles transformations dois-je appliquer pour transformer les valeurs en (Ax',U',Az') -dans le monde réel les coordonnées de l'-, si je peux utiliser le vecteur accélération dans le monde réel, les coordonnées de calculer si l'appareil est à l'accélération nord, est, sud-ouest,etc?
J'ai travaillé autour de cette question au cours de la dernière quelques jours. Au début, je pensais qu'il shound pas être difficile, mais après une recherche de plusieurs dizaines de pages, je n'ai pas trouver quelque chose de fonctionnel.
Par ailleurs, voici un peu de code avec ce que j'ai mis en œuvre à ce jour:
private SensorEventListener mSensorEventListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy){
}
public void onSensorChanged(SensorEvent event) {
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
accelerometervalues = event.values.clone();
AX.setText(accelerometervalues[0]+"");
AY.setText(accelerometervalues[1]+"");
AZ.setText(accelerometervalues[2]+"");
break;
case Sensor.TYPE_ORIENTATION:
orientationvalues = event.values.clone();
azimuth.setText(orientationvalues[0]+"");
pitch.setText(orientationvalues[1]+"");
roll.setText(orientationvalues[2]+"");
break;
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticmatrix =event.values.clone();
TAX.setText(geomagneticmatrix[0]+"");
TAY.setText(geomagneticmatrix[1]+"");
TAZ.setText(geomagneticmatrix[2]+"");
break;
}
if (geomagneticmatrix != null && accelerometervalues != null) {
float[] R = new float[16];
float[] I = new float[16];
SensorManager.getRotationMatrix(R, I, accelerometervalues, geomagneticmatrix);
//What should I do here to transform the components of accelerometervalues into real world acceleration components??
}
}
};
J'ai:
Un vecteur des accélérations en natif coordonnées dans accelerometervalues
.
Un vecteur de valeurs de champ magnétique dans geomagneticmatrix
.
De l'azimut, de tangage et de roulis dans orientationvalues
.
Matrice de Rotation R
.
L'inclinaison de la matrice I
.
Je pense que toutes les informations nécessaires sont là, azimut, de tangage et de roulis doit décrire le déplacement de l'appareil du système de coordonnées en rapport avec le monde réel du système de coordonnées. Aussi, je crois que R
est/peut même être utilisé comme un vrai le nord de vecteur à l'intérieur des appareils coordonnées.
Il me semble que obtaing les valeurs de l'accélération dans le monde réel est juste une transformation mathématique à l'écart de ces données. Je ne peux pas le comprendre.
Merci d'avance.
Édité:
J'ai essayé directement multipliying les composants de accelerometervalues
avec la matrice de rotation R
(trueaccel=accel*R) mais il ne fonctionne pas.
trueacceleration[0]= accelerometervalues[0]*R[0]+accelerometervalues[1]*R[1]+accelerometervalues[2]*R[2];
trueacceleration[1]= accelerometervalues[0]*R[1]+accelerometervalues[1]*R[4]+accelerometervalues[2]*R[7];
trueacceleration[2]= accelerometervalues[0]*R[2]+accelerometervalues[1]*R[5]+accelerometervalues[2]*R[8];
J'ai aussi essayé de multipliying accelerometervalues
avec l'inclinaison de la matrice I. Aussi multipliying avec deux R et I (trueaccel=accel*R*I) et qui ne fonctionne pas non plus. Ni fait appel à remapcoordinates()
puis multiplier dans l'une des formes précédentes.
Quelqu'un a une idée sur ce que je fais mal?
OriginalL'auteur Tommy | 2011-03-28
Vous devez vous connecter pour publier un commentaire.
Oki, j'ai travaillé ce mathématiquement moi-même, de sorte s'il vous plaît garder avec moi.
Si vous voulez traduire un vecteur d'accélération
accelerationvalues
dans un vecteur d'accélérationtrueacceleration
exprimé dans le monde réel les coordonnées de l', une fois que vous avez de l'azimut,de tangage et de roulis stockées dans unorientationvalues
vecteur, il suffit de faire les opérations suivantes:J'ai testé votre extrait de code et tout ce que j'obtiens est un assez bruyant signal aléatoire en retour.
Salut. La formule la matrice vous permet de convertir ce monde réel, coordonnées ?
OriginalL'auteur Tommy
Vous avez besoin pour être en mesure de connaître la référence de système de coordonnées qui vous donne également l'orientation de votre appareil à l'intérieur de monde "réel" des coordonnées. Sans cette information, il regarde impossible de transformer vos données en quelque chose d'utile.
Par exemple, est-ce que votre appareil a un type de "directionnelle" sensor qui permettrait de mieux comprendre les données de l'accéléromètre (gyroscope & boussole par exemple?)
J'ai élargi la question avec un peu de code.
OriginalL'auteur Dave V.
Je fais affaire avec le même problème. Ce que vous pouvez faire est, comme vous avez pu le [R] de la matrice de multiplier le vecteur d'accélération et voilá.
PS: accelerometervalues doit être un 4 vecteur de champ, il suffit d'ajouter 0 pour le dernier champ.
OriginalL'auteur void
Essayer cela, son travail pour moi
OriginalL'auteur Amit kumar
C'est ce que j'ai utilisé pour la carte accelrometer de données locales(Mobile) cadre de référence pour la Terre de cadre de référence, pour se débarrasser de l'orientation dans la dépendance. Depuis en terre cadre de l'axe Z est orienté vers le ciel et doit montrer la valeur ~=9.81 m/s^2. Un phénomène que je ne pouvais pas comprendre, c'est quand j'ai mis le téléphone sur le renouvelable président quelque soit l'orientation et la rotation à vitesse constante puis XEarth et YEarth valeurs montre rotation de 90 degré décalage de phase et oscille comme un péché/cosinus vague qui, je suppose Nord et de l'Est de l'axe.
OriginalL'auteur Muhammad