Марсоход Curiosity: C++ и особенности автономного передвижения

Интереснейший доклад с CPP Con приоткрывает завесу над тем, как устроено управление марсоходом Curiosity.

[youtube=http://www.youtube.com/watch?v=3SdSKZFoUa8&feature=player_embedded]

Одной из основных сложностей в управлении устройством, находящимся на Марсе, является существенное время прохождения сигнала. Лишь в одну сторону требуется 4 минуты 22 секунды. Задача становится еще более трудной, если узнать, что антенны Deep Space Network делятся между многими космическими миссиями. Команда Curiosity может отправлять сигнал всего лишь один раз в сутки, а получать лишь несколько раз в день. Поэтому инженеры в течение дня готовят команды для управления ровером. Команды управления включают в себя управление движением, использование механической руки и проведение экспериментов.

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

Разработка марсохода, способного практически самостоятельно перемещаться по поверхности, является сложной задачей, требующей работы тысяч людей.  Объем работы впечатляет еще больше, если узнать технические характеристики компьютера ровера:  частота процессора 133 МГц и 128 Мб оперативной памяти (адресуемой памяти лишь 32 Мб).

Характеристики Curiosity во втором столбце

Программный код содержит более 100 модулей, каждый из которых общается с другими через очередь сообщений с минимальным числом блокировок и разделяемой памяти. Модуль навигации – один из наиболее объемных и занимает 10% от всего объектного кода.

Большая часть кода для автономного передвижения написана на C++.  Исторически исследователи использовали C++ для разработки высокоуровневых автономных алгоритмов, таких как:  стерео-зрение, построение карт, планирование пути и визуальная одометрия. Однако до 2000 года C++ код никогда не летал на Марс, все модули разрабатывались на языке C.  При разработке марсоходов разработчики оценили, что риск ошибки при переписывании существующего протестированного кода с C++ на C выше, чем использование новой среды на C++.  С++ победил!

Марсоход Curiosity имеет множество стерео-камер, позволяющих надежно оценивать обстановку вокруг, даже если с частью камер возникнут проблемы.

Марсоход умеет передвигаться в нескольких режимах. Во-первых, конечно же, есть полностью ручной режим  прямого управления. Этот режим использовался во время первых движений по планете,  чтобы получить представление о безопасности окружающей территории.

Читать далее Марсоход Curiosity: C++ и особенности автономного передвижения