장치가 기울어 졌을 때 가속


13

현재 상시 온 3D 가속도계 (스케일 + -2g 사용) 및 3D 자이로 스코프 (스케일 + -250g 사용)-센서를 사용하는 장치에서 작업하고 있습니다.

가능한 모든 벡터 (X, Y, Z)와 가속도 (g 's) 및 각속도 (dps) 및 장치가 현재있는 각도를 읽을 수 있습니다. 그러나 내 문제는 장치가 기울어있을 때 (틸트가 없을 때 0g) 가속도가 장치의 현재 각도에 따라 0g->-1g 사이 또는 0g-> 1g 사이입니다. 아래는 희망적으로 아이디어를 지우는 그림입니다.

희망적으로 이것은 도움이됩니다

장치는 차 안에 위치하며 차가 느려지면 (브레이크) 가속도를 측정해야합니다. 그러나 장치가 이미 기울어 져 있으면 가속도계가 기울기를 유발하는 일부 가속도를 측정하여 장치에 실제로 가속도가 있는지 또는 가속을 유발하는 기울기인지 알기가 어렵습니다.

X 및 Y 축은 0g을 생성하고 장치에 기울기가없고 평평한 표면에있을 때 Z 축은 1g입니다. 기울기는 기울기가 위쪽을 향한 경우 X 축 판독 값이 1g을 향하고 아래쪽을 향한 경우 -1g이됩니다. 기기가 원래 위치에서 90 *도에있을 때 + -1g에 도달

기울기를 유발하는 가속을 제거하고 장치의 실제 가속 만 측정하는 방법에 대해 머리를 숙이고 생각했지만 생성 할 수있는 다음 데이터 로이 문제에서 벗어날 수는 없습니다.

기본적으로 센서가 그림과 같이 기울어 져 있어도 X 축 가속 (그림) 만 측정 할 수 있다고 생각합니다.

이 메시지가 영어 실력과 내 문제를 설명하려는 방식 때문에 너무 이해하기 쉽기를 바랍니다.


2
흥미로운 가속이 발생하지 않는 시점을 측정하고 비교 지점으로 사용하는 것이 어떻습니까?
PlasmaHH

나는 그것이 효과가 없을 것이라고 생각합니다. 장치가 여전히 완벽하면 X 및 Y 축은 0g이고 Z 축은 1g입니다. 기울기는 내가 언급 한 것처럼 기울기에 따라 X 축 판독 값이 -1g에서 1g이되도록합니다. 제동으로 인해 X 축 측정 값이 감소합니다 (음의 가속으로 자동차 속도가 느려짐). 예를 들어 장치가 이미 아래쪽으로 기울어 져 있으므로 0g-(-1g) 사이에 있으면 제동으로 인한 가속이 아님을 어떻게 알 수 있습니까?
jumbojohn

왜 Y 축 대신 세 축의 총 가속도를 계산하지 않습니까? 나는 그것이 세 축을 모두 고려하는 기본이라고 생각합니다!? 이와 같은
charansai

LSM6DSM에는 자력계가 없습니다. 이 정보는 어디서 얻었습니까? 실제로 LSM6DSM 자이로 / 가속도계 LIS3MDL 자력계 가 모두있는 ST의 X-NUCLEO-IKS01A1 보드를 사용하고 있다고 생각합니다 .
MrGerber

@MrGerber 감사합니다. 센서의 데이터 시트를 잘못 읽는 것이 좋지 않았습니다.
jumbojohn

답변:


18

솔루션의 스케치 만

3 개의 축을 모두 고려하십시오.

기울기와 상관없이 중력으로 인한 가속은 기울기에 관계없이 항상 X, Y, Z의 벡터 합으로 1G가됩니다. 반경이 1G 인 구의 점으로 정지 상태 또는 정지 동작의 가속도를 나타낼 수 있습니다. (완전히 수평 인 경우 해당 지점은 (0, 0, -1) 즉 바로 아래에 있습니다).

제동으로 인한 가속은 구 자체를 왜곡시킵니다. X, Y, Z의 벡터 합은 더 이상 1G가 아닙니다.

그래서

=엑스2+와이2+2

총 가속도를 제공합니다. 그것이 G와 같다면 당신은 쉬고 있습니다; 그렇지 않으면 가속하고 는 G의 벡터 합과 실제 가속입니다.

선회 또는 미끄럼 운동을하지 않는 한 핸들과 ABS의 입력이 필요합니다. 그것은 데이터 융합 문제가됩니다. 이 접근법은 가속도 추정치를 제공합니다. 이 추정값을 온전한 상태로 확인하고 세분화하려면 Phil Frost의 답변에서와 같이 Kalman 필터를 사용하여 다른 (신뢰할 수없는) 데이터 소스와 결합하십시오.


실제로 나는 전에 가속도계 / 자이로 스코프와 함께 일한 적이 없으므로 큰 그림은 이러한 것들이 어떻게 작동하는지 완전히 명확하지 않으며 수학은 가장 강력한 기술 중 하나가 아니므로 팁 / 설명을 고맙게 생각합니다.
jumbojohn

정확하지만 오류 마진이 중요하다는 강한 의혹이 있습니다. 또한 수직 가속이 구를 왜곡시키는 것 (예 : 속도 범프, 움푹 들어간 곳)을 잊지 마십시오. 따라서 응용 분야에 따라 해결해야 할 수도 있습니다.
Chris H

그러나 당신이 충분히 열심히 보면 중력은 일정하지 않습니다 . 미국에서 가장 높은 도로는 $ g $를 약 0.1 % 만 줄이지 만 극점에서 적도로 이동하면 0.5 % 차이가납니다. 지질학은이 정도의 차이를 만들 수도 있습니다 . 아마도 게임 체인저는 아니지만 캘리브레이션을 무시하지 마십시오
Chris H

엔진을 켜기 전에 위치에 따라 G 구의 반경 만 수정하거나 측정해야합니다. 그것은 문제가 아닙니다. 나는 아마도 스키드와 스티어링과 함께 범프를 처리해야한다는 데 동의합니다.
Brian Drummond

엔진을 시동하기 전에 캘리브레이션하는 것은 제가 생각했던 것입니다. 빌더가 최종 사용자가 아닌 경우 신속하게 교정 할 수있었습니다.
Chris H

9

주요 실수는 가속을 단일 벡터로 취급하지 않는 것입니다. 자동차가 정지 상태이면 그 벡터는 항상 1g 이상이됩니다. 원시 가속도계 데이터의 X 구성 요소 만 보지 마십시오. 실제 벡터 수학을하십시오.

그러나 내 문제는 장치가 기울어있을 때 (틸트가 없을 때 0g) 가속이 (아래로) 0g->-1g 사이 또는 (위로) 0g-> 1g 사이라는 것입니다.

아니요. 요점입니다. 말한 내용은 가속도계 출력의 X 구성 요소에 해당 될 수 있지만 자동차가 정지 상태 일 때 가속에 적용되는 것은 아닙니다.

이상적인 측정 가속도는 항상 자동차의 실제 가속도 (지구 대비)와 중력으로 인한 1g 가속도입니다. 후자는 항상 위쪽 방향입니다. 자동차의 방향을 알고 있다면 중력으로 인해이 1g을 빼서 실제로 원하는 가속도를 찾을 수 있습니다.

이러한 판독, 특히 저렴한 MEMS 센서의 경우 상당한 오류가 있습니다. 하드 가속 또는 하드 제동과 같은 단기 이벤트에 대한 좋은 아이디어를 얻을 수 있어야하지만이 데이터는 몇 초 이상 관성 항법을 수행 할만큼 충분히 좋은 곳은 없습니다.


중력으로 인한 (측정 된) 가속도가 "위"방향이 아닙니까? 에서와 같이, 지구의 중력 상태에서 장치에서 얻을 수있는 판독 값은 중력장을 벗어나지 만 (장치 기준) "위쪽"방향으로 가속하는 것과 동일합니까?
psmears

@psmears : 그렇습니다. 힘은 아래쪽이지만 가속은 위쪽입니다. 결정된.
Olin Lathrop

5

다른 답변에서 언급했듯이 가속도계는 엔진, 브레이크 또는 자동차에 작용하는 다른 힘으로 인한 자동차의 중력 및 기타 가속도의 3 차원 벡터를 제공합니다. 그런 다음 목표는 가속도계 출력에서 ​​중력 가속도를 빼서 나머지 다른 힘을 찾는 것입니다.

최고의 정확도를 위해 가속도계를 기준으로 중력이 항상 "아래로"있다고 가정 할 수 없습니다. 예를 들어, 차가 언덕 위에있을 수 있습니다. 모든 계산은 3 차원 벡터 수학으로 수행해야하며 차의 방향을 추정하여 중력 벡터의 방향을 빼야합니다.

칼만 필터 여기에 일반적인 방법이다. 자동차의 방향을 바꿀 수있는 모든 데이터를 취한 다음 가중 평균 측정을 수행하고 자동차에 작용하는 물리학에 대해 알고있는 것과 결합하여 자동차의 새로운 방향과 "다운"

데이터가 많을수록 자동차의 물리학을 더 정확하게 모델링 할 수있을수록이 추정치가 더 정확해질 수 있습니다.

예를 들어 자이로가 있고 자동차의 피치를 측정하면 중력 벡터가 자동차의 후면을 향하여 회전 할 것으로 예상 할 수 있습니다. 단기적으로 자동차가 언덕을 오르기 시작했을 때, 이것은 중력 벡터가 올바른 방향을 신속하게 가정하는 데 도움이 될 수 있습니다.

자동차가 평균적으로 제동 또는 가속되지 않을 것이라고 가정 할 수도 있습니다. 따라서, 가속도계의 저역 통과 필터링 된 출력은 "하향"방향이 무엇인지 추정 할 수있다. 이것은 관성 드리프트의 영향을받지 않는 장기 측정을 제공합니다.

가속도계와 자이로 스코프의 데이터를 결합하여 중력 방향을 추정하므로 어느 쪽 측정보다 정확한 측정이 가능합니다.

차량의 가능한 작동 범위에 대해 알고있는 것을 추가로 통합 할 수 있습니다. 예를 들어, 차량은 너무 가파른 언덕을 오르 내릴 수 없으므로 가속도계가 이러한 극단적 인 각도를 표시 할 때 대부분의 출력이 중력이 아닌 브레이크 또는 엔진 때문이라고 가정 할 때 무게를 줄일 수 있습니다.

운전자가 브레이크를 밟으면 가속 벡터가 이동하고 추정 된 "하강"구성 요소에서이를 뺄 수 있습니다.

또는 GPS 및지도 데이터가있는 경우 위치를 기준으로 자동차의 경사 추정값을 통합 할 수 있습니다. 정확도가 높은 데이터가 있다면 차량이 어떤 언덕에 있는지 정확하게 알 수 있습니다. 정확도가 낮은 데이터 만있는 경우에도 여전히 유용 할 수 있습니다. 예를 들어, 자동차가 캔자스에 있으면 언덕이 없을 것입니다. 자동차가 샌프란시스코에있는 경우 언덕이 더 많으며 가속도계의 무게를 줄일 수 있습니다.

연료 소비 및 속도에 대한 데이터가있는 경우, 오르막길에서 더 많은 연료가 소비된다는 것을 알고 있으면이를 사용하여 연료 효율에 따라 차가 올라가거나 내려 오는 것을 추정 할 수 있습니다.

등등. 더 많이 알수록 더 나은 견적을 얻을 수 있습니다.


3

융합 알고리즘이 필요하고 3D 가속도계, 3D 자이로 및 3D 자기 센서를 사용해야합니다. 이 융합 알고리즘을 사용하면 자세를 파악할 수 있으며, 지구 중력은 수평선-피치 / 요 / 롤 각도를 감지하는 데 도움이됩니다. 다른 두 센서 mag / gyro는 동적 움직임을 필터링하는 데 도움이됩니다. 자동차가 좌 / 우로 회전하면 원심력이 추가됩니다. 자세를 취하면 중력 벡터를 빼고 세 축 모두에서 결과 가속을 분해 할 수 있습니다.


3

매우 기본적인 접근 방식으로, 고역 통과 필터를 사용하여 가속의 일정한 부분 (중력에 해당)을 제거하고 가변 부분을 자동차 역학으로 인한 것으로 유지할 수 있습니다. rawX, Y 및 Z 측정 값을 포함하는 벡터이고 acc중력없는 자동차 가속 이라고 가정 합니다 . 그때

void correct_for_gravity(float *raw, float *acc)
{
   const float k = 0.9;
   static float gravity[3];

   gravity[0] = k * gravity[0] + (1 - k) * raw[0];
   gravity[1] = k * gravity[1] + (1 - k) * raw[1];
   gravity[2] = k * gravity[2] + (1 - k) * raw[2];

   acc[0] = raw[0] - gravity[0];
   acc[1] = raw[1] - gravity[1];
   acc[2] = raw[2] - gravity[2];
}

의 개별 구성 요소 acc는 여전히 기울기에 영향을 받지만 벡터 표준은 영향을받지 않습니다.

norm_acc = sqrt(acc[0]*acc[0] + acc[1]*acc[1] + acc[2]*acc[2]);

물론,이 방법은 특히 기울기가 높은 속도로 변하는 경우 매우 정확하지 않습니다. 이것은 순진한 수학이 당신에게 도달하는 한입니다. 더 나은 정밀도가 필요한 경우 Kalman 필터 사용 방법을 배우십시오.


1

답은 "느리게" 의 정확한 정의에있다 있습니다.

귀하의 질문에서 :

장치는 차 안에 위치하며 차가 느려질 때 (브레이크) 가속도를 측정해야합니다.

그러나 감속 속도가 제동과 같지는 않습니다 . 가능한 두 가지 정의가 있습니다.

  1. 지면에 대한 자동차의 속도가 감소하고 있습니다.
  2. 자동차 브레이크가 적용되고 있습니다.

이 차이는 오르막길과 내리막 길에서 중요합니다. 내리막 길에서는 브레이크를 적용하지 않으면 차량 속도가 증가합니다. 그리고 오르막길에서는 제동하지 않아도 속도가 느려질 수 있습니다.

1을 감지하는 것이 2보다 훨씬 어렵다는 것이 판명되었습니다. 자동차 방향에 대해 축을 X : 전후 방향, Y : 좌우 방향, Z : 상하 방향으로 정의 해 봅시다. 모든 축은 자동차에 정렬됩니다.

솔루션 :

  1. 정의 1의 경우 가장 좋은 방법은 자동차의 속도가 X 방향으로 만 변경 될 수 있다고 가정하는 것입니다. 그런 다음 측정 된 가속도 a = g + v ( 여기서, g 는 카운터 중력 으로 인한 가속도 , v 는 속도 변화로 인한 가속도)입니다. g 의 길이 가 항상 9.8m / s²이고 v 가 항상 X 방향 이라고 가정 할 수 있습니다 . 따라서 (g_x + v_x, g_y, g_z) = (a_x, a_y, a_z)v_x = a_x-sqrt ((9.8m / s²) ²-g_y²-g_z²) 입니다. 이것은 | v | | g | 미만즉, 모터 또는 브레이크로 인한 가속도가 1G 미만입니다. 자동차에 로켓 부스터가없는 한 꽤 안전한 가정이어야합니다.

  2. 정의 2의 경우 x 축 판독 값을 직접 가져올 수 있습니다. 자동차가 가속 또는 제동을하지 않는 경우, 차량에 작용하는 유일한 중력 카운터 힘은 노면의 수직력입니다. 이 힘은 항상 자동차를 기준으로 z 방향으로되어 있으므로 x 축 판독 값을 변경하지 않습니다. 브레이크와 모터는 x 방향으로 만 작동하며이 판독 값에서 직접 볼 수 있습니다.


0

응용 프로그램에 "오버 킬"장치를 사용하고있는 것 같습니다. x와 y 가속 만 측정하는 장치를 사용해야합니다. 이런 식으로 기울기가 측정 할 수있는 효과가 없습니다. 기울기로 인해 전체 가속이 더 작거나 클 수 있지만 장치는 차량이 있는 평면 에서 가속의 x 및 y 구성 요소 만 측정합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.