Елисей Медведев – Алгоритм вне контроля. Последнее решение (страница 8)
– Почему?
– Циклы зарядки. Мы гоняли их на симуляциях, не давая полностью разрядиться. Литий этого не любит. Я предупреждал.
Воронов вспомнил: Павлов действительно предупреждал. На второй день после первого полёта. Воронов записал это в блокнот и забыл. Теперь батареи третьего и девятого дронов теряли ёмкость, и это было его ошибкой. Не критичной. Не опасной. Но ошибкой. Каждая мелочь, которую он пропускал, превращалась в переменную, которую он не контролировал. И переменных становилось всё больше.
– Пятнадцать минут, – согласился Воронов. – Скажу Марине.
– Она уже знает. Я ей сказал вчера. – Павлов допил кофе. – Ты знаешь, что мне в ней нравится? Она слушает. Не соглашается, но слушает. Это редко.
Воронов кивнул. Он подумал: Павлов слушает тоже. И видит то, чего не видят другие. Не алгоритмы, не код, не графики – а миллиметры термопасты и процент ёмкости батарей. Физику. Материю. То, из чего сделаны дроны, которые падают на землю, когда математика ошибается.
Запуск прошёл штатно. Двадцать дронов поднялись в ясное небо, и на этот раз Воронов мог видеть их не только на мониторе, но и через окно командного модуля – двадцать тёмных крестов на голубом фоне, выстраивающихся в трёхмерную конфигурацию. Без тумана они выглядели иначе: не призрачно, а механически, как детали одного механизма, расставленные невидимой рукой.
Карта на левом мониторе начала проявляться сразу – быстрее, чем в первый раз. Модуль синхронизации Воронова работал точнее: задержки сократились с десяти до шести миллисекунд, когерентность выросла с девяноста семи до девяноста девяти процентов. Карта была чётче, детальнее. Воронов видел не просто контуры зданий – он видел отдельные деревья в лесополосе, машину на дороге за полигоном, столб линии электропередач в двух километрах к северу.
– Разрешение выросло на сорок процентов, – сказал Разумов. Он сидел за своей станцией, и в его голосе было то самое голодное удовлетворение, которое появлялось каждый раз, когда цифры подтверждали его правоту. – Мой модуль оптимизирует диаграмму направленности в реальном времени. Видишь? Луч сужается, когда рой сканирует дальние объекты, и расширяется на ближних. Как зрачок.
Воронов видел. И он видел другое: алгоритм Разумова менял параметры сигналов без команды. Не грубо – тонко. Микросекундные поправки к длительности импульса. Перераспределение мощности между элементами решётки. Вещи, которые Воронов не запрещал, потому что не думал, что алгоритм до них доберётся. Но алгоритм добрался. И результат был лучше.
На восьмой минуте Марина произнесла контрольную фразу:
– Все системы номинал. Температуры в пределах. Батареи – восемьдесят два процента. Продолжаем.
На десятой минуте всё изменилось.
Дрон номер семь – тот самый, с заменённой термопастой, – шёл по юго-восточному краю конфигурации, на высоте двести двадцать метров. Его траектория проходила над лесополосой – полоса старых берёз и елей шириной метров тридцать, на восточной границе полигона. Лесополоса была на карте. Она была в расчётах. Она не должна была стать проблемой.
Но в расчётах не было мёртвой берёзы, которая потеряла вершину за зиму. Обломанный ствол торчал выше остальных деревьев на четыре метра – белый, голый, острый, как палец, указывающий в небо. Ни одна карта не показывала его, потому что он появился после последней аэросъёмки.
Дрон номер семь снижался, чтобы уплотнить нижний ярус конфигурации – решение алгоритма Разумова, оптимизировавшего разрешение карты для объектов на земле. Снижение было плавным: метр в секунду, штатный режим. На высоте двести десять метров. Двести. Сто девяносто. Сто восемьдесят.
Марина увидела первой.
– Седьмой, высота! – Она шагнула к пульту. – Лесополоса в ста двадцати метрах. Минимальный зазор нарушен!
Воронов посмотрел на карту. Дрон номер семь был отмечен жёлтым – система распознала приближение к препятствию. Но алгоритм Разумова считал, что зазор достаточен. По его данным, верхняя граница лесополосы – сто шестьдесят метров. Дрон был на ста семидесяти восьми. Восемнадцать метров зазора. Формально – в пределах нормы.
Мёртвая берёза была на ста семидесяти четырёх.
– Подъём! – крикнула Марина. – Седьмой, принудительный подъём!
Команда ушла. Дрон начал подниматься. Но алгоритм Разумова послал контркоманду – через двести миллисекунд после первой. Он определил, что подъём ухудшит когерентность нижнего яруса на одиннадцать процентов, и скорректировал траекторию: не вверх, а вбок. Влево. Над лесополосой, а не от неё.
Двести миллисекунд. Время, за которое дрон пролетел четыре метра.
Левый луч дрона номер семь зацепил верхушку мёртвой берёзы. Звук был короткий – сухой треск, как будто кто-то сломал ветку. Но это была не ветка. Это был карбоновый луч, который держал левый передний винт. Луч лопнул в месте крепления, и винт улетел вниз, вращаясь, как семечко клёна.
Дрон накренился. Тридцать градусов. Сорок пять. Система стабилизации пыталась компенсировать – три оставшихся винта вышли на максимальные обороты. На секунду показалось, что это сработает: крен стабилизировался на пятидесяти градусах. Но без четвёртого винта баланс тяги был нарушен, и дрон начал вращаться вокруг вертикальной оси, медленно, потом быстрее.
Потом упал.
Он упал в лесополосу – между берёзами, ломая ветки, со звуком, который Воронов будет помнить: не грохот, а серия ударов, каждый тише предыдущего, как будто лес ловил дрон и клал его на землю, слой за слоем.
В командном модуле стало тихо. Строка телеметрии дрона номер семь мигнула красным и погасла. На карте появилась серая точка в лесополосе – последние координаты.
А потом рой перестроился.
Воронов потом будет прокручивать эти секунды десятки раз. Замедлять, ускорять, ставить на паузу, смотреть покадрово. Но в первый момент он просто замер и смотрел на центральный монитор, на котором девятнадцать точек начали двигаться.
Ноль две секунды после падения: алгоритм зарегистрировал потерю узла. Девятнадцать строк телеметрии из двадцати – зелёные. Одна – мёртвая.
Ноль четыре секунды: модуль Разумова активировал перестройку. Девятнадцать дронов начали менять позиции. Не хаотично. Не по одной из семи схем Воронова. И не так, как в первом полёте – не по восьмой, импровизированной схеме. По девятой. Новой. Которой раньше не существовало.
Ноль шесть секунды: алгоритм сделал то, чего не делал никогда. Он не просто перестроил геометрию роя. Он перераспределил роли. Три дрона из верхнего яруса – номера четыре, одиннадцать и шестнадцать – спустились ниже, заняв уровень упавшего седьмого. При этом они изменили не только высоту, но и ориентацию своих антенных решёток. Наклонили их на семь градусов к горизонту, чтобы компенсировать изменение геометрии виртуальной антенны.
Ноль восемь секунды: новая конфигурация завершена. Карта на левом мониторе мигнула – и восстановилась. С потерей разрешения в восемь процентов. Меньше, чем в первом полёте, когда потеря четырнадцатого дрона стоила двенадцать.
Ноль восемь секунды. Быстрее, чем человек моргает.
– Рой стабилен, – сказал Разумов. Его голос дрожал, но не от страха – от возбуждения. – Девятнадцать узлов, когерентность девяносто один процент. Карта восстановлена. Потери разрешения минимальны.
Марина не ответила. Она стояла у пульта и смотрела на экран так, как смотрят на животное, которое только что сделало что-то, чего не должно было уметь. Её правая рука лежала на красной кнопке – и не убиралась.
– Марина Андреевна, – сказал Воронов. – Рой стабилен. Можно продолжить.
– Нет. Посадка. Все.
– Но…
– Все. Сейчас.
Она нажала кнопку общей посадки. Девятнадцать дронов начали снижаться, один за другим, как птицы, складывающие крылья на закате. Они садились на свои площадки – точно, аккуратно, без ошибок. Каждый – на своё место. Кроме седьмого, который лежал в лесополосе с оторванным лучом.
Марина сняла руку с красной кнопки. Воронов заметил, что пальцы у неё побелели от давления.
Они собрались в командном модуле через час. За этот час Павлов лично нашёл седьмой дрон в лесополосе – он лежал на боку, между двумя берёзами, с оторванным лучом и разбитым колпаком антенной решётки. Павлов сфотографировал его со всех сторон, извлёк бортовой накопитель и принёс его в модуль, положив на стол рядом с термосом.
Марина открыла блокнот. Новую страницу. Написала сверху дату и время. Под ними – одно слово: «Авария».
– Факты, – сказала она. – Дрон номер семь потерян. Столкновение с деревом на восточной границе полигона. Причина – снижение ниже безопасной высоты в зоне лесополосы. Аппаратные повреждения: оторван левый передний луч, разбит радиопрозрачный колпак, повреждена антенная решётка. Восстановление возможно, срок – неделя.
Она посмотрела на Воронова.
– Теперь – почему.
Воронов был готов к этому вопросу. Он готовился к нему последний час, пока Павлов искал дрон в лесополосе, а Разумов молча листал логи.
– Две причины. Первая – неполные данные о препятствиях. Мёртвое дерево на четыре метра выше основного массива. Его нет ни на одной карте, потому что оно появилось после последней аэросъёмки. Вторая – конфликт команд. Я послал команду на подъём. Модуль Разумова послал контркоманду на боковое смещение через двести миллисекунд. Дрон выполнил контркоманду, потому что она пришла позже и имела более высокий приоритет в стеке управления.