LINUX.ORG.RU
ФорумTalks

У марсианского зонда случилось переполнение

 ,


1

5

Такая новость сегодня вышла про зонд Schiaparelli: https://www.gazeta.ru/science/2016/11/24_a_10365155.shtml

Вскоре после раскрытия парашюта произошел «глюк» - переполнение отсчетов так называемого Инерциального измерительного устройства (Inertial Measurement Unit — IMU), в состав которого входят гироскопы и который следит за параметрами вращения аппарата в пространстве.

Из-за этого переполнения, которое длилось всего одну секунду, в бортовой компьютер была передана неверная информация. Обработав ее, компьютер неверно рассчитал высоту зонда, которая оказалась отрицательной: по сути, он посчитал, что аппарат уже приземлился или был у поверхности.

Это, в свою очередь, привело к преждевременному отстрелу парашютов, кратковременному включению тормозных реактивных двигателей и активации систем, которые должны были включиться при приземлении аппарата. В действительности же аппарат в это время находился на высоте 3,7 км.

Не является ли это очередным свидетельством того, что профессия программиста дискредитирует саму себя, превращаясь из инженерной специальности в профессию для ПТУ?

PS: Наверняка код написан на каком то языке не очень высокого уровня, например на Си. Было бы лучше, если бы писали на лиспе, например?

★★★★★

Последнее исправление: Puzan (всего исправлений: 2)
Ответ на: комментарий от Puzan

Ну наверное прошивка для контроллера тоже написана на $LANG_NAME?

Предлагаешь код для микроконтроллеров писать на лиспе? Или сразу на яве? Я вот что-то не пойму.

WARNING ★★★★
()

Я думаю писали на петоне или яве и в неподходящий момент память кончилась, или проца не хватило. Писали бы на асме и проблем бы не было.

Lavos ★★★★★
()
Ответ на: комментарий от WARNING

Предлагаешь код для микроконтроллеров писать на лиспе? Или сразу на яве? Я вот что-то не пойму.

Почему нет? Маленький протестированный интерпретатор (возможно даже с формальным доказательством корректности) и более надежный результирующий код. В конце концов можно написать на языке Ада, который здесь уже упоминули, и на котором писали прошивки для каких-то космических аппаратов.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Stahl

Если отрицательные значения автоматически обнулять, то проблема не только не будет исправлено, но и станет намного более хитро замаскированной.

Какая часть слова «непереполняемые» тебе непонятна?

Miguel ★★★★★
()

Более подробно описано тут:

http://gizmodo.com/a-crazy-miscalculation-doomed-the-sciaparelli-lander-17893...

Получается, что IMU выдавал заведомо неверные данные слишком долго. В прнципе, такое можно было уловить программно.

Ждем полного отчета в 2017 году. Чего сейчас гадать...

Deleted
()
Ответ на: комментарий от Puzan

Почему нет?

Потому что микроконтроллер. И если я правильно понял, то проблема с датчиком вполне может быть аппаратная, тогда совсем печаль-беда. В общем случае непонятно что делать.

WARNING ★★★★
()
Ответ на: комментарий от Stahl

Вдруг кто-то потом подумает, что ты не знал и не знаешь, и так пытаешься информацию из меня вытянуть. Неудобно получится.

У меня вопрос. Почему это вообще сделали полностью программно?

Датчик давления, при срабатывании более нескольких секунд - открывает парашют. Радар при приближении к поверхности на определённое расстояние, отстреливает крепления парашютов и включает тормозные двигатели.

Если уж поставили микропроцессор - то пусть хотя бы ошибки обрабатывает.

rezedent12 ☆☆☆
()
Ответ на: комментарий от record

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

Отрицательную высоту вообще не учитывают, выбрасываются все измерения параметра вне диапазона, считается первая производная, то бишь скорость изменения параметра и тоже выбрасывается, если выходит из границ, потом считается ускорение и тыпы. Если предположить, что до сбоя высота измерялась правильно, была ,например, 5 км, секунда сбоя и высота уже ноль. Скорость 5км/сек, это почти первая космическая 7,9 км/с, самое время отбросить парашют. Высота отрицательная - включаем двигатели, опа. Сказали бы прямо, мы не хера не знаем, чо он разбился, хрень с ним, дайте денег на новый.

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)
Ответ на: комментарий от Deleted

Получается, что IMU выдавал заведомо неверные данные слишком долго. В прнципе, такое можно было уловить программно.

Watchdog timer мог бы отключить датчики и включить «тупую», но надёжную циклограмму посадки, прошитую медными проволочками на ферритовых колечках, как дедЫ делали 40 лет назад :)

