Apa perangkat lunak bawaan Mars Curiosity Rover?

544

The Mars Curiosity rover telah mendarat dengan sukses, dan salah satu promo video "7 menit teror" sesumbar tentang ada menjadi 500.000 baris kode. Ini masalah yang rumit, tidak diragukan lagi. Tapi itu banyak kode, pasti ada upaya pemrograman yang cukup besar di belakangnya. Adakah yang tahu tentang proyek ini? Saya hanya bisa membayangkan itu semacam C. tertanam

InfinitiesLoop
sumber
91
Mengapa orang menganggap hanya ada satu bahasa yang terlibat dalam proyek.
Rig
5
Poin yang bagus, tentu saja, mungkin ada sejumlah besar teknologi yang terkait dengannya. Saya ingin tahu lebih banyak tentang semua itu :)
InfinitiesLoop
3
Bagian mana? Pesawat ruang angkasa? Penjelajah? Instrumen? Sistem tanah? Seperti yang ditunjukkan oleh komentar lain, mungkin ada beberapa bahasa yang digunakan dalam komponen yang berbeda. Bukan tidak mungkin bahwa assembler digunakan untuk beberapa komponen penting waktu.
GreenMatt
67
Sejujurnya, ketika aku melihat angka 500kloc aku mendapati diriku berpikir, "Hanya?" Itu mungkin realistis seandainya Haskell, tetapi setelah membaca sedikit tentang proyek sebelumnya dan bahasa tingkat rendah mereka, ini sepertinya terlalu rendah. Kode C loc 2.5mio yang dikutip di bawah ini lebih dapat dipercaya.
Philip Kamenarsky
19
Pertanyaan yang lebih menarik bahwa "dalam bahasa apa?" adalah "dengan proses apa?" . Ini adalah proses yang membuat perbedaan, dan NASA telah menggunakan yang ketat selama beberapa dekade sekarang.
dmckee

Jawaban:

506

Ini menjalankan 2,5 juta baris C pada prosesor RAD750 yang diproduksi oleh BAE . The JPL memiliki informasi sedikit lebih tetapi saya menduga banyak rincian yang tidak dipublikasikan. Tampaknya skrip pengujian ditulis dalam Python.

Sistem operasi yang mendasarinya adalah Wind River's VxWorks RTOS . The RTOS yang bersangkutan dapat diprogram dalam C, C ++, Ada atau Java. Namun, hanya C dan C ++ yang standar untuk OS, Ada dan Java didukung oleh ekstensi. Wind River menyediakan banyak sekali detail tentang bagaimana dan mengapa VxWorks .

Chipset yang mendasari hampir kepalang kuat . Spesifikasinya mungkin tidak tampak seperti banyak pada awalnya tetapi diizinkan untuk memiliki satu dan hanya satu "bluescreen" setiap 15 tahun. Ingatlah, ini dibombardir dari radiasi yang akan membunuh manusia berulang kali. Di ruang, ketahanan menang atas kecepatan. Tentu saja, ketahanan seperti itu harus dibayar. Dalam hal ini, ini adalah $ 200.000 hingga $ 500.000.

Seorang programmer Erlang berbicara tentang fitur-fitur komputer dan basis kode pada Curiosity.

Insinyur Dunia
sumber
48
Standar pengkodean bahasa JPL C, khusus untuk lingkungan tertanam alih-alih "perangkat lunak darat" sebagaimana mereka menyebutnya. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes
80
@ Dinamis: Ini adalah misi yang sangat penting sehingga NASA tidak akan mengambil risiko. Manusia menulis majelis membuat lebih banyak kesalahan, itu fakta yang diukur.
MSalters
22
Kode C yang dikompilasi adalah kode mesin, bahasa assembly adalah kode mesin, saya tidak melihat perbedaannya. Tidak ada perbedaan kinerja yang sangat besar ketika Anda melakukannya.
Ramhound
23
NASA sangat berhati-hati dengan kode mereka. Semuanya (SEMUANYA) dilakukan dalam spesifikasi terlebih dahulu dan berulang kali ditinjau, diperiksa, dan disempurnakan. Ketika dimasukkan ke dalam stream kode kehidupan, hampir terpotong-potong referensi spec. Script tes diberikan setidaknya sebanyak perhatian kode dan tidak ada trik 'mencolok' atau kode pintar yang diizinkan kecuali mereka sangat dibutuhkan.
Stefan
99
@Amarghosh: yeah, dan lihat seberapa baik ponsel Anda bekerja ketika melewati lingkungan radiasi tinggi seperti luar angkasa :)
whatsisname
175

Kode ini didasarkan pada kode MER ( Spirit and Opportunity ), yang didasarkan pada pendarat pertama mereka, MPF ( Sojourner ). Ini 3,5 juta baris C (sebagian besar di-autogenerasi), berjalan pada prosesor RA50 yang diproduksi oleh BAE dan sistem operasi VxWorks . Lebih dari satu juta baris diberi kode tangan.

Kode diimplementasikan sebagai 150 modul terpisah, masing-masing melakukan fungsi yang berbeda. Modul berpasangan tinggi disusun menjadi komponen-komponen yang mengabstraksi modul-modul yang dikandungnya, dan "menentukan fungsi, aktivitas, atau perilaku tertentu." Komponen-komponen ini selanjutnya disusun menjadi lapisan-lapisan, dan "tidak lebih dari 10 komponen tingkat atas".

Sumber: Ceramah utama oleh Benjamin Cichy di 2010 Workshop on Spacecraft Flight Software (FSW-10) , slide, audio, dan video (dimulai dengan ikhtisar misi, diskusi arsitektur di slide 80).


