ซอฟต์แวร์ของ Mars Curiosity Rover สร้างขึ้นในอะไร?


544

ดาวอังคารอยากรู้อยากเห็นรถแลนด์โรเวอร์มีที่ดินที่ประสบความสำเร็จและเป็นหนึ่งในโปรโมชั่นวิดีโอ "7 นาทีของความหวาดกลัว" โกลด์โทมีการ 500,000 บรรทัดของรหัส มันเป็นปัญหาที่ซับซ้อนอย่างไม่ต้องสงสัย แต่นั่นเป็นรหัสจำนวนมากแน่นอนว่ามีความพยายามเขียนโปรแกรมที่ยิ่งใหญ่อยู่ข้างหลัง ไม่มีใครรู้อะไรเกี่ยวกับโครงการนี้หรือไม่? ฉันนึกได้แค่ว่ามันฝังซีบางอย่าง


91
ทำไมคนหนึ่งถึงคิดว่ามีเพียงภาษาเดียวเท่านั้นที่เกี่ยวข้องในโครงการ
Rig

5
จุดดีแน่นอนว่ามันอาจเป็นเทคโนโลยีที่เกี่ยวข้องกับมัน ฉันต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับเรื่องทั้งหมด :)
InfinitiesLoop

3
ส่วนไหน? ยานอวกาศ? รถแลนด์โรเวอร์? เครื่องดนตรี? ระบบภาคพื้นดิน? ตามที่ความคิดเห็นอื่นบ่งชี้อาจมีหลายภาษาที่ใช้ในองค์ประกอบที่แตกต่างกัน มันไม่ได้เป็นคำถามที่ว่าแอสเซมเบลอร์ถูกนำมาใช้เป็นส่วนประกอบสำคัญในบางช่วงเวลา
GreenMatt

67
ตามจริงแล้วเมื่อฉันเห็นร่าง 500kloc ฉันจับตัวเองคิดว่า "เท่านั้น" มันอาจเป็นจริงได้ถ้าเป็น Haskell แต่เมื่อได้อ่านเกี่ยวกับโปรเจ็กต์ก่อนหน้าและภาษาระดับต่ำของพวกเขาดูเหมือนจะน้อยเกินไป โค้ด C 2.5mio loc ที่อ้างถึงด้านล่างมีความน่าเชื่อถือมากกว่า
ฟิลิป Kamenarsky

19
คำถามที่น่าสนใจมากกว่านั้น"ในภาษาใด" คือ"กับกระบวนการอะไร" . มันเป็นกระบวนการที่สร้างความแตกต่างและ NASA ใช้กระบวนการที่เข้มงวดมาหลายทศวรรษแล้ว
dmckee

คำตอบ:


506

มันทำงาน2.5 ล้านเส้นของ Cบนหน่วยประมวลผล RAD750ผลิตโดยBAE JPLมีข้อมูลที่มากขึ้นอีกนิด แต่ฉันสงสัยหลายรายละเอียดจะไม่เผยแพร่ ปรากฏว่าสคริปต์ทดสอบถูกเขียนใน Python

ระบบปฏิบัติการที่รองรับคือแม่น้ำลม VxWorks RTOS RTOSในคำถามสามารถตั้งโปรแกรมใน C, C ++, Java Ada หรือ อย่างไรก็ตามเฉพาะ C และ C ++ เท่านั้นที่เป็นมาตรฐานสำหรับ OS, Ada และ Java ได้รับการสนับสนุนโดยส่วนขยาย ลมแม่น้ำซัพพลายจำนวนมากของรายละเอียดเกี่ยวกับการชำนาญ Whys และการVxWorks

