현재 각도 계산법에 대해(mpu-6050) + can통신

메카 2016-10-18 (화) 17:32 7년전 7667  
예제 소스는 자이로, 가속도 값이 나오는데요..
이 값들을 시간별로 적분(미분이었나?) 해서 조합하면 현재 각도가 나온다고 하는데요..
자세하게 설명해 주실수 있나요? 아님 관련 자료좀 부탁드립니다..

칼만필터에 대해 간단 명확하게 설명해 주실수 있나요?
평균의 경우에는 모든값을 더한후 더한개수 만큼 나누는거처럼 칼만필터는 제가 아는선으로는 기준값이 있고 그 기준값과의 차이에 따라 값을 반영하고 다른값들이 점점 나올수록 반영도가 높아지는걸로 알고있습니다. 맞는지요?

그리고 i2c센서의 경우 너무나도 느린데요..

i2c센서를 can통신으로 변환하여 사용하더라도 i2c때와 속도가 같을까요?
혹시 can통신으로 사용할수 있는 센서 있을까요?
can통신은 i2c센서로 받은후에 마이컴에서 출력해야 하나요?

그리고 mpu-6050은 분해능이 상당히 떨어지는거 같은데요.. 필터를걸쳐서 원값을 그대로 사용하면 그나마 도움이 되나요?
분해능 좋은센서로는 어던게 있나요?

질문이 너무 많네요.. 죄송합니다.. 궁금한게 좀 많아서요. 시간좀 되시더라도 모두 답변해 주신다면 더 큰선물이 없을 듯합니다.


==================================



예제 소스는 자이로, 가속도 값이 나오는데요..
이 값들을 시간별로 적분(미분이었나?) 해서 조합하면 현재 각도가 나온다고 하는데요..
자세하게 설명해 주실수 있나요? 아님 관련 자료좀 부탁드립니다..

안녕하세요, 현재의 각도를 추정하기 위해서는 ArcTangent를 이용하여 각도를 추정할 수 있습니다. 
이는 가속도 센서를 이용하였을 경우이고요. 이 때, 가속도 센서로부터 각 축에 대한 m/s2값을 먼저 얻으셔야해요. mpu6050의 경우 16384의 크기가 9.8m/s2이 됩니다. 즉, 1m/s2은 16384/9.8의 값이 됩니다. 이렇게 얻은 가속도값은 

pitch = arctan(x_acc / sqrt(y_acc^2+z_acc^2))
roll = arctan(y_acc/ sqrt(x_acc^2+ z_acc^2))
이 됩니다.

출처: W. Y. Wong and M. S. Wong, “Detecting spinal posture change in sitting positions with tri-axial accelerometers,” Gait & Posture 27: 168-171, 2008


칼만필터에 대해 간단 명확하게 설명해 주실수 있나요?
평균의 경우에는 모든값을 더한후 더한개수 만큼 나누는거처럼 칼만필터는 제가 아는선으로는 기준값이 있고 그 기준값과의 차이에 따라 값을 반영하고 다른값들이 점점 나올수록 반영도가 높아지는걸로 알고있습니다. 맞는지요?

칼만필터는 측정된 현재의 값과 예측된 값의 공분산을 통해 보다 나은 미래의 값을 예측하는 것입니다. 이런 모델을 사용하다보면 예상밖의 노이즈 등 범위 밖의 값은 거의 무시하고 지나가는 것처럼 보이게 됩니다. 물론 이런 노이즈도 사용자가 매뉴얼로 만들어준 공분산 값에 따라 노이즈로 인식하지 않고 신호로 인식하기도 하곤 합니다. 따라서 칼만필터를 사용할 때, 시스템에 대한 정확한 정보(고유값등)을 알지 못한다면 사용자가 직접 결과를 보면서 튜닝을 해줘야합니다.


그리고 i2c센서의 경우 너무나도 느린데요..

i2c센서를 can통신으로 변환하여 사용하더라도 i2c때와 속도가 같을까요?
혹시 can통신으로 사용할수 있는 센서 있을까요?
can통신은 i2c센서로 받은후에 마이컴에서 출력해야 하나요?

소위 CAN통신이나 I2C나 속도에서는 그다지 많은 차이가 나지 않는 것 같습니다.
빠른 스피드를 원하신다면 이보다는 아날로그 아웃풋 형태의 센서가 속도 측면에서 이점을 갖을 수 있을 것 같습니다. 다만, 대부분의 IMU는 I2C방식을 선택하고 있기 때문에 자이로와 가속도를 같이 사용하실려면 별도로 구매하여 Fusion하시는 것도 하나의 방법일 것 같네요.