Seseorang di Hacker News bertanya, "Tidak yakin apa artinya sebagian besar kode C dihasilkan secara otomatis. Dari apa?"

Saya tidak 100% yakin, meskipun mungkin ada presentasi terpisah di tahun itu atau tahun yang berbeda yang menggambarkan proses pembuatan otomatis mereka. Saya tahu bahwa itu adalah topik populer pada umumnya di konferensi FSW-11.

Simulink adalah suatu kemungkinan. Ini adalah komponen MATLAB yang populer di kalangan insinyur mesin, dan karenanya sebagian besar insinyur navigasi & kontrol, dan memungkinkan mereka untuk 'kode' dan mensimulasikan hal-hal tanpa berpikir mereka sedang mengkode.

Pemrograman berbasis model jelas merupakan hal yang secara perlahan disadari oleh industri, tetapi saya tidak tahu seberapa bagusnya hal ini di JPL atau apakah mereka akan memilih untuk menggunakannya ketika proyek dimulai.

Kemungkinan ketiga dan kemungkinan besar adalah untuk kode komunikasi. Dengan semua sistem ruang angkasa, Anda perlu mengirim perintah ke perangkat lunak penerbangan dari perangkat lunak darat, dan menerima telemetri dari perangkat lunak penerbangan dan memprosesnya dengan perangkat lunak darat. Setiap paket perintah / telemetri adalah struktur data yang heterogen, dan perlu bahwa kedua belah pihak bekerja dari definisi paket yang sama persis, dan memformat paket sehingga diformat dengan benar di satu sisi, dan diuraikan di sisi lain. Ini melibatkan menyelesaikan banyak hal dengan benar, termasuk tipe data, ukuran, dan endianness (meskipun yang terakhir biasanya merupakan hal global; Anda dapat memiliki banyak prosesor di dalam kapal dengan endianness yang berbeda).

Tapi itu hanya permukaannya saja. Anda memerlukan banyak kode berulang di kedua sisi untuk menangani hal-hal seperti logging, validasi perintah / telemetri, pengecekan batas, dan penanganan kesalahan. Dan kemudian Anda dapat melakukan hal-hal yang lebih canggih. Katakanlah Anda memiliki perintah untuk menetapkan nilai register perangkat keras, dan nilai itu dikirim kembali dalam telemetri dalam paket tertentu. Anda dapat membuat perangkat lunak dasar yang memantau titik telemetri untuk memastikan bahwa ketika nilai register ini ditetapkan, akhirnya telemetri berubah untuk mencerminkan perubahan. Dan tentu saja, beberapa titik telemetri lebih penting daripada yang lain (misalnya arus bus utama) dan ditunjuk untuk turun dalam beberapa paket, yang melibatkan penyalinan tambahan di sisi penerbangan dan de-duplikasi data di sisi darat.

Dengan semua itu, jauh lebih mudah (menurut saya) untuk menulis satu kumpulan file teks statis (dalam XML, CSV, atau DSL / apa pun), jalankan melalui skrip Perl / Python, dan presto! Kode!

Saya tidak bekerja di JPL, jadi saya tidak bisa memberikan detail apa pun yang tidak ada di video, dengan satu pengecualian. Saya pernah mendengar bahwa kode C autogenerated ditulis oleh skrip Python, dan jumlah autocoding dalam suatu proyek sangat bervariasi tergantung pada siapa pemimpin FSW itu.

Nate Parsons
sumber
8
Ini mungkin memberi sedikit penjelasan tentang Wind River, kontraktor yang membuat VxWorks: windriver.com/news/press/pr.html?ID=10901 Saya pernah membaca bahwa NASA memiliki tim orang yang tugasnya menemukan bug sebanyak mereka dapat dalam kode sistem kontrol yang ditulis oleh tim lain. Tim pencari bug dihargai untuk bug yang mereka temukan dan mereka benar-benar cukup baik dalam menemukan bug misterius. Ketika bug ditemukan, analisis tipe 5Y dilakukan untuk mencari tahu bagaimana proses dev perangkat lunak dapat ditingkatkan untuk menghilangkan kemungkinan bug serupa di masa depan. Proses yang sangat melelahkan dan mahal.
Jim Raden
15
@JimRaden Ketika biaya langsung kegagalan untuk penyelidikan berjalan dari beberapa ratus juta hingga beberapa miliar dolar dan beberapa tahun (jika sama sekali) untuk upaya paranoia ekstrem dalam QA dibenarkan. Biaya tidak langsung dalam bentuk puluhan / ratusan mahasiswa pascasarjana kehilangan tahun kerja dan harus memulai kembali pada pekerjaan PhD mereka dan berbagai profesor baru yang mengandalkan data dari itu untuk memasok penelitian jalur tenurial mereka adalah hit besar lain tetapi jauh lebih sulit untuk menghitung daripada item baris dalam anggaran NASA.
Dan Neely
1
Dari mana C dihasilkan secara otomatis? Tolong beri tahu saya bahwa itu bukan Simulink. :-)
William Payne
2
@ Willill Payne Keynote menyatakan bahwa beberapa di antaranya adalah protokol encog / decoding rutin autogenerated (untuk komunikasi dengan bumi), yang dihasilkan oleh program python dari deskripsi XML.
no.
1
Secara otomatis menghasilkan kode dari ICD agak keren. Aku suka gagasan itu! Saya akan menggunakan YAML daripada XML, meskipun. :-)
William Payne