ชิปเซ็ตพื้นฐานเกือบจะไร้เหตุผลที่แข็งแกร่ง สเปคของมันอาจจะดูไม่เหมือนในตอนแรก แต่มันก็อนุญาตให้มี "bluescreen" หนึ่งเดียวเท่านั้นทุก ๆ 15 ปี จำไว้ว่านี่อยู่ภายใต้การทิ้งระเบิดจากรังสีที่จะฆ่ามนุษย์หลายต่อหลายครั้ง ในอวกาศความทนทานนั้นเหนือกว่าความเร็ว แน่นอนความแข็งแกร่งเช่นนั้นมาในราคา ในกรณีนี้มันยอดเยี่ยม $ 200,000 ถึง $ 500,000

ผู้เขียนโปรแกรม Erlang พูดถึงคุณสมบัติของคอมพิวเตอร์และ codebase ใน Curiosity


48
มาตรฐานการเข้ารหัสภาษา JPL C โดยเฉพาะสำหรับสภาพแวดล้อมแบบฝังตัวแทนที่จะเป็น "ซอฟต์แวร์พื้น" ที่เรียกว่า lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes

80
@Dynamic: มันเป็นภารกิจสำคัญที่ NASA จะไม่เสี่ยง การเขียนสมัชชามนุษย์ทำผิดพลาดมากขึ้นนั่นเป็นข้อเท็จจริงที่วัดได้
MSalters

22
รวบรวมรหัส C คือรหัสเครื่องภาษาแอสเซมบลีเป็นรหัสเครื่องฉันไม่เห็นความแตกต่าง ไม่มีความแตกต่างด้านประสิทธิภาพอย่างมากเมื่อคุณลงมือปฏิบัติ
Ramhound

23
นาซ่านั้นระมัดระวังรหัสของตนอย่างดี ทุกอย่าง (ทุกสิ่ง) ทำในสเปคก่อนและตรวจสอบซ้ำตรวจสอบและปรับปรุงใหม่ เมื่อใส่ลงในสตรีมโค้ดชีวิตมันเกือบจะถูกตัดและวางอ้างอิงของข้อมูลจำเพาะ สคริปต์ทดสอบจะได้รับความสนใจอย่างน้อยที่สุดเท่าที่รหัสนั้นและไม่อนุญาตให้ใช้เทคนิค 'ฉูดฉาด' หรือรหัสที่ชาญฉลาดเว้นแต่จะมีความจำเป็นอย่างยิ่ง
สเตฟาน

99
@Amarghosh: ใช่และดูว่าโทรศัพท์มือถือของคุณทำงานได้ดีเมื่อมันผ่านสภาพแวดล้อมรังสีสูงเช่นนอกพื้นที่ :)
whatsisname

175

รหัสจะขึ้นอยู่กับว่าของ MER ( วิญญาณและโอกาส ) ซึ่งมีพื้นฐานมาจากคนงานคนแรก MPF ( Sojourner ) มันคือ 3.5 ล้านบรรทัดของ C (ส่วนใหญ่จะสร้างอัตโนมัติ), ทำงานบนโปรเซสเซอร์ RA50 ที่ผลิตโดยBAEและระบบปฏิบัติการVxWorks กว่าล้านเส้นถูกเขียนด้วยมือ

รหัสนี้มีการใช้งานเป็น 150 โมดูลแยกกันโดยแต่ละฟังก์ชั่นมีหน้าที่แตกต่างกัน โมดูลที่มีการเชื่อมโยงกันสูงจะถูกจัดระเบียบเป็นส่วนประกอบที่เป็นนามธรรมของโมดูลที่มีอยู่และ "ระบุฟังก์ชันกิจกรรมหรือพฤติกรรมที่เฉพาะเจาะจง" ส่วนประกอบเหล่านี้มีการจัดระเบียบเป็นชั้น ๆ และมี "องค์ประกอบระดับบนสุดไม่เกิน 10 รายการ"

ที่มา: ปาฐกถาพิเศษโดยBenjamin Cichyในการประชุมเชิงปฏิบัติการ 2010 เรื่องซอฟต์แวร์ยานอวกาศการบิน (FSW-10) , สไลด์, เสียงและวิดีโอ (เริ่มต้นด้วยภาพรวมภารกิจการอภิปรายสถาปัตยกรรมที่สไลด์ 80)


