• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalibracja akcelerometru w Unity

0 głosów
422 wizyt
pytanie zadane 29 czerwca 2016 w C# przez Paweł Jamroziak Użytkownik (520 p.)

Cześć, robię prosty port tej gry (LINK), na telefon. Chce dodawać z czasem nowe funkcje i dodatki. Problem pojawia się przy kalibracji akcelerometru. 

Uznałem na samym początku, że odejmę od aktualnej wartości, wartość początkową. To działa, ale ma niestety złe skutki. Unity odczytuje wartości z akcelerometru od 1 do -1. (zakładam, że wartość początkowa wynosi (0,0,0.5) Gdy wartości wynoszą (1,0,-1) i odejmę to wychodzi (1,0, -0,5) przez co kulka jest o połowę za wolna, gdy dam w przeciwną stronę, to jest o połowa za szybka. 

Nie wiem jak to rozwiązać.... Pod spodem dałem skrypt.

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour {

	private Rigidbody rb;

	public float speed = 100;

	private float moveX;
	private float moveY;

	private float moveXs;
	private float moveYs;

	private Vector3 movement;


	// Use this for initialization
	void Start () {

		rb = GetComponent<Rigidbody>();

		moveXs = Input.acceleration.x;
		moveYs = Input.acceleration.y;


	
	}
	
	// Update is called once per frame
	void Update () {
			

			moveX = (Input.acceleration.x - moveXs);
			moveY = (Input.acceleration.y - moveYs);

			movement = new Vector3 (moveX, 0.0f, moveY);

		Debug.Log (movement);

			rb.AddForce (movement * speed);



	}
}

 

komentarz 2 lipca 2016 przez obl Maniak (51,300 p.)

Mam takie pytanie, a zasadniczo dwa pytania:

1) Input.acceleration jak rozumiem jest wektorem opisującym przyspieszenie?

2) Jeżeli odpowiedź na pierwsze jest twierdząca to: dlaczego od przyspieszenia odejmujesz przemieszczenie i oczekujesz poprawnego wyniku? Jak można od wielkości wyrażonej w jednostkach przyspieszenia odjąć wielkość wyrażoną w  jednostkach przemieszczenia czy też położenia?

komentarz 8 lipca 2016 przez Paweł Jamroziak Użytkownik (520 p.)
Wybacz że nie przekażę Ci tego w taki sposób jak ty mi. Myślę że jest to wektor położenia. Czujnik w telefonie, jest domyślnie skalibrowany leżąc w poziomie. Odejmujac wartość początkowa od aktualnej uzyskuje nie pełna kalibracje, bo jednak zakres mi się przesuwa. Nie wiem jak mogę to zrobić inaczej
komentarz 8 lipca 2016 przez obl Maniak (51,300 p.)

Nie znam się na urządzeniach mobilnych, ale czujnik o którym się rozpisujesz jest raczej akcelerometr wiesz co to jest? To jest urządzenie do pomiaru przyspieszenia. W tym przypadku przyspieszenia ziemskiego względem pochylenia się płaszczyzny twojego urządzenia. Taki akcelerometr prawdopodobnie generuje wektor, którego wartość nigdy nie wykracza poza zakres 0 - 1. Gdzie 0 jest wtedy, gdy tablet, telefon czy inne ustrojstwo jest ustawione płaszczyzną prostopadle do wektora przyspieszenia ziemskiego. Natomiast 1 będziesz miał gdy płaszczyzna twojego ustrojstwa będzie przebiegać przez tenże wektor przyspieszenia ziemskiego.

Aby uzyskać prawidłową wartość przyspieszenia powinieneś je przemnożyć przez g czyli przez 9,80165 czego? m/s^2.

A teraz fizyka:

Droga po czasie w ruchu jednostajnie zmiennym (szkoła podstawowa - przynajmniej za moich czasów):

s(t) = 1 / 2 * a * t ^ 2 + V0 * t + S0

gdzie a - wektor przyspieszenia

V0 - prędkość początkowa

S0 - położenie początkowe

t - to jest przedział czasowy wyrażony jednostkach czasu np. sekundach

jednostki sprawdźmy bo może ja głupoty piszę:

s(t) i s0 to wektory położenia więc w metrach powinny być

V0 - to prędkość więc w m / s

a - to przyspieszenie więc w m / s ^ 2

t - czas więc w sekundach

[m] = [m / s ^ 2] * [s ^ 2] + [m / s] * [s] + [m]

Jak widać, jednostki się zgadzają. I tak się liczy przemieszczenie twojej kulki.

Dodatkowo powinieneś jeszcze liczyć prędkość chwilową:

V0 = a * t + V0

Na początku twoja kulka się nie przemieszcza, prędkość początkowa to 0 a jak telefon jest poziomo ustawiony to i a jest równe 0 więc kulka nawet nie zmieni swojego położenia ani prędkości. Jak przechylisz telefon to akcelerometr poda jakieś wartości przyspieszenia i wtedy zaczyna się obliczanie w krokach oczywiście: przemieszczenia i aktualnej prędkości chwilowej z uwzględnieniem przedziału czasu t.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–3 głosów
2 odpowiedzi 442 wizyt
pytanie zadane 9 października 2021 w C# przez xkamiz Użytkownik (500 p.)
0 głosów
1 odpowiedź 278 wizyt
pytanie zadane 2 września 2021 w C# przez Jakusss Początkujący (410 p.)
0 głosów
0 odpowiedzi 572 wizyt
pytanie zadane 28 sierpnia 2021 w C# przez Jakusss Początkujący (410 p.)

93,762 zapytań

142,717 odpowiedzi

323,368 komentarzy

63,359 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...