quickquest ★★★★★
()
Последнее исправление: quickquest (всего исправлений: 1)
Ответ на: комментарий от ilovewindows

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

Космические алгоритмисты в треде, все в спускаемый аппарат!

tailgunner ★★★★★
()

Вот что бывает, когда нет QA

Lordwind ★★★★★
()
Ответ на: комментарий от WARNING

Потому что микроконтроллер

Это очень относительно. Современные микроконтроллеры по мощности превосходят недавние мейнфреймы.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Этому на лабах в школе по физике учат, отбрасывать заведомо неверные измерения и вычислять среднее.

ilovewindows ★★★★★
()
Ответ на: комментарий от Deleted

Для таких вещей есть язык Ада.

Любителям языка Ada читать взрыв ракеты Arian-5 в 1996г. Было один в один повторение нынешней ситуации - программный отказ основного и резервного блоков инерциальной системы ориентации. На основании ложных данных бортовой комп повернул сопла движков на 36 сек. старта - ракета начала разваливаться и самоликвидировалась.

sigurd ★★★★★
()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от rezedent12

Тут дело не в обработке ошибок, а площади микропроцессора, его привязывают к парашюту в качестве «медузы», зашел в атмосферу, микропроцессор начинает цепляться за газ, вытягивает основной парашют. Лучше использовать в дипе, у него ножки больше и можно крепко привязать.

ilovewindows ★★★★★
()
Ответ на: комментарий от sholom

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

Да-да, отладка в продакшне наше всё...

Блжад...

Deleted
()

Насколько я наслышан, там была использована FreeRTOS. Не то, чтобы негодная система, но Use Cases как бы накладывают свой отпечаток на дизайн системы, построенной на этой оси. Я так думаю.

alman ★★★
()

Это прописные истины вообще то

http://www.slideshare.net/antoniomorancardenas/data-fusion-with-kalman-filtering

Матрица в фильтре просто более сложная учитывающая приоры (предыдущие значения + только падаем и имеем массу + модель атмосферы et cetera)

Почему это тупо не сделано было не понятно.

psv1967 ★★★★★
()
Последнее исправление: psv1967 (всего исправлений: 1)

Программисты во все времена делали ошибки.

unt1tled ★★★★
()
Ответ на: комментарий от sigurd

Любителям языка Ada читать взрыв ракеты Arian-5 в 1996г. Было один в один повторение нынешней ситуации - программный отказ основного и резервного блоков инерциальной системы ориентации.

Да, я сразу об этом вспомнил. Там оба компа загнулись из-за неверной обработки верных значений датчика. При разработке неверно оценили диапазон реальных показаний на данной ракете.

Отличие лишь в том, что в Скиапарелли датчик выдавал просто неверные значения, и это не было предусмотрено в программе.

Действительно, лишь обнаружение переполнения типа такое не решается.

Deleted
()
Ответ на: комментарий от ilovewindows

Отрицательную высоту вообще не учитывают

И даже не интересуются, откуда она взялась так рано?
Должен был вызваться обработчик исключения. Одним из вариантов решения мог быть, например, повторный запрос данных или несколько запросов.
Анализ данных и т.п.

record ★★★★★
()
Последнее исправление: record (всего исправлений: 2)

Наверняка код написан на каком то языке не очень высокого уровня, например на Си. Было бы лучше, если бы писали на лиспе, например?

На каком языке и фреймворке не пиши, но если программист - ламер, ничего тут сделать нельзя. Валидность входных данных от датчиков просто проверять надо, надо правильно делать тесты на симуляторах, надо тестировать ситуации когда датчики выходят из строя и начинают выдавать не то что надо.

Думаете, эти программисты на яве или c# таких ошибок не допустят ? Я вам ручаюсь, что там они ко всему прочему получат ещё и тормоза от GC в самый ответственный момент.

DawnCaster ★★
()
Ответ на: комментарий от unt1tled

Для таких вещей есть язык Ада

Еще его позиционируют как язык для военных

Наряду с Си и Си++.

Плюсую.

Программистов нет, но вы держитесь.

tailgunner ★★★★★
()

Вскоре после раскрытия парашюта произошел «глюк» - переполнение отсчетов IMU, в состав которого входят гироскопы и который следит за параметрами вращения аппарата в пространстве.

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

aplay ★★★★★
()
Ответ на: комментарий от DawnCaster

Думаете, эти программисты на яве или c# таких ошибок не допустят ?

Нене, я ничего не думаю, я просто спросил.

И вот здесь мы пришли к выводу, что всё таки не хватает современным программистам инженерного подхода и инженерной культуры. Почему? Может быть потому что насаждается мнение, что программировать может каждый, а «каждый» верит и начинает программировать?