มีคนถาม Hacker News ว่า "ไม่แน่ใจว่ารหัส C ส่วนใหญ่สร้างโดยอัตโนมัติจากอะไร"

ฉันไม่แน่ใจ 100% แม้ว่าอาจมีการนำเสนอแยกกันในปีนั้นหรือปีอื่นที่อธิบายกระบวนการสร้างอัตโนมัติของพวกเขา ฉันรู้ว่ามันเป็นหัวข้อยอดนิยมโดยทั่วไปในการประชุม FSW-11

Simulinkเป็นไปได้ มันเป็นส่วนประกอบของ MATLAB ที่ได้รับความนิยมในหมู่วิศวกรเครื่องกลดังนั้นวิศวกรนำทางและควบคุมส่วนใหญ่จึงอนุญาตให้พวกเขาใช้ 'รหัส' และจำลองสิ่งต่าง ๆ โดยไม่ต้องคิดว่าพวกเขากำลังเข้ารหัส

การเขียนโปรแกรมตามรูปแบบนั้นเป็นสิ่งที่อุตสาหกรรมตระหนักอย่างช้า ๆ แต่ฉันไม่รู้ว่ามันเป็นที่จับได้ในJPLหรือว่าพวกเขาจะเลือกใช้เมื่อโครงการเริ่มต้นขึ้น

ความเป็นไปได้ที่สามและน่าจะเป็นไปได้สำหรับรหัสการสื่อสาร ด้วยระบบพื้นที่ทั้งหมดคุณต้องส่งคำสั่งไปยังซอฟต์แวร์เครื่องบินจากซอฟต์แวร์ภาคพื้นดินและรับ telemetry จากซอฟต์แวร์เครื่องบินและดำเนินการด้วยซอฟต์แวร์ภาคพื้นดิน แต่ละแพ็คเก็ตคำสั่ง / telemetry เป็นโครงสร้างข้อมูลที่แตกต่างกันและเป็นสิ่งจำเป็นที่ทั้งสองฝ่ายกำลังทำงานจากคำจำกัดความแพ็กเก็ตเดียวกันที่แน่นอนและจัดรูปแบบแพ็คเก็ตเพื่อให้มีการจัดรูปแบบ สิ่งนี้เกี่ยวข้องกับการได้รับสิ่งต่าง ๆ มากมายอย่างถูกต้องรวมถึงชนิดข้อมูลขนาดและ endianness (แม้ว่าหลังมักจะเป็นสิ่งที่ทั่วโลกคุณอาจมีโปรเซสเซอร์หลายตัวบนเครื่องบินที่มีความแตกต่างกัน)

แต่นั่นเป็นเพียงพื้นผิว คุณต้องมีรหัสซ้ำ ๆ มากมายทั้งสองด้านเพื่อจัดการสิ่งต่าง ๆ เช่นการบันทึกการตรวจสอบความถูกต้องของคำสั่ง / telemetry การตรวจสอบข้อ จำกัด และการจัดการข้อผิดพลาด จากนั้นคุณสามารถทำสิ่งที่ซับซ้อนมากขึ้น สมมติว่าคุณมีคำสั่งเพื่อตั้งค่าการลงทะเบียนฮาร์ดแวร์และค่านั้นจะถูกส่งกลับเป็น telemetry ในแพ็คเก็ตเฉพาะ คุณสามารถสร้างซอฟต์แวร์ภาคพื้นดินที่ตรวจสอบว่าจุด telemetry เพื่อให้แน่ใจว่าเมื่อมีการตั้งค่าการลงทะเบียนในที่สุด telemetry การเปลี่ยนแปลงเพื่อสะท้อนการเปลี่ยนแปลง และแน่นอนว่าจุด telemetry บางจุดมีความสำคัญมากกว่าจุดอื่น (เช่นกระแสบัสหลัก) และถูกกำหนดให้ลงในแพ็คเก็ตหลาย ๆ อันซึ่งเกี่ยวข้องกับการทำสำเนาเพิ่มเติมในด้านการบินและการทำสำเนาข้อมูลบนพื้นดิน

