Mars Merak Rover'ın yerleşik yazılımı nedir?


544

Mars Curiosity Rover başarıyla indi ve promosyon videoları "terör 7 dakika" biri kod 500.000 satırları olma konusunda orada övünmek. Bu karmaşık bir problem, şüphesiz. Fakat bu çok fazla kod, elbette arkasında oldukça büyük bir programlama çabası vardı. Bu proje hakkında bir şey bilen var mı? Bunun bir tür gömülü C olduğunu hayal edebiliyorum.


91
Neden bir kişi projede yer alan tek bir dil olduğunu varsayar?
Rig

5
İyi bir nokta, elbette, muhtemelen onunla ilişkili bir teknoloji genişliğine sahip. Bunların hepsi hakkında daha fazla bilgi edinmek istiyorum :)
InfinitiesLoop

3
Hangi bölüm? Uzay aracı mı? Gezici? Araçlar? Yer sistemi? Diğer yorumlara göre, muhtemelen farklı bileşenlerde kullanılan birkaç dil vardır. Meclisin zamanın kritik bileşenleri için kullanıldığı söz konusu değildir.
GreenMatt

67
Dürüst olmak gerekirse, 500kloc rakamı görünce kendimi "Sadece?" Haskell olsaydı gerçekçi olabilirdi, ancak önceki projeler ve düşük seviyeli dilleri hakkında biraz bilgi sahibi oldular, bu çok düşük görünüyordu. Aşağıda belirtilen 2.5 milyon loc C kodu daha inandırıcıdır.
Philip Kamenarsky

19
"Hangi dilde" diye daha ilginç bir soru. olduğunu "Ne süreciyle?" . Farkı yaratan süreç bu, ve NASA yıllardır titiz bir şekilde kullanıyor.
dmckee

Yanıtlar:


506

Bu çalışıyor C 2.5 milyon hatları bir ilgili RAD750 işlemcisi tarafından üretilen BAE . JPL biraz daha fazla bilgi vardır ama birçok ayrıntıları kamuoyuna değildir şüpheli yok. Test komut dosyalarının Python ile yazılmış olduğu anlaşılıyor.

Temel işletim sistemi Wind River'ın VxWorks RTOS'udur . Söz konusu RTOS , C, C ++, Ada veya Java ile programlanabilir. Ancak, yalnızca C ve C ++ işletim sistemi için standarttır, Ada ve Java eklentiler tarafından desteklenir. Wind River hows ve whys ilgili ayrıntılara muazzam miktarda malzeme VxWorks .

Altta yatan yonga seti neredeyse saçma bir şekilde sağlam . Özellikleri ilk başta pek görünmeyebilir, ancak her 15 yılda bir ve sadece bir "mavi ekran" olmasına izin verilir. Unutmayın, bu bir insanı defalarca öldürecek radyasyonun bombardımanı altında. Uzayda sağlamlık hız kazanıyor. Tabii ki, bunun gibi sağlamlığın bir bedeli var. Bu durumda, 200.000 ila 500.000 dolar arası bir havalı.

Bir Erlang programcısı , bilgisayarların özellikleri ve Merakla ilgili kod temeli hakkında konuşuyor .


48
JPL C dili kodlama standartları, özellikle "yer yazılımı" olarak adlandırılan gömülü ortamlar için. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes

80
@ Dinamik: NASA'nın riske atmaması çok önemli bir görev. Montaj yazan insanlar daha fazla hata yaparlar, bu ölçülü bir gerçektir.
MSalters

22
Derlenmiş C kodu makine kodu, derleme dili makine kodu, farkı göremiyorum. Aşağı indiğinizde büyük bir performans farkı yoktur.
Ramhound

23
NASA kodları konusunda son derece dikkatlidir. Her şey (HER ŞEY) ilk önce spesifikasyonda yapılır ve tekrar tekrar gözden geçirilir, kontrol edilir ve rafine edilir. Yaşam kodu akışına dahil edildiğinde, neredeyse şartname referansının bir kesiği ve macunudur. Test komut dosyalarına en azından kod kadar dikkat edilir ve eleştirel olarak gerekli olmadıkça 'gösterişli' veya akıllı kod numaralarına izin verilmez.
Stefan,

99
@Amarghosh: evet, ve cep telefonunuzun uzay gibi yüksek radyasyonlu bir ortamda geçtiğinde ne kadar iyi çalıştığını görün :)
whatsisname,

175

Kod, ilk lander'ları olan MPF'lerin ( Sojourner ) temel alan MER ( Ruh ve Fırsat ) koduna dayanıyor . BAE ve VxWorks işletim sistemi tarafından üretilen bir RA50 işlemcide çalışan 3,5 milyon C satırı (çoğu otomatikleştirilmiş) . Bir milyondan fazla satır el kodlandı.

Kod, her biri farklı bir işlev gerçekleştiren 150 ayrı modül olarak uygulanır. Yüksek derecede bağlı modüller, içerdikleri modülleri soyutlayan ve "belirli bir işlev, aktivite veya davranış belirten" bileşenler halinde düzenlenir. Bu bileşenler ayrıca katmanlar halinde düzenlenir ve "en fazla 10 üst düzey bileşen" yoktur.

Kaynak: tarafından Keynote konuşma Benjamin Cichy de Uzay Uçuş Yazılımı (FSW-10) üzerinde 2010 Workshop , slaytlar, ses ve video (misyon genel, slayt 80 mimarisi tartışması ile başlar).


