मार्स क्यूरियोसिटी रोवर का सॉफ्टवेयर किसमें बनाया गया है?


544

मंगल ग्रह जिज्ञासा रोवर सफलतापूर्वक उतरा है, और प्रोमो वीडियो "आतंक का 7 मिनट" में से एक के बारे में वहाँ brags कोड की 500,000 लाइनों जा रहा है। यह एक जटिल समस्या है, इसमें कोई संदेह नहीं है। लेकिन यह एक बहुत कोड है, निश्चित रूप से इसके पीछे एक बहुत बड़ा प्रोग्रामिंग प्रयास था। किसी को भी इस परियोजना के बारे में कुछ पता है? मैं केवल कल्पना कर सकता हूं कि यह किसी प्रकार का एम्बेडेड सी है।


91
क्यों मानेंगे कि परियोजना में केवल एक ही भाषा शामिल है।
रिग

5
अच्छी बात है, यकीन है, यह शायद इसके साथ जुड़े प्रौद्योगिकी की चौड़ाई है। मैं उन सभी के बारे में अधिक जानना चाहता हूं :)
InfinitiesLoop

3
कोनसा भाग? अंतरिक्ष यान? घुमक्कड़? उपकरण? जमीन प्रणाली? जैसा कि अन्य टिप्पणियां इंगित करती हैं, विभिन्न घटकों में संभवतः कई भाषाओं का उपयोग किया जाता है। यह इस सवाल से बाहर नहीं है कि कुछ महत्वपूर्ण घटकों के लिए कोडांतरक का उपयोग किया गया था।
ग्रीनमैट

67
ईमानदार होने के लिए, जब मैंने 500kloc आंकड़ा देखा, तो मैंने खुद को यह सोचते हुए पकड़ा "केवल?" यह यथार्थवादी हो सकता था यह हास्केल था, लेकिन पिछली परियोजनाओं और उनकी निम्न स्तर की भाषाओं के बारे में थोड़ा पढ़ने के बाद, यह बहुत कम लग रहा था। नीचे दिए गए 2.5mio loc C कोड अधिक विश्वसनीय हैं।
फिलिप कामनेर्स्की

19
एक और दिलचस्प सवाल है कि "किस भाषा में?" है "क्या प्रक्रिया के साथ?" । यह वह प्रक्रिया है जो अंतर बनाती है, और नासा दशकों से एक कठोर का उपयोग कर रहा है।
dmckee

जवाबों:


506

यह BAE द्वारा निर्मित RAD750 प्रोसेसर पर C की 2.5 मिलियन लाइनें चला रहा है । JPL में थोड़ा और अधिक जानकारी नहीं है, लेकिन मुझे लगता है विवरण के कई प्रचार नहीं कर रहे हैं है। ऐसा प्रतीत होता है कि परीक्षण लिपियों को पायथन में लिखा गया था।

अंतर्निहित ऑपरेटिंग सिस्टम विंड रिवर का VxWorks RTOS हैRTOS प्रश्न में सी, सी ++, एडीए या जावा में प्रोग्राम किया जा सकता। हालाँकि, केवल C और C ++ OS के लिए मानक हैं, Ada और Java एक्सटेंशन द्वारा समर्थित हैं। विंड रिवर VxWorks के हाव-भावों के रूप में विस्तार की एक जबरदस्त मात्रा की आपूर्ति करता है ।

अंतर्निहित चिपसेट लगभग बेतुका मजबूत है । इसका चश्मा पहली बार में ज्यादा नहीं लग सकता है, लेकिन इसे हर 15 साल में एक और केवल एक "ब्लूस्क्रीन" की अनुमति है। ध्यान रखें, यह विकिरण से बमबारी के तहत है जो एक मानव को कई बार मार देगा। अंतरिक्ष में, मजबूती गति से जीतती है। बेशक, इस तरह की मजबूती लागत पर आती है। इस मामले में, यह $ 200,000 से $ 500,000 तक का शांत है।

एक एरलंग प्रोग्रामर कंप्यूटर की विशेषताओं और क्यूरियोसिटी पर कोडबेस के बारे में बात करता है।


48
जेपीएल सी भाषा कोडिंग मानक, विशेष रूप से "ग्राउंड सॉफ्टवेयर" के बजाय एम्बेडेड वातावरण के लिए क्योंकि वे इसे कहते हैं। lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
पैट्रिक ह्यूजेस

80
@ डायनामिक: यह इतना महत्वपूर्ण मिशन है कि नासा इसे जोखिम में नहीं डालेगा। असेंबली लिखने वाले मनुष्य अधिक त्रुटियां करते हैं, यह एक मापा तथ्य है।
एमएसलेट्स

22
संकलित सी कोड मशीन कोड है, विधानसभा भाषा मशीन कोड है, मुझे अंतर नहीं दिखता है। जब आप इसके लिए नीचे आते हैं तो बहुत बड़ा प्रदर्शन अंतर नहीं होता है।
रामहाउंड

