Je travaille actuellement sur un appareil qui utilise un accéléromètre 3D toujours activé (en utilisant une échelle + -2g) et un gyroscope 3D (en utilisant une échelle + -250g) -capteur.
Je peux lire tous les vecteurs possibles (X, Y, Z) et leurs accélérations (g) et taux angulaire (dps) ainsi que l'angle où se trouve actuellement l'appareil. Mais mon problème est que lorsque l'appareil est en inclinaison (0g en l'absence d'inclinaison), l'accélération est comprise entre (vers le bas) 0g -> - 1g ou entre (vers le haut) 0g-> 1g selon l'angle sous lequel l'appareil est actuellement. Ci-dessous, une image qui, espérons-le, efface l'idée.
L'appareil sera situé dans une voiture et devrait mesurer l'accélération lorsque la voiture ralentit (frein). Cependant, si l'appareil est déjà en inclinaison, l'accéléromètre mesurera une certaine accélération provoquée par l'inclinaison, ce qui rend difficile de dire si l'appareil a vraiment une certaine accélération ou est-ce juste l'inclinaison qui provoque l'accélération.
Les axes X et Y produisent 0g et l'axe Z est de 1g lorsque l'appareil n'a pas d'inclinaison et est sur une surface plane. L'inclinaison entraîne la lecture de l'axe X vers 1g si l'inclinaison est vers le haut et vers -1g vers le bas. Le + -1g est atteint lorsque l'appareil est à 90 * degrés de la position d'origine
J'ai réfléchi à la façon d'éliminer cette accélération causée par l'inclinaison et de mesurer uniquement l'accélération réelle de l'appareil, mais je ne peux tout simplement pas penser à sortir de ce problème avec les données suivantes que je peux produire.
Fondamentalement, je pense que si je pouvais seulement mesurer l'accélération de l'axe X (image) même si le capteur est incliné comme sur l'image.
J'espère que ce message n'est pas trop difficile à comprendre à cause de mes compétences en anglais et de la façon dont j'essaie d'expliquer mon problème.
la source
Réponses:
Seulement un croquis d'une solution.
Tenez compte des 3 axes.
L'accélération due à la gravité, quelle que soit l'inclinaison, sera toujours de 1G, en tant que somme vectorielle de X, Y, Z, quelle que soit l'inclinaison. Vous pouvez imaginer l'accélération au repos ou le mouvement stationnaire comme un point sur une sphère de rayon 1G. (Si vous êtes parfaitement horizontal, ce point sera (0, 0, -1) c'est à dire directement en dessous de vous).
L'accélération due au freinage déformera la sphère elle-même; la somme vectorielle de X, Y, Z ne sera plus 1G.
Donc
À moins que vous ne tourniez ou dérapiez également, vous avez donc besoin des entrées du volant et de l'ABS pour être sûr; cela devient un problème de fusion de données. Cette approche fournira une estimation de l'accélération. Pour vérifier et affiner cette estimation, combinez-la avec d'autres sources de données (également peu fiables), comme dans la réponse de Phil Frost, en utilisant un filtre de Kalman.
la source
Votre principale erreur est de ne pas traiter l'accélération comme un vecteur unique. Lorsque la voiture est au repos, ce vecteur sera toujours de 1 g vers le haut. Ne regardez pas seulement la composante X des données brutes de l'accéléromètre. Faites le vrai calcul vectoriel.
Non, c'est le point. Ce que vous dites peut être vrai pour la composante X de la sortie de l'accéléromètre, mais ce n'est pas vrai pour l'accélération lorsque la voiture est au repos.
L'accélération mesurée idéale sera toujours l'accélération réelle de la voiture (par rapport à la terre), plus l'accélération de 1 g due à la gravité. Ce dernier est toujours dans le sens ascendant. Si vous connaissez l'orientation de la voiture, vous pouvez soustraire ces 1 g dus à la gravité pour trouver l'accélération que vous recherchez réellement.
Notez qu'il y a une erreur considérable dans de telles lectures, en particulier des capteurs MEMS bon marché. Alors que vous devriez être en mesure de vous faire une bonne idée des événements à court terme comme une accélération ou un freinage brusque, ces données sont loin d'être suffisantes pour effectuer au mieux la navigation inertielle pendant plus de quelques secondes.
la source
Comme d'autres réponses l'ont indiqué, l'accéléromètre fournit un vecteur tridimensionnel qui est la somme de la gravité et des autres accélérations sur la voiture en raison du moteur, des freins ou d'autres forces agissant sur la voiture. Votre objectif est alors de soustraire l'accélération gravitationnelle de la sortie de l'accéléromètre pour trouver les autres forces restantes.
Pour une meilleure précision, vous ne pouvez pas supposer que la gravité est toujours "en baisse" par rapport à l'accéléromètre. Par exemple, la voiture peut être sur une colline. Tous vos calculs doivent être effectués avec des mathématiques vectorielles en trois dimensions, et vous devez avoir une estimation de l'orientation de la voiture afin de connaître la direction du vecteur de gravité à soustraire.
Un filtre de Kalman est une approche courante ici. L'idée est de prendre toutes les données dont vous disposez qui pourraient modifier l'orientation de la voiture, puis effectuer une moyenne pondérée des mesures, combiner cela avec ce que vous savez sur la physique agissant sur la voiture, pour arriver à une estimation probabiliste de la nouvelle orientation de la voiture et sens "descendant".
Plus vous disposez de données et plus vous pouvez modéliser avec précision la physique de la voiture, plus cette estimation peut devenir précise.
Par exemple, si vous avez un gyroscope et que vous mesurez le tangage de la voiture, vous pouvez prédire que le vecteur de gravité va tourner vers l'arrière de la voiture. À court terme, disons que lorsque la voiture vient de commencer à monter une colline, cela peut aider le vecteur de gravité à adopter rapidement la bonne orientation.
Vous pouvez également supposer que la voiture ne freine ni n'accélère en moyenne. Ainsi, une sortie filtrée passe-bas de l'accéléromètre pourrait alimenter l'estimation de la direction "vers le bas". Cela fournit une mesure à long terme non soumise à la dérive inertielle.
La combinaison des données de l'accéléromètre et du gyroscope pour estimer la direction de la gravité fournit ainsi une estimation plus précise que l'une ou l'autre mesure seule.
Vous pouvez en outre intégrer ce que vous savez de l'enveloppe opérationnelle possible du véhicule. Par exemple, la voiture ne peut pas monter ou descendre des collines trop raides, donc lorsque l'accéléromètre indique de tels angles extrêmes, vous pourriez la peser moins, en supposant que la majeure partie de sa sortie est due aux freins ou au moteur, pas à la gravité.
Vous savez si le conducteur freine, cela va déplacer le vecteur d'accélération, et vous pouvez le soustraire du composant "down" estimé.
Ou si vous avez des données GPS et cartographiques, vous pouvez incorporer une estimation de la pente de la voiture en fonction de l'emplacement. Si vous disposez de données de haute précision, vous savez peut-être précisément sur quelle colline se trouve le véhicule. Si vous ne disposez que de données de faible précision, cela peut toujours être utile. Par exemple, si la voiture se trouve au Kansas, les collines sont peu probables. Si la voiture est à San Francisco, les collines sont plus probables et vous pourriez donner à l'accéléromètre moins de poids.
Si vous avez des données sur la consommation de carburant et la vitesse, sachant que plus de carburant est consommé en montée, vous pouvez l'utiliser pour estimer la montée ou la descente de la voiture en fonction de l'efficacité énergétique.
Etc. Plus vous en savez, meilleure sera votre estimation.
la source
Vous auriez besoin d'un algorithme de fusion et utiliser des accéléromètres 3D, des capteurs 3D-Gyro et 3D-Magnetic. Avec cet algorithme de fusion, vous obtenez l'attitude, la gravité de la terre sert de référence pour détecter l'horizon - angles de tangage / lacet / roulis. Les deux autres capteurs mag / gyro aident à filtrer le mouvement dynamique. Comme votre voiture tournera également à gauche / droite, .. la force centrifuge sera ajoutée. Une fois que vous avez l'attitude, vous pouvez soustraire le vecteur gravitationnel et démonter l'accélération résultante dans les trois axes.
la source
Comme approche très basique, vous pouvez utiliser un filtre passe-haut pour éliminer la partie constante de l'accélération (qui correspond à la gravité) et garder la partie variable qui est due à la dynamique de la voiture. Supposons que ce
raw
soit un vecteur contenant vos mesures X, Y et Z, etacc
soit l'accélération de la voiture sans gravité. alorsLes composants individuels de
acc
sont toujours affectés par l'inclinaison, mais la norme vectorielle n'est pas:Bien sûr, cette méthode n'est pas très précise, surtout si l'inclinaison change à un rythme élevé. C'est à peu près autant que les mathématiques naïves vous mènent. Si vous avez besoin d'une meilleure précision, découvrez comment utiliser un filtre de Kalman.
la source
La réponse réside dans la définition précise du "ralentissement" .
De votre question:
Cependant, ralentir n'est pas synonyme de freinage . Il existe deux définitions possibles:
Cette différence est importante en montée et en descente. Dans les descentes, la vitesse de la voiture augmentera si les freins ne sont pas appliqués. Et en montée, la vitesse peut ralentir même sans freiner.
Il s'avère que la détection de 1. est beaucoup plus difficile que 2. Définissons les axes par rapport à l'orientation de la voiture: X: direction avant-arrière, Y: direction gauche-droite, Z: direction haut-bas. Tous les axes alignés sur la voiture.
Solutions:
Pour la définition 1., la meilleure approche consiste à supposer que la vitesse de la voiture ne peut changer que dans la direction X. Alors l'accélération mesurée a = g + v où g est l'accélération due aux forces contrant la gravité, et v est l'accélération due au changement de vitesse. Vous pouvez supposer que la longueur de g est toujours égale à 9,8 m / s² et que v est toujours dans la direction X. Donc (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z) , ce qui donne v_x = a_x - sqrt ((9.8m / s²) ² - g_y² - g_z²) . Cela ne fonctionnera que tant que | v | est inférieur à | g |, ou en d'autres termes, l'accélération due au moteur ou aux freins est inférieure à 1G. Cela devrait être une hypothèse assez sûre à moins que votre voiture n'ait un propulseur de fusée.
Pour la définition 2., vous pouvez simplement prendre la lecture de l'axe des x directement. Si la voiture n'accélère pas ou ne freine pas, la seule force contre la gravité qui agit sur elle est la force normale de la surface de la route. Cette force est toujours dans la direction z par rapport à la voiture, donc elle ne change pas la lecture de l'axe x. Les freins et le moteur n'agissent que dans la direction x et seront directement visibles dans cette lecture.
la source
Il semble que vous utilisiez un appareil "overkill" pour votre application. Vous devez utiliser un appareil qui ne mesure que l'accélération x & y, de cette façon, l'inclinaison n'aura aucun effet mesurable. Bien que l' accélération totale puisse être plus petite ou plus grande, en raison de l'inclinaison, l'appareil ne mesurera que les composantes x et y de l'accélération dans l'avion dans lequel se trouve le véhicule.
la source