Интереснейший доклад с CPP Con приоткрывает завесу над тем, как устроено управление марсоходом Curiosity.
[youtube=http://www.youtube.com/watch?v=3SdSKZFoUa8&feature=player_embedded]
Одной из основных сложностей в управлении устройством, находящимся на Марсе, является существенное время прохождения сигнала. Лишь в одну сторону требуется 4 минуты 22 секунды. Задача становится еще более трудной, если узнать, что антенны Deep Space Network делятся между многими космическими миссиями. Команда Curiosity может отправлять сигнал всего лишь один раз в сутки, а получать лишь несколько раз в день. Поэтому инженеры в течение дня готовят команды для управления ровером. Команды управления включают в себя управление движением, использование механической руки и проведение экспериментов.
После выполнения команд марсоход отправляет результаты работы и наблюдений на спутник на орбите Марса. Отправка сигнала сразу на Землю, потребовала бы гораздо больше энергии, чем на спутник, находящийся в 322 километрах на орбите.
Разработка марсохода, способного практически самостоятельно перемещаться по поверхности, является сложной задачей, требующей работы тысяч людей. Объем работы впечатляет еще больше, если узнать технические характеристики компьютера ровера: частота процессора 133 МГц и 128 Мб оперативной памяти (адресуемой памяти лишь 32 Мб).
Программный код содержит более 100 модулей, каждый из которых общается с другими через очередь сообщений с минимальным числом блокировок и разделяемой памяти. Модуль навигации – один из наиболее объемных и занимает 10% от всего объектного кода.
Большая часть кода для автономного передвижения написана на C++. Исторически исследователи использовали C++ для разработки высокоуровневых автономных алгоритмов, таких как: стерео-зрение, построение карт, планирование пути и визуальная одометрия. Однако до 2000 года C++ код никогда не летал на Марс, все модули разрабатывались на языке C. При разработке марсоходов разработчики оценили, что риск ошибки при переписывании существующего протестированного кода с C++ на C выше, чем использование новой среды на C++. С++ победил!
Марсоход Curiosity имеет множество стерео-камер, позволяющих надежно оценивать обстановку вокруг, даже если с частью камер возникнут проблемы.
Марсоход умеет передвигаться в нескольких режимах. Во-первых, конечно же, есть полностью ручной режим прямого управления. Этот режим использовался во время первых движений по планете, чтобы получить представление о безопасности окружающей территории.
Читать далее Марсоход Curiosity: C++ и особенности автономного передвижения