Как мобильному узлу дать указание двигаться по определенной траектории? - PullRequest
1 голос
/ 05 февраля 2020

Я хочу, чтобы узел A отправлял детали траектории, по которой должен двигаться узел B.

Например, я хочу, чтобы узел B перемещался в местоположение [2.m, 0,0] со скоростью 1 м / с. Я отправлю датаграмму с данными [2,0,0,1]. Теперь, как узел B может извлечь информацию из полученной дейтаграммы и соответственно изменить ее траекторию?

1 Ответ

0 голосов
/ 12 февраля 2020

На узле B убедитесь, что mobility включен, а location и origin установлены, так что вы находитесь в локальной системе координат в метрах. Если ваша система координат не имеет географической привязки, вы можете установить origin в [NaN, NaN]:

def node = agentForService org.arl.unet.Services.NODE_INFO

node.origin = [Float.NaN, Float.NaN]  // or GPS coordinates
node.location = [0, 0, 0]             // or wherever you want to start
node.mobility = true

Теперь, когда вы получаете дейтаграмму на узле B, ваш агент может установить node.speed и node.heading до желаемой скорости и курса. Например:

node.heading = 90          // head East
node.speed = 1             // at 1 m/s

На самом деле вы можете вычислить курс на нужную вам путевую точку.

Ваш агент может отслеживать положение узла (возможно, используя TickerBehavior), и когда пришло время остановиться (например, вы приблизились достаточно близко к точке пути [2,0,0]), установите скорость на 0:

// if within 1 m of waypoint, stop
if (MathUtils.distance(node.location, [2,0,0] as double[]) < 1) {
  node.speed = 0
}
...