23
नासा अपने कोड के साथ पूरी तरह से सावधान हैं। सब कुछ (सब कुछ) पहले कल्पना में किया जाता है और बार-बार समीक्षा, जाँच और परिष्कृत किया जाता है। जब इसे जीवन संहिता की धारा में डाल दिया जाता है तो यह कल्पना के संदर्भ का एक कट और पेस्ट होता है। परीक्षण स्क्रिप्ट को कम से कम उतना ध्यान दिया जाता है जितना कि कोड होता है और जब तक उन्हें गंभीर रूप से आवश्यकता न हो, तब तक कोई 'आकर्षक' या चतुर कोड ट्रिक की अनुमति नहीं दी जाती है।
स्टीफन

99
@Amarghosh: हाँ, और देखें कि आपका सेल फोन कितनी अच्छी तरह काम करता है जब वह उच्च विकिरण वाले वातावरण जैसे बाहरी स्थान से
होकर गुजरता है

175

कोड MER ( आत्मा और अवसर ) पर आधारित है, जो कि उनके पहले लैंडर, MPF ( सोजॉर्नर ) पर आधारित थे । यह BAE और VxWorks ऑपरेटिंग सिस्टम द्वारा निर्मित RA50 प्रोसेसर पर चलने वाली, C की 3.5 मिलियन लाइनें (इसका ऑटोगेन्जेनेटेड) है। एक लाख से अधिक लाइनों को हाथ से कोड किया गया था।

कोड को 150 अलग-अलग मॉड्यूल के रूप में लागू किया जाता है, प्रत्येक एक अलग फ़ंक्शन करता है। अत्यधिक युग्मित मॉड्यूल उन घटकों में व्यवस्थित होते हैं जो उन मॉड्यूलों को अमूर्त करते हैं, और "या तो एक विशिष्ट फ़ंक्शन, गतिविधि या व्यवहार निर्दिष्ट करते हैं।" इन घटकों को आगे परतों में व्यवस्थित किया जाता है, और "10 से अधिक शीर्ष-स्तरीय घटक नहीं हैं।"

स्रोत: स्पेसक्राफ्ट फ़्लाइट सॉफ़्टवेयर (FSW-10) , स्लाइड्स, ऑडियो और वीडियो पर 2010 की कार्यशाला में बेंजामिन सिची द्वारा मुख्य चर्चा , (मिशन अवलोकन के साथ शुरू, स्लाइड 80 पर वास्तुकला चर्चा)।


हैकर न्यूज पर किसी ने पूछा "निश्चित रूप से इसका मतलब यह नहीं है कि अधिकांश सी कोड ऑटो उत्पन्न होता है। किससे?"

मुझे 100% यकीन नहीं है, हालांकि उस वर्ष या एक अलग वर्ष में एक अलग प्रस्तुति है जो उनकी ऑटो-पीढ़ी प्रक्रिया का वर्णन करती है। मुझे पता है कि FSW-11 सम्मेलन में यह सामान्य रूप से एक लोकप्रिय विषय था।

सिमुलिंक एक संभावना है। यह मैकेनिकल इंजीनियरों के बीच एक MATLAB घटक लोकप्रिय है, और इसलिए अधिकांश नेविगेशन और नियंत्रण इंजीनियर हैं, और उन्हें 'कोड' करने की अनुमति देता है और चीजों को बिना कोडित किए अनुकरण करता है।

मॉडल आधारित प्रोग्रामिंग निश्चित रूप से एक ऐसी चीज है जो उद्योग धीरे-धीरे जागरूक हो रहा है, लेकिन मुझे नहीं पता कि यह JPL पर कितना अच्छा है या यदि परियोजना शुरू होने पर उन्होंने इसका उपयोग करने के लिए चुना होगा।

तीसरी और सबसे अधिक संभावना संचार कोड के लिए है। सभी अंतरिक्ष प्रणालियों के साथ, आपको ग्राउंड सॉफ़्टवेयर से फ़्लाइट सॉफ़्टवेयर को कमांड भेजने और फ़्लाइट सॉफ़्टवेयर से टेलीमेट्री प्राप्त करने और इसे ग्राउंड सॉफ़्टवेयर के साथ संसाधित करने की आवश्यकता है। प्रत्येक कमांड / टेलीमेट्री पैकेट एक विषम डेटा संरचना है, और यह आवश्यक है कि दोनों पक्ष सटीक एक ही पैकेट परिभाषा से काम कर रहे हैं, और पैकेट को प्रारूपित करें ताकि यह एक तरफ सही ढंग से स्वरूपित हो, और दूसरी तरफ पार्स हो। इसमें डेटा प्रकार, आकार और एंडियननेस (हालांकि बाद आम तौर पर एक वैश्विक चीज है, सहित कई सही चीजें प्राप्त करना शामिल है; आपके पास अलग-अलग एंडियननेस के साथ कई प्रोसेसर हो सकते हैं)।

