Tôi có một ứng dụng ghi lại các góc khi người dùng đang đi quanh một vật thể, trong khi thiết bị trỏ (tốt nhất) ở giữa đối tượng. Góc được đặt lại trên lệnh của người dùng - do đó thái độ tham chiếu được đặt lại.Thay đổi thái độ - góc và trục - toán học quaternion
Sử dụng Góc Euler sản xuất khóa Gimbal, vì vậy tôi hiện đang sử dụng quaternion và tính góc theo cách này:
double angleFromLastPosition = acos(fromLastPositionAttitude.quaternion.w) * 2.0f;
này cho ra độ chính xác tốt và nó hoạt động hoàn hảo NẾU sân và yaw của thiết bị không thay đổi. Nói cách khác, khi góc hiển thị 360 độ, tôi kết thúc ở cùng một vị trí với phần đầu của vòng tròn.
Bài toán 1: nếu thiết bị yaw và pitch thay đổi nhẹ (người dùng không chỉ trực tiếp vào tâm của đối tượng), do đó, hãy sử dụng angleFromLastPosition. Tôi hiểu phần này, vì công thức góc của tôi chỉ cho thấy góc ở giữa hai thái độ thiết bị trong không gian 3D.
Kịch bản:
- tôi đánh dấu sự bắt đầu của thái độ luân chuyển và bắt đầu di chuyển trong một vòng tròn xung quanh đối tượng trong khi chỉ vào trung tâm
- tôi dừng lại ở, nói rằng, 45 độ và thay đổi độ cao của các thiết bị bằng cách chỉ nó cao hơn hoặc thấp hơn. Góc thay đổi tương ứng.
- Điều tôi muốn thấy là: góc nằm ở 45 độ, ngay cả khi thay đổi độ cao hoặc thay đổi.
Câu hỏi 1 là, làm cách nào tôi có thể tính toán cuộn của thiết bị bằng cách sử dụng quaternions và bỏ qua các thay đổi trong hai trục khác (ít nhất là trong một số độ hợp lý).
Vấn đề 2: nếu tôi xoay một chút và sau đó đóng băng thiết bị hoàn toàn (trên chân máy để không rung chút nào), góc AngleFromLastPosition trôi ở tốc độ 1 độ trong khoảng 10-20 giây và dường như không là tuyến tính. Nói cách khác, nó trôi nhanh vào lúc đầu, sau đó làm chậm đáng kể. Đôi khi tôi không bị trôi dạt chút nào - góc là đá cứng nếu thiết bị dừng. Và điều này làm tôi mất đi sự hiểu biết những gì đang xảy ra.
Câu hỏi 2, những gì đang xảy ra ở đây và làm thế nào tôi có thể xử lý sự trôi dạt?
Tôi đã đi qua một số bài viết và hướng dẫn, và toán học bậc bốn là ngoài tôi vào lúc này, hy vọng ai đó sẽ có thể giúp đỡ với một mẹo, liên kết, hoặc vài dòng mã.
có thể trôi dạt có liên quan đến [Drifting Yaw] (http://stackoverflow.com/questions/13613239/drifting-yaw-angle-after-moving-fast?rq=1)? nếu có, việc tìm kiếm công thức cho câu hỏi 1 sẽ xử lý cả hai vấn đề :) –
Nếu bạn đang sử dụng CMAttitude, có lý do cụ thể nào mà bạn không thể sử dụng từLastPositionAttitude.roll để có được cuộn thiết bị không? Tôi đánh giá cao điều này là không sử dụng tài sản quaternion, nhưng nó có để được sử dụng! –
có, bắt đầu với điều đó - bằng cách sử dụng góc euler sản xuất một khóa gimbal và mất độ tự do. quay hoàn toàn không phải là 360 độ khi thiết bị không được căn chỉnh với trục Z. ít nhất đây là sự hiểu biết của tôi về hiệu ứng .... –