Phần mềm Mars Curiosity Rover được tích hợp trong cái gì?


544

Các sao Hỏa Curiosity Rover đã hạ cánh thành công, và một trong những video promo "7 phút kinh hoàng" khoe khoang về có là 500.000 dòng mã. Đó là một vấn đề phức tạp, không có nghi ngờ. Nhưng đó là rất nhiều mã, chắc chắn có một nỗ lực lập trình khá lớn đằng sau nó. Có ai biết gì về dự án này không? Tôi chỉ có thể tưởng tượng nó là một loại nhúng C.


91
Tại sao người ta sẽ cho rằng chỉ có một ngôn ngữ liên quan đến dự án.
Giàn khoan

5
Điểm tốt, chắc chắn, nó có thể có một bề rộng của công nghệ liên quan đến nó. Tôi muốn biết thêm về tất cả những điều đó :)
InfinitiesLoop

3
Phần nào? Tàu vũ trụ? Người đi lang thang? Dụng cụ? Hệ thống mặt đất? Như các ý kiến ​​khác chỉ ra, có lẽ có một số ngôn ngữ được sử dụng trong các thành phần khác nhau. Không có gì phải bàn cãi khi trình biên dịch chương trình được sử dụng cho một số thành phần quan trọng.
GreenMatt

67
Thành thật mà nói, khi nhìn thấy con số 500kloc, tôi bắt gặp mình nghĩ "Chỉ có?" Có thể thực tế là Haskell, nhưng đã đọc một chút về các dự án trước đây và ngôn ngữ cấp thấp của họ, điều này dường như quá thấp. Mã C 2,5mio được trích dẫn dưới đây là đáng tin cậy hơn.
Philip Kamenarsky

19
Một câu hỏi thú vị hơn rằng "trong ngôn ngữ nào?" "với quá trình gì?" . Đó là quá trình tạo ra sự khác biệt và NASA đã sử dụng một quy trình nghiêm ngặt trong nhiều thập kỷ nay.
dmckee

Câu trả lời:


506

Nó đang chạy 2,5 triệu dòng C trên bộ xử lý RAD750 do BAE sản xuất . Các JPL có thêm một chút thông tin nhưng tôi nghi ngờ nhiều chi tiết không được công bố. Dường như các kịch bản thử nghiệm đã được viết bằng Python.

Hệ điều hành cơ bản là VxWorks RTOS của Wind River . Các RTOS trong câu hỏi có thể được lập trình trong C, C ++, Ada hoặc Java. Tuy nhiên, chỉ C và C ++ là tiêu chuẩn cho HĐH, Ada và Java được hỗ trợ bởi các tiện ích mở rộng. Wind River cung cấp một lượng lớn chi tiết cho các cung và VxWorks .

Chipset cơ bản là mạnh mẽ vô lý . Thông số kỹ thuật của nó ban đầu có vẻ không nhiều nhưng nó được phép có một và chỉ một "màn hình xanh" cứ sau 15 năm. Hãy nhớ rằng, điều này đang bị bắn phá từ bức xạ sẽ giết chết con người nhiều lần. Trong không gian, sự mạnh mẽ chiến thắng tốc độ. Tất nhiên, sự mạnh mẽ như thế đi kèm với chi phí. Trong trường hợp này, đó là một khoản tiền mát mẻ từ 200.000 đến 500.000 đô la.

Một lập trình viên Erlang nói về các tính năng của máy tính và cơ sở mã trên Curiosity.


48
Các tiêu chuẩn mã hóa ngôn ngữ JPL C, đặc biệt dành cho các môi trường nhúng thay vì "phần mềm mặt đất" như họ gọi. lars-lab.jpl.nasa.gov/JPL_Coding_St Chuẩn_C.pdf
Patrick Hughes

80
@Docate: Đây là một nhiệm vụ quan trọng mà NASA sẽ không mạo hiểm. Con người viết lắp ráp mắc nhiều lỗi hơn, đó là một thực tế được đo lường.
MSalters