И действительно, для этого не нужно образование, не нужно знание и соблюдение стандартов, не нужно быть инженером в конце концов. Т.е. программирование - это не инженерная специальность, это максимум ПТУ.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от record

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

ilovewindows ★★★★★
()
Ответ на: комментарий от aplay

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

ilovewindows ★★★★★
()
Ответ на: комментарий от tailgunner

все в спускаемый аппарат!

В контексте этого треда я бы не рискнул :(

cipher ★★★★★
()
Ответ на: комментарий от tailgunner

Наряду с Си и Си++.

позиционируют как язык для военных

Никогда не слышал о таком.

Программистов нет, но вы держитесь.

Я могу писать код на ada и еще один регистрант выше. До недавнего времени технологический университет города Тампере (фин) обучал студентов многопоточному программированию именно на языке ада.

unt1tled ★★★★
()
Ответ на: комментарий от aplay

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

fixed

unt1tled ★★★★
()

Язык динамической типизации в космосе?

vertexua ★★★★★
()
Ответ на: комментарий от unt1tled

Никогда не слышал о таком.

Думаю, ты не интересуешься ни Адой, ни военными разработками.

Я могу писать код на ada и еще один регистрант выше.

Начал писать длинный ответ, но забил. Можешь - ну и молодец.

tailgunner ★★★★★
()
Ответ на: комментарий от Puzan

Инженер работает с понятными, исследованными и описанными сущностями.

Не, не слышал. Сейчас работа в IT - это работа по неполной информации. Причем постоянно

vertexua ★★★★★
()
Ответ на: комментарий от vazgen05

Мне тоже с первого прочтения показалось что это проблема недостаточной валидации данных.

В системах которые обрабатывают петабайты или экзабайты данных есть специальные средства защиты от переключения бита данных на противоположный в следствии космических лучей. А когда у тебя какая-то штука в космосе, то там каждую переменную после вычислений надо проверять дважды, осталась ли она такой еще или нет (из-за температуры, проблем с датчиками, и т.д.). Понятно что такое уже встроено в схемы специализировано сверхнадежного чипа, но вот как видите, как то не сработало в этот раз

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 3)
Ответ на: комментарий от vertexua

И переполнить память

Это будет ОЧЕНЬ забористое переполнение.

Miguel ★★★★★
()
Ответ на: комментарий от tailgunner

Как ловко ты выбираешь фразы из поста...

А военными разработками никто кроме военных интересоваться и не может. Classified, sir.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

Как ловко ты выбираешь фразы из поста...

Я цитирую фразы-детекторы.

А военными разработками никто кроме военных интересоваться и не может. Classified, sir.

Глупости. Открытой информации полно. В частности, все, кто интересуются темой, знают, что бортовое ПО F-22 было сделано на Аде, а F-35 - уже на Си++ (и ПО недавно упомянутого Zumwalt - тоже). И причины этого тоже знают.

tailgunner ★★★★★
()
Ответ на: комментарий от Stahl

Виновато не переполнение. Виновата логическая ошибка в коде, которая в данном конкретном случае привела к переполнению. Она могла привести в тому, что все показания были бы на 5 метров больше.

Дело не в ошибке в коде, а в том, что похоже архитектура в принципе была неправильная, если она допускала подобные ошибки. Причем на такие грабли впервые наступали еще в 50-е годы. Самое смешное, что банально софт от квадрокоптера уже более-менее вычищен от таких ляпов.

praseodim ★★★★★
()
Ответ на: комментарий от Deleted

Так и в Java можно, берешь Math.addExact и подобные )

vertexua ★★★★★
()
Ответ на: комментарий от WARNING

Нет, можно в каждом конкретном случае применять мозг, а не искать контрпример чтобы доказать что что-то неприменимо в отдельно выбраном случае. Для тебя дупликация датчиков новость?

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

можно в каждом конкретном случае применять мозг

Не всегда срабатывает. Вот ребята, что зонд запускали, тоже ведь мозг применяли. Но не срослось.

А задача определения какой из двух датчиков выдаёт неверные показания, так же не имеет решения в общем случае. И дело в данном конкретном случае скорее в качестве тестов, чем в качестве кода/железа.

WARNING ★★★★
()
Ответ на: комментарий от Miguel

может в самом датчике переменные ограниченного размера были, а управляющий софт возможность переполнения не учитывал

Harald ★★★★★
()
Ответ на: комментарий от WARNING

Да, можно применить голосование в случае с тремя датчиками. Или применить проверки ко всем трем, оставить только адекватные ответы и выбрать наиболее безопасный вариант.

vertexua ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.