2013-05-18 2 views
1

Я пытаюсь создать приложение для Android для sphero, где мне нужно остановить sphero в определенных зонах комнаты, и я пытаюсь сделать это с помощью locatorData, используя DeviceMessenger.AsyncDataListener.Sphero: получение данных о местоположении в реальном времени для остановки sphero (android)

Я заметил, что невозможно сказать, где он находится, пока он все еще катится и останавливается, когда он находится в определенном наборе координат, потому что данные поступают с большой задержкой. Он в основном останавливается намного дальше, и я вижу, что координаты растут с задержкой на экране. Я знаю, что сообщение является асинхронным, и я могу как-то потерять некоторые данные во время общения, но я подумал, что, предоставив ему окно вокруг координат, я хочу, чтобы он был таким, что я смогу остановить его более или менее в этой зоне, но это не так. Похоже, это работает прилично.

На данный момент единственное решение, с которым я столкнулся, - это отправить команду рулона, вычислить количество времени, необходимое для катания, чтобы добраться до тех координат, основанных на скорости, и отправить задержанную команду останова, но я не «Мне нравится это решение, и я не думаю, что он будет работать правильно в долгосрочной перспективе, когда я реализую все необходимые функции. У кого-нибудь есть предложения по поводу locatorData и как его использовать в этом случае?

ответ

2

Я использовал «locatorData» раньше, и то, что вы пытаетесь сделать, очень возможно. Есть несколько способов сделать это.

Великая задержка, которую вы испытываете, - это не задержка связи, а тот факт, что датчик локатора обновляется только 10 раз в секунду (10 Гц). Тем не менее, это должно быть более чем достаточно времени, чтобы работать в пределах ваших ограничений по остановке мяча в пределах границы. Еще один фактор: подумали ли вы о том, что шару нужно около 1-2 футов, чтобы остановиться? Это зависит от скорости движения мяча при отправке команды остановки катания.

Один из способов, с помощью которого вы выполняете свою задачу, - это движение мяча на более медленной скорости. Если вы должны ехать на 50% вместо 100%, ваши результаты должны быть более точными. Поскольку временная задержка и остановка задержки оказывают меньшее влияние на точность.

Другим способом, которым вы могли бы это сделать, является выполнение алгоритма прогнозирования. Используя «locatorData», вы знаете, где мяч (x, y), и вы знаете скорость, в которой он движется (vx, vy), вы можете предсказать, где он будет в будущем. Поэтому вы можете отправить команду остановки заранее, когда ваш алгоритм определяет, что мяч будет в вашем пункте назначения через 1-2 секунды.

Возможно, вам захочется заглянуть в команду ConfigureLocator, так как это может сделать начальную точку вашего шара (x = 0, y = 0).

Надеюсь, эта информация поможет!