суббота, 22 ноября 2014 г.

Трекинг человека в пространстве по... параметрам аккумулятора

Не секрет, что мощность передатчика мобильных терминалов может меняться в зависимости от условий связи, чаще всего от расстояния до базовой станции GSM. А раз меняется мощность, то меняется токопотребление от аккумулятора сотового. Зная величину потребления энергии в некой конкретной географической точке, можно говорить о ее идентификации. Имея набор таких точек и сопоставляя их с текущими маршрутами передвижения, уже можно говорить об определении направления движения объекта и его местонахождении с некой вероятностью. Поскольку получение данных об энергопотреблении не требует особых разрешений и API, как в случае геолокации с использованием чипов GPS/Глонасс или таргетинга по Wi-Fi точкам, то выходит технически простой способ слежения за телефонами без оной функции. Правда ведь оригинально?

Довольно серьезную научную работу представили исследователи Yan Michalevsky, Dan Bonehand, AaronSchulman из Стэнфорда и GabiNakibly из Национального исследовательского центра Rafael Ltd. Причем, метод позволяет отслеживать объект REALTIME и базируется на доступном HTML5 Battery Status API. Сравнительный пример по потребляемой мощности двух различных моделей телефонов с течением времени, находящихся каждый раз на новом месте, но одной "точке":

Получить параметры батареи аккумулятора можно так:
navigator.getBattery().then(function(battery) {

  console.log("Battery charging? " + (battery.charging ? "Yes" : "No"));
  console.log("Battery level: " + battery.level * 100 + "%");
  console.log("Battery charging time: " + battery.chargingTime + " seconds");
  console.log("Battery discharging time: " + battery.dischargingTime + " seconds");

  battery.addEventListener('chargingchange', function() {
    console.log("Battery charging? " + (battery.charging ? "Yes" : "No"));
  });

  battery.addEventListener('levelchange', function() {
    console.log("Battery level: " + battery.level * 100 + "%");
  });

  battery.addEventListener('chargingtimechange', function() {
    console.log("Battery charging time: " + battery.chargingTime + " seconds");
  });

  battery.addEventListener('dischargingtimechange', function() {
    console.log("Battery discharging time: " + battery.dischargingTime + " seconds");
  });

});

Простейший алгоритм идентификации точки на местности заключается в переборе минимальных расстояний до заданной точки из имеющегося набора мощностей:
while targetmoving do
loc[i],score ← estimateLocation()
d ← getDistance(loc[i],loc[i− 1])
if locked and d>MAX DISP then
loc[i] ← loc[i − 1]
endif
if score>THRESHOLD then
locked ← true
endif
endwhile
В принципе по похожему методу когда-то сам искал и подсвечивал точки засечек целей с их ТТХ на 2D/3D плоскости по вектору от местонахождения курсора мыши и массивом координат засечек:


Но задача с маршрутами не так проста на первый взгляд. Разработчикам пришлось по сути работать с графами и использовать классические алгоритмы поиска пути:



Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.