22
Mã C được biên dịch là mã máy, ngôn ngữ lắp ráp là mã máy, tôi không thấy sự khác biệt. Không có sự khác biệt lớn về hiệu suất khi bạn bắt đầu.
Ramhound

23
NASA rất cẩn thận với mã của họ. Mọi thứ (MỌI THỨ) được thực hiện trong thông số kỹ thuật đầu tiên và liên tục được xem xét, kiểm tra và tinh chỉnh. Khi nó được đưa vào dòng mã cuộc sống, nó gần như là một phần cắt và dán tham chiếu của thông số kỹ thuật. Các tập lệnh kiểm tra được đưa ra ít nhất là nhiều mã như vậy và không được phép sử dụng các thủ thuật mã thông minh 'hào nhoáng' trừ khi chúng rất cần thiết.
Stefan

99
@Amarghosh: yeah, và xem điện thoại di động của bạn hoạt động tốt như thế nào khi đi qua môi trường bức xạ cao như ngoài vũ trụ :)
whatsisname

175

Mã này dựa trên mã của MER ( Tinh thầnCơ hội ), được dựa trên tàu đổ bộ đầu tiên của họ, MPF ( Sojourner ). Đó là 3,5 triệu dòng C (phần lớn được tự động hóa), chạy trên bộ xử lý RA50 được sản xuất bởi BAE và hệ điều hành VxWorks . Hơn một triệu dòng đã được mã hóa bằng tay.

Mã được triển khai dưới dạng 150 mô-đun riêng biệt, mỗi mô-đun thực hiện một chức năng khác nhau. Các mô-đun kết hợp cao được tổ chức thành các thành phần trừu tượng hóa các mô-đun mà chúng chứa và "chỉ định một chức năng, hoạt động hoặc hành vi cụ thể". Các thành phần này được tổ chức thành các lớp và có "không quá 10 thành phần cấp cao nhất".

Nguồn: Bài phát biểu quan trọng của Benjamin Cichy tại Hội thảo về Phần mềm Chuyến bay Tàu vũ trụ (FSW-10) năm 2010 , các slide, âm thanh và video (bắt đầu với tổng quan về nhiệm vụ, thảo luận kiến ​​trúc tại slide 80).


Một người nào đó trên Hacker News đã hỏi "Không chắc điều gì có nghĩa là hầu hết mã C được tạo tự động. Từ cái gì?"

Tôi không chắc chắn 100%, mặc dù có thể có một bài thuyết trình riêng trong năm đó hoặc một năm khác mô tả quá trình tạo tự động của họ. Tôi biết rằng đó là một chủ đề phổ biến nói chung tại hội nghị FSW-11.

Simulink là một khả năng. Đây là một thành phần MATLAB phổ biến trong các kỹ sư cơ khí, và do đó, hầu hết các kỹ sư điều hướng & điều khiển, và cho phép họ 'mã hóa' và mô phỏng mọi thứ mà không nghĩ rằng họ đang mã hóa.

Lập trình dựa trên mô hình chắc chắn là điều mà ngành công nghiệp đang dần nhận thức được, nhưng tôi không biết nó bắt kịp như thế nào tại JPL hoặc liệu họ có chọn sử dụng nó khi dự án bắt đầu hay không.

Khả năng thứ ba và rất có thể là cho mã truyền thông. Với tất cả các hệ thống không gian, bạn cần gửi lệnh đến phần mềm máy bay từ phần mềm mặt đất và nhận từ xa từ phần mềm chuyến bay và xử lý nó bằng phần mềm mặt đất. Mỗi gói lệnh / từ xa là một cấu trúc dữ liệu không đồng nhất và cần thiết là cả hai bên đều làm việc từ cùng một định nghĩa gói chính xác và định dạng gói để nó được định dạng chính xác ở một bên và được phân tích cú pháp ở phía bên kia. Điều này liên quan đến việc có được rất nhiều thứ đúng, bao gồm loại dữ liệu, kích thước và độ bền (mặc dù cái sau thường là một thứ toàn cầu; bạn có thể có nhiều bộ xử lý trên tàu với độ bền khác nhau).