ทั้งหมดนั้นมันง่ายกว่ามาก (ในความคิดของฉัน) ที่จะเขียนหนึ่งไฟล์คอลเลกชันคงที่ (ใน XML, CSV, หรือ DSL / อะไรก็ได้ที่คุณมี) รันมันผ่านสคริปต์ Perl / Python และ presto! รหัส!

ฉันไม่ทำงานที่ JPL ดังนั้นฉันจึงไม่สามารถให้รายละเอียดใด ๆ ที่ไม่ได้อยู่ในวิดีโอด้วยข้อยกเว้นเพียงข้อเดียว ฉันได้ยินมาว่าโค้ด C ที่สร้างอัตโนมัติถูกเขียนโดยสคริปต์ Python และปริมาณของการเข้ารหัสอัตโนมัติในโครงการนั้นแตกต่างกันอย่างมากขึ้นอยู่กับว่าใครเป็นผู้นำ FSW


8
สิ่งนี้อาจทำให้ไฟในแม่น้ำ Wind ผู้รับเหมาที่ทำ VxWorks: windriver.com/news/press/pr.html?ID=10901 ฉันได้อ่านว่า NASA มีทีมงานที่มีหน้าที่ในการค้นหาข้อบกพร่องมากมาย พวกเขาสามารถอยู่ในรหัสระบบควบคุมที่เขียนโดยทีมอื่น ทีมค้นหาข้อบกพร่องได้รับรางวัลสำหรับข้อบกพร่องที่พวกเขาพบและพวกเขาค่อนข้างดีในการหาข้อผิดพลาดที่เป็นความลับ เมื่อพบข้อบกพร่องการวิเคราะห์ประเภท 5Y จะทำเพื่อค้นหาว่ากระบวนการพัฒนาซอฟต์แวร์สามารถปรับปรุงเพื่อกำจัดข้อผิดพลาดที่คล้ายกันในอนาคตได้อย่างไร กระบวนการที่แสนเพียรและมีราคาแพง
Jim Raden

15
@JimRaden เมื่อค่าใช้จ่ายโดยตรงของความล้มเหลวในการสอบสวนเริ่มต้นจากหลายร้อยล้านถึงหลายพันล้านดอลลาร์และหลายปี (ถ้าหากทั้งหมด) สำหรับความพยายามในการทำซ้ำความหวาดระแวงอย่างมากใน QA นั้นเป็นธรรม ค่าใช้จ่ายทางอ้อมในรูปแบบของนักเรียนระดับบัณฑิตศึกษาหลายสิบ / ร้อยคนที่สูญเสียการทำงานเป็นเวลาหลายปีและต้องเริ่มต้นใหม่ในงานปริญญาเอกของพวกเขาและอาจารย์ใหม่หลายคนที่นับจำนวนข้อมูลจากการจัดหางานวิจัยติดตามระยะเวลาของพวกเขา ปริมาณมากกว่ารายการโฆษณาในงบประมาณของนาซ่า
Dan Neely

1
C อัตโนมัติสร้างจากอะไร กรุณาบอกฉันว่ามันไม่ใช่ Simulink :-)
William Payne

2
@William Payne คำปราศรัยระบุว่าบางส่วนเป็นขั้นตอนการเข้ารหัส / ถอดรหัสโปรโตคอลอัตโนมัติ (สำหรับการสื่อสารกับ Earth) สร้างขึ้นโดยโปรแกรมหลามจากคำอธิบาย XML
nos

1
การสร้างรหัสจาก ICD โดยอัตโนมัตินั้นค่อนข้างดี ฉันชอบความคิด! ฉันจะใช้ YAML แทนที่จะเป็น XML :-)
William Payne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.