Цитата(uuu2 @ Aug 12 2009, 15:29)

Ситуация такая. В воздухе летает многочисленый (сотни штук) "пчелиный рой", оснащённый радиомодулями и GPS-датчиками. Все "пчёлы" летают внутри сферы радиуом 1 км. Необходимо, чтобы каждая из пчёл "знала" координаты остальных пчёл (можно не всех, но хотя бы ближайших - чтобы с ними не столкнуться).
Т.е. по радиоканалу, каждая "пчела" должна периодически (раз в 1-2 секунды) передавать очень короткий пакет данных (~30 байт) со своим ID-шником, координатами и скоростью (направлением движения).
Вопрос: как это реализовать? Основной проблемой я вижу "наложение" пакетов от различных "пчёл" друг на друга.
Просьба покритиковать решение, ну и поделиться своими соображениями.
Пчёлы летают со скоростью маленьких беспилотных вертолётиков. Т.е. максимум 150 км/ч. Это верхняя оценка, а взаимные скорости будут заметно меньше.
Обновлять координаты - раз в 1-3 секунды (IMHO это достаточно, чтобы успеть выдавать корректирующие микро-импульсы и поддерживать безопасную дистанцию в 25-50 метров).
Скорости взаимные меньше не будут. 150км/ч это 42 метра в секунду. Берем 1 секунду как максимум. На встречных курсах они пролетят 84 метра + минимальный запас 25 метров. Итого 260 метров сфера,
на границе которой начинает тикать та самая секунда, во время которой вертолетики должны начать обмен данными.
Если 512 вертолетиков равномерно разместить внутри сферы 1км, получаем 8 вертолетиков на километр, или 1 вертолетик на сферу в 125 метров. Выглядит уже не так страшно.
И еще один вопрос направление движения. Чтобы точно знать в каком направлении движется вертолетик, у него должен быть собственный гироскоп. Или как сказали, инерциальная система,
и дядя снаружи, который будет раз в какое то время сообщать вертолетику его реальные трехмерные координаты.
Вопрос, как долго живут эти вертолетики? Если это то, о чем я думаю, то вертолетики должны летать не более одной минуты. За это время инерциальная система не должна внести большую погрешность.
Еще вопрос, ну получил он координаты 8ми вертолетиков на границе сферы, отвернул немного вправо, от предполагаемого столкновения. И когда до цели осталось три метра, от которой вертолетик отвернул,
тот меняет направление чтобы отклониться от третьей цели, и в итоге за три метра до цели выясняется, что она опять идет на столкновение. Все система не сработала.
Чтобы не столкнуться им нужно знать не только кто там на границе сферы, но и помнить взаимное расположение и курсы всех целей находящихся внутри сферы 260 метров,
то есть в зоне условного радиомолчания. И при корректировке курсов, во первых срабатывать на появление новых объектов на границе сферы, во вторых учитывать при коррекции своего движения
все направления, скорости и вычисленное местоположение каждого из предыдущих участников радиообмена. Поэтому микроконтроллером тут можно и не обойтись, если в сферу скучкуется 100 вертолетиков,
И поступило 50 запросов на коррекцию движения потому что к летящим 100 добавилось еще 50. И пусть они поступили не сразу, а в разбежку по 10ms каждый. Получается есть минимальное время,
на которое вертолетик вообще не реагирует на внешние запросы. А вот за 10ms он должен быть в состоянии вычислить 150 целей и принять решение куда же все таки лететь.
Путь с радиопакетами сложный и не надежный. Мое мнение годится только для предсказаний. От реального столкновения должна быть подстраховка. Или обмен должен идти чаще чем раз в секунду.
Потому что 125 метров минимальное расстояние обнаружения, при размерах цели меньше метра это слишком мало. Наверное, если ограничиться только радиообменом, минимальное расстояние
радиообмена навскидку не больше двух радиусов цели. Когда уже не отвернуть даже если очень захочется

Если вертолетик диаметром 20см, то время за которое он пролетит 40см или два своих диаметра 5ms.
Вот это и есть время радиообмена.
У нас 512 вертолетиков. Пусть скорость обмена 250кбит в секунду. Пакет 64 байта, плюс синхронизация, итого 128 байт или 1кбит. Время передачи такого пакета 4ms. То есть при такой скорости обмена
вертолетик успеет обменяться максимум с одной целью. Вторая его просто завалит.
Есть несколько путей, увеличивать скорость радиобмена, сокращать объем информации или использовать несколько частот на прием одновременно. В конце концов 64 чипа приемников,
займут место 4кв см. на плате. И наконец учитывать вероятность с которой все 512 вертолетиков будут в одном месте.
Тогда если увеличить скорость обмена до 1Мбит в секунду, и использовать 64 приемника, а также снизить объем информации в два раза, получаем время обмена для одного вертолетика
64 байта или 512 бит/1024000= 0.5ms время обмена пакетами, делим на 64 канала приема, получаем 8 мкс на один приемник. Или за 4ms как раз все 512 вертолетиков можно принять.
Осталось разобраться с процессором, которые сможет отработать 64 пакета по 64 байта за 8мкс. Пусть требуется 512 операций на пакет. 8мкс/(512*64) = 0.2ns или 5ГГц скорость проца.
Ура... мы засунули пентиум в вертолетик. Два ядра по два гига. Прям как в рекламе...
Ну да, это крайний случай, когда все 511 вертолетиков встали вокруг оставшегося на расстоянии двух диаметров. И он успел со скоростью 5ГГц придумать, куда ему лететь
Вопрос только в том, что на расстоянии двух диаметров, хватит 32 вертолетиков, чтобы вообще заблокировать любые пути отступления. И как говорится, даже самый умный получит свою дубину по башке.
Это плюс, в том смысле, что вычислительная мощность может быть ниже. Ну и плюс вероятности...
А вообще конечно смешно. Явно не игрушечная задача, вопросы прям гламурные. GPS, Zigbee, вы еще блютуз и рингтоны туда поставьте. Дорогая редакция, как говорится...
PS: Сразу скажу я не спец, вообще, это все чистой воды измышления на скорую руку, поэтому воспринимать только как бесплатный совет. У нас же страна бесплатных советов