लेकिन वह सिर्फ सतह है। लॉगिंग, कमांड / टेलीमेट्री वेलिडेशन, लिमिट चेकिंग और एरर हैंडलिंग जैसी चीजों को संभालने के लिए आपको दोनों तरफ बहुत सारे दोहराए गए कोड की आवश्यकता होती है। और फिर आप अधिक परिष्कृत चीजें कर सकते हैं। मान लें कि आपके पास हार्डवेयर रजिस्टर मान सेट करने के लिए एक कमांड है, और उस मान को टेलीमेट्री में एक विशेष पैकेट में वापस भेज दिया जाता है। आप ग्राउंड सॉफ़्टवेयर उत्पन्न कर सकते हैं जो उस टेलीमेट्री को मॉनिटर करता है ताकि यह सुनिश्चित किया जा सके कि जब यह रजिस्टर वैल्यू सेट हो, तो अंततः टेलीमेट्री परिवर्तन को प्रतिबिंबित करे। और निश्चित रूप से, कुछ टेलीमेट्री पॉइंट दूसरों की तुलना में अधिक महत्वपूर्ण हैं (उदाहरण के लिए मुख्य बस चालू) और कई पैकेटों में नीचे आने के लिए नामित हैं, जिसमें फ्लाइट की तरफ अतिरिक्त कॉपी करना और जमीन पर डेटा डी-डुप्लिकेटेशन शामिल है।

उस सब के साथ, यह बहुत आसान है (मेरी राय में) स्थिर पाठ फ़ाइलों का एक संग्रह (एक्सएमएल, सीएसवी, या कुछ डीएसएल / व्हाट्स-यू-यू में) लिखने के लिए, उन्हें एक पर्ल / पायथन स्क्रिप्ट, और प्रेस्टो के माध्यम से चलाएं! कोड!

मैं JPL में काम नहीं करता, इसलिए मैं एक भी अपवाद नहीं दे सकता जो वीडियो में नहीं है, एक अपवाद के साथ। मैंने सुना है कि ऑटोजेनरेटेड सी कोड पायथन लिपियों द्वारा लिखा गया है, और एक प्रोजेक्ट में ऑटोकोडिंग की मात्रा इस बात पर निर्भर करती है कि एफएसडब्ल्यू लीड कौन है।


8
यह विंड रिवर पर कुछ प्रकाश डाल सकता है, जो ठेकेदार VxWorks बनाता है: windriver.com/news/press/pr.html?ID=10901 मैंने पढ़ा है कि NASA के पास ऐसे लोगों की टीम है जिनका काम बहुत से कीड़े ढूंढना है वे किसी अन्य टीम द्वारा लिखित नियंत्रण प्रणाली कोड में कर सकते हैं। बग ढूंढने वाली टीम को उनके द्वारा खोजे जाने वाले कीड़े के लिए पुरस्कृत किया जाता है और वे वास्तव में रहस्यमय कीड़े खोजने में काफी अच्छे हैं। जब एक बग पाया जाता है, तो 5Y-type विश्लेषण यह पता लगाने के लिए किया जाता है कि भविष्य में इसी तरह के बग की संभावना को खत्म करने के लिए सॉफ्टवेयर देव प्रक्रिया में कैसे सुधार किया जा सकता है। एक बहुत ही श्रमसाध्य और महंगी प्रक्रिया।
जिम राडेन

15
@JimRaden जब एक जांच के लिए विफलता की प्रत्यक्ष लागत कई सौ मिलियन से कई बिलियन डॉलर और कई वर्षों तक (यदि सभी पर) तो क्यूए में एक फिर से प्रयास चरम उन्माद के लिए उचित है। दर्जनों / सैकड़ों स्नातक छात्रों को काम के वर्षों में खोने और अपने पीएचडी कार्य पर पुनः आरंभ करने और विभिन्न नए प्रोफेसरों के रूप में अप्रत्यक्ष लागत का खर्च होता है, जो अपने कार्यकाल ट्रैक अनुसंधान की आपूर्ति के लिए डेटा से इसकी गिनती कर रहे थे, एक और बड़ी हिट है लेकिन बहुत कठिन है नासा के बजट में लाइन आइटम की तुलना में।
दान नीली

1
C स्वतः उत्पन्न क्या था? कृपया मुझे बताएं कि यह सिमुलिंक नहीं था। :-)
विलियम पायने

2
@William Payne मुख्य विवरण में कहा गया है कि इसमें से कुछ XML विवरणों से अजगर कार्यक्रमों द्वारा उत्पन्न ऑटोगेनेरेटेड प्रोटोकॉल एन्कोडिंग / डिकोडिंग रूटीन (पृथ्वी के साथ संचार के लिए) हैं।
ओपन स्कूल

1
ICDs से स्वतः उत्पन्न होने वाला कोड थोड़े शांत है। मुझे यह विचार पसंद आया! मैंने XML के बजाय YAML का उपयोग किया होगा। :-)
विलियम पायने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.