Hacker News’dan biri "C kodunun çoğunun otomatik olarak üretildiğinden emin değil. Ne?" Diye sordu.

% 100 emin değilim, muhtemelen o yıl içinde ayrı bir sunum veya otomatik üretim süreçlerini tanımlayan farklı bir yıl olmasına rağmen. FSW-11 konferansında genel olarak popüler bir konu olduğunu biliyorum.

Simulink bir olasılıktır. Makine mühendisleri arasında popüler olan bir MATLAB bileşenidir ve bu nedenle çoğu navigasyon ve kontrol mühendisleri ve kodladıklarını düşünmeden şeyleri 'kodlamalarına ve simüle etmelerine izin verir.

Model tabanlı programlama kesinlikle endüstrinin yavaşça farkına vardığı bir şeydir, ancak JPL'de ne kadar başarılı olduğunu bilmiyorum veya proje başladığında kullanmayı tercih ederlerdi.

Üçüncü ve en muhtemel olasılık iletişim kodu içindir. Tüm uzay sistemlerinde, uçuş yazılımına yer yazılımından komutlar göndermeniz ve uçuş yazılımından telemetri almanız ve yer yazılımı ile işlemeniz gerekir. Her komut / telemetri paketi, heterojen bir veri yapısıdır ve her iki tarafın da aynı paket tanımından çalıştığı ve paketi bir tarafta doğru şekilde biçimlendirildiği ve diğer tarafta ayrıştırıldığı şekilde biçimlendirmesi gerekir. Bu, veri türü, boyut ve endianness dahil olmak üzere pek çok şeyin doğru yapılmasını içerir (ikincisi genellikle küresel bir şey olsa da, farklı endianness ile birden fazla işlemciniz olabilir).

Ama bu sadece yüzey. Günlük kaydı, komut / telemetri doğrulaması, limit kontrolü ve hata işleme gibi şeyleri işlemek için her iki tarafta da çok sayıda tekrarlayan kod gerekir. Ve sonra daha sofistike şeyler yapabilirsiniz. Bir donanım kayıt defteri değeri ayarlama komutunuz olduğunu ve bu değerin telemetride belirli bir pakette geri gönderildiğini söyleyin. Bu kayıt değeri ayarlandığında, nihayetinde telemetri değişikliği yansıtacak şekilde değiştiğinden emin olmak için bu telemetri noktasını izleyen zemin yazılımı oluşturabilirsiniz. Ve elbette, bazı telemetri noktaları diğerlerinden (örneğin ana veri yolu akımı) diğerlerinden daha önemlidir ve uçuş tarafında ekstra kopyalama ve zemin tarafında veri kopmasını içeren çoklu paketlerde düşmek üzere tasarlanmıştır.

Bütün bunlarla, (bence) bir statik metin dosyası (XML, CSV veya bazı DSL / what-you-you) bir koleksiyon yazmak, bunları bir Perl / Python betiği üzerinden çalıştırmak ve presto! Kod!

JPL'de çalışmıyorum, bu nedenle videoda olmayan herhangi bir ayrıntıyı bir istisna dışında sağlayamıyorum. Otomatikleştirilmiş C kodunun Python komut dosyaları tarafından yazıldığını ve bir projedeki otomatik kodlamanın FSW liderinin kim olduğuna bağlı olarak büyük ölçüde değiştiğini duydum.


8
Bu, VxWorks'ü yapan müteahhit Wind River'a biraz ışık tutabilir: windriver.com/news/press/pr.html?ID=10901 NASA'nın, işi kadar hata bulmak için çalışan bir ekibinin olduğunu okudum. başka bir ekip tarafından yazılmış kontrol sistemi kodunda olabilirler. Böcek bulma ekibi, buldukları böcekler için ödüllendirilir ve heyecan verici böcek bulmada gerçekten oldukça iyidirler. Bir hata bulunduğunda, gelecekteki benzer hata olasılığını ortadan kaldırmak için yazılım dev sürecinin nasıl geliştirilebileceğini bulmak için 5Y tipi bir analiz yapılır. Çok özenli ve pahalı bir işlem.
Jim Raden,

15
@JimRaden Bir prob için doğrudan başarısızlık maliyetinin birkaç yüz milyondan birkaç milyar dolara ve birkaç yıl boyunca (hiç değilse) QA'daki aşırı paranoya haklı çıkarılmasında haklı olduğu zaman. Yıllarca süren işini kaybettiği ve doktora çalışmalarına tekrar başlamak zorunda olan onlarca / yüzlerce lisans öğrencisi biçimindeki dolaylı maliyetler ve görev süreleri araştırmalarını sağlamak için verilere güvenen çeşitli yeni profesörler başka çok büyük bir zorluktur. NASA bütçesindeki satır öğelerinden daha büyük
Dan Neely

1
Otomatik olarak oluşturulan C neydi? Lütfen bana Simulink olmadığını söyle. :-)
William Payne

2
@William Payne Açılış konuşmasında, bazılarının XML açıklamalarından python programları tarafından oluşturulan, kodlama / kod çözme rutinlerini (yeryüzüyle iletişim için) otomatikleştirilmiş bir protokol olduğunu belirtir.
nos

1
ICD'lerden otomatik olarak kod üretmek biraz havalı. Fikri beğendim! Yine de, XML yerine YAML kullanırdım. :-)
William Payne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.