2010-03-27 39 views
6

có ai đã lập trình một la bàn iphone tiêu đề nghiêng đền bù?iphone la bàn nghiêng bồi thường

tôi đã có một số cách tiếp cận, nhưng một số trợ giúp hoặc giải pháp tốt hơn sẽ thật tuyệt!

FIRST i xác định véc-tơ Ev, được tính từ sản phẩm chéo của Gv và Hv. Gv là một vector trọng lực tôi xây dựng từ các giá trị gia tốc và Hv là một vector nhóm đã xây dựng các giá trị từ kế. Ev đứng vuông góc trên Gv và Hv, vì vậy nó đang hướng tới horizonatl Đông.

SECOND tôi xác định Rv vectơ, được tính từ sản phẩm chéo Bv và Gv. Bv là vector tìm kiếm của tôi và nó được định nghĩa là [0,0, -1]. Rv vuông góc với Gv và Bv và luôn hiển thị bên phải.

THIRD góc giữa hai vectơ này, Ev và Rv, phải là tiêu đề đã sửa của tôi. để tính góc i xây dựng sản phẩm chấm và các arcos.

phi = arcos (Ev * Rv/| Ev | * | Rv |)

Về mặt lý thuyết nó phải làm việc, nhưng có lẽ tôi phải bình thường hóa các vectơ ?!

Có ai có giải pháp cho việc này không?

Xin cảm ơn, m01d

Trả lời

3

Yep. Bạn chắc chắn phải bình thường hóa. Đây là mã của tôi mà tôi sử dụng để trích xuất hướng của thiết bị. Lực hấp dẫn thu được khi x, y, z của gia tốc và la bàn thu được từ x, y, z của hàm tiêu đề

gravity.normalize(); compass.normalize(); compassEast = gravity.cross (la bàn);
compassEast.normalize();
compassNorth = compassEast.cross (gravity); compassNorth.normalize();

Hãy cho tôi biết nếu bạn cần mã đầy đủ. Ngoài ra, đối với những người havnt chưa nhìn thấy con quay hồi chuyển iphone 4s trong hành động: tuyệt vời của nó! Tôi trao đổi các đầu vào ở trên để trọng lực và la bàn cho các tương đương từ con quay hồi chuyển và kết quả là ổn định và trơn tru và tuyệt vời :) Go Apple.

+0

Có thể xem mã nguồn không? Nó làm tôi tò mò. Bạn có thể gửi mã nguồn tới [email protected] không? – fyasar

+0

Tôi cũng quan tâm đến mã. Email của tôi: ellen.sundh [at] gmail.com Xin cảm ơn! –

0

có, tôi đã làm như mô tả ở trên. nhưng kết quả không chính xác lắm. tôi nghĩ rằng với các giá trị gia tốc mượt mà hơn nó sẽ hoạt động theo cách đó. bởi vì điều này tôi đã chọn để làm bù nghiêng bằng cách cộng/trừ các giá trị gia tốc của trục tương ứng đến/từ các giá trị la bàn.

Đây iss mã của tôi cho các giải pháp trên, nhưng nó không phải là một giải pháp làm việc cuối cùng:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{ 
if (newHeading != nil) { 
float Ax = accelerationValueX; 
float Ay = accelerationValueY; 
float Az = accelerationValueZ; 
float filterFactor = 0.2; 
Mx = [newHeading x] * filterFactor + (Mx * (1.0 - filterFactor)); 
My = [newHeading y] * filterFactor + (My * (1.0 - filterFactor)); 
Mz = [newHeading z] * filterFactor + (Mz * (1.0 - filterFactor)); 

float counter = ( -pow(Ax, 2)*Mz + Ax*Az*Mx - pow(Ay, 2)*Mz + Ay*Az*My); 
float denominator = (sqrt(pow((My*Az-Mz*Ay), 2) + pow((Mz*Ax-Mx*Az), 2) + pow((Mx*Ay-My*Ax), 2)) * sqrt(pow(Ay, 2)+pow(-Ax, 2))); 
headingCorrected = (acos(counter/denominator)* (180.0/M_PI)) * filterFactor + (headingCorrected * (1.0 - filterFactor)); 
} 
... 
} 
Các vấn đề liên quan