Nhưng đó chỉ là bề mặt. Bạn cần rất nhiều mã lặp đi lặp lại ở cả hai bên để xử lý những việc như ghi nhật ký, xác thực lệnh / từ xa, kiểm tra giới hạn và xử lý lỗi. Và sau đó bạn có thể làm những điều tinh vi hơn. Giả sử bạn có một lệnh để đặt giá trị thanh ghi phần cứng và giá trị đó được gửi lại từ xa trong một gói cụ thể. Bạn có thể tạo phần mềm mặt đất theo dõi điểm từ xa đó để đảm bảo rằng khi giá trị đăng ký này được đặt, cuối cùng thì từ xa sẽ thay đổi để phản ánh sự thay đổi. Và tất nhiên, một số điểm từ xa quan trọng hơn các điểm khác (ví dụ: dòng xe buýt chính) và được chỉ định để đi xuống trong nhiều gói, bao gồm sao chép thêm ở phía chuyến bay và sao chép dữ liệu ở phía mặt đất.

Với tất cả những điều đó, theo ý kiến ​​của tôi, việc viết một tập hợp các tệp văn bản tĩnh (bằng XML, CSV hoặc một số DSL / những gì bạn có) sẽ dễ dàng hơn nhiều, chạy chúng thông qua tập lệnh Perl / Python và uy tín! Mã!

Tôi không làm việc tại JPL, vì vậy tôi không thể cung cấp bất kỳ chi tiết nào không có trong video, với một ngoại lệ. Tôi đã nghe nói rằng mã C được tạo tự động được viết bởi các tập lệnh Python và số lượng tự động mã hóa trong một dự án thay đổi rất nhiều tùy thuộc vào người dẫn đầu của FSW.


8
Điều này có thể làm sáng tỏ Wind River, nhà thầu sản xuất VxWorks: Windriver.com/news/press/pr.html?ID=10901 Tôi đã đọc được rằng NASA có một nhóm người có nhiệm vụ tìm ra nhiều lỗi như họ có thể trong mã hệ thống kiểm soát được viết bởi một nhóm khác. Nhóm tìm kiếm lỗi được thưởng cho các lỗi họ tìm thấy và họ thực sự khá giỏi trong việc tìm ra các lỗi phức tạp. Khi tìm thấy lỗi, phân tích loại 5Y được thực hiện để tìm hiểu làm thế nào quá trình phát triển phần mềm có thể được cải thiện để loại bỏ khả năng xảy ra lỗi tương tự trong tương lai. Một quá trình rất tốn kém và tốn kém.
Jim Raden

15
@JimRaden Khi chi phí thất bại trực tiếp cho một đầu dò chạy từ vài trăm triệu đến vài tỷ đô la và vài năm (nếu có) cho một nỗ lực làm lại sự hoang tưởng cực độ trong QA là hợp lý. Chi phí gián tiếp dưới dạng hàng chục / hàng trăm sinh viên tốt nghiệp mất nhiều năm làm việc và phải bắt đầu lại công việc phd của họ và nhiều giáo sư mới, những người đang dựa vào dữ liệu để cung cấp nghiên cứu theo dõi nhiệm kỳ của họ là một tác động lớn nhưng khó hơn nhiều định lượng hơn các chi tiết đơn hàng trong ngân sách của NASA.
Dan Neely

1
C được tạo tự động từ đâu? Hãy nói với tôi rằng đó không phải là Simulink. :-)
William Payne

2
@William Payne Bài phát biểu chính nói rằng một số trong số đó là các thói quen mã hóa / giải mã giao thức tự phát (để giao tiếp với trái đất), được tạo bởi các chương trình python từ các mô tả XML.
số

1
Mã tạo tự động từ các ICD là khá tuyệt. Tôi thích ý tưởng! Tôi đã sử dụng YAML chứ không phải XML. :-)
William Payne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.