그리고 mpu-6050은 분해능이 상당히 떨어지는거 같은데요.. 필터를걸쳐서 원값을 그대로 사용하면 그나마 도움이 되나요?
분해능 좋은센서로는 어던게 있나요?

저희가 취급하는 MPU6050은 센서들 중 비교적 많이 저렴하면서 많은 사용자들이 만족하고 있는 제품입니다. 보다 분해능이 좋은 센서를 사용하려면 몇백만원이 넘는 센서들도 있습니다만, 최근에는 MPU6050을 이어 MPU9150이 대세를 만드는 것 같습니다.

질문이 너무 많네요.. 죄송합니다.. 궁금한게 좀 많아서요. 시간좀 되시더라도 모두 답변해 주신다면 더 큰선물이 없을 듯합니다.

조금이나마 도움이 되셨으면 좋겠네요.


==================================



답변 정말 감사합니다..

하지만 아직도 약간 각도에 대해 부족한게 있는것 같아 질문드립니다.
pitch하고 roll만 답해 주셨는데요.. 그렇다면 yaw 는 arctan(z_acc/ sqrt(y_acc^2+ x_acc^2))
이렇게 되나요? 그리고 가속도만이 아니라 가속도, 자이로를 융합해보고 싶은데요.
관련자료좀 부탁드립니다.. 혹시 자료있으시다면 지자계(HMC5883l)도 융합해서 좀더 정확한 값을 유추해보고 싶은데요.. 이것도 혹시 공식이 있을까요? 


==================================



답변 정말 감사합니다..

하지만 아직도 약간 각도에 대해 부족한게 있는것 같아 질문드립니다.
pitch하고 roll만 답해 주셨는데요.. 그렇다면 yaw 는 arctan(z_acc/ sqrt(y_acc^2+ x_acc^2))
이렇게 되나요? 그리고 가속도만이 아니라 가속도, 자이로를 융합해보고 싶은데요.
관련자료좀 부탁드립니다.. 혹시 자료있으시다면 지자계(HMC5883l)도 융합해서 좀더 정확한 값을 유추해보고 싶은데요.. 이것도 혹시 공식이 있을까요? 
Yaw방향의 값은 가속도 센서로 구할 수 있는 부분은 아닙니다. 지구 연직방향에 수직한 방향으로의 회전은 자이로센서 값을 적분한 것으로 구할 수 있으며 이는 수치적분 값 자체가 각도가 되기 때문에 말씀드린 별도의 공식은 필요하지 않습니다. 또한, HMC5883I를 이용하여 값을 유추하기 위해서는 angle = atan2(-y, x)를 사용하시면 될 것 같습니다.

==================================



제가 아는 바로는 자이로 가속도 지자기 이세가지를 어떤 공식을 통해 조합하여 최대한 정확하게 각을 계산한다고 알고있는데요. 그냥 세가지센서로 구해서 따로 합쳐야하나요?  그리고 단순 각도가아니라 수직으로 이동시에 가속도 z축을 수직방향으로의 속도 같은것도 구할수있는지요?.

==================================



제가 아는 바로는 자이로 가속도 지자기 이세가지를 어떤 공식을 통해 조합하여 최대한 정확하게 각을 계산한다고 알고있는데요. 그냥 세가지센서로 구해서 따로 합쳐야하나요?  그리고 단순 각도가아니라 수직으로 이동시에 가속도 z축을 수직방향으로의 속도 같은것도 구할수있는지요?.

안녕하세요. 
어떤 공식인지 아신다면 저에게도 가르쳐주심 고마울 것 같습니다.^^
최대한 정확한 각이라는 것은 시스템의 동특성에 상당히 의존하게 되는데, 하나 혹은 몇개의 정형화된 공식에 의해 각이 구해진다면, IEEE의 SIGNAL/SYSTEM 및 CONTROL분야에서 노이즈 컨트롤에 대한 연구를 할 필요가 없겠지요. 
제가 아는 바로는 정확하게 각을 구하기 위해서는 시스템의 특성을 알아야하며 (기본적으로 EIGENVALUE 혹은 SINGULARITY) 이를 모를 경우에는 Machine Learning 혹은 Probability에 근거한 어프로치를 통해서 고안해볼 수 있을 것 같습니다. 
수직으로 이동시의 가속도를 이용하여 속도를 구하기 위해서는 가속도센서가 X, Y축으로부터 진동조차 없도록 구속조건을 만들어준다음에 Z축으로의 가속도를 수치적분하면 구할 수 있겠지만, 이 또한 자이로를 통한 각도 추출에서 오는 DRIFT를 피하기 어렵기 때문에 어려울 것 같습니다. 
도움이 되셨으면 좋겠네요.
메카솔루션 드림.
메카리워즈 Image Map


모바일 버전으로 보기