Mars Curiosity Rover의 소프트웨어는 무엇입니까?


544

화성 호기심 로버가 성공적으로 착륙했습니다 및 프로모션 비디오 '공포의 칠분 "하나의 코드 50 개 라인 인에 대한이 자랑. 복잡한 문제입니다. 의심 할 여지가 없습니다. 그러나 그것은 많은 코드이며, 그 뒤에는 상당히 큰 프로그래밍 노력이있었습니다. 이 프로젝트에 대해 아는 사람이 있습니까? 나는 그것이 일종의 임베디드 C라고 상상할 수 있습니다.


91
왜 프로젝트에 하나의 언어 만 관련되어 있다고 가정합니까?
Rig

5
좋은 지적입니다. 아마도 광범위한 기술과 관련이있을 것입니다. 나는 그 모든 것에 대해 더 알고 싶습니다 :)
InfinitiesLoop 4

3
어느 부분? 우주선? 로버? 악기? 지상 시스템? 다른 의견에서 알 수 있듯이 다른 구성 요소에는 여러 언어가 사용되었을 수 있습니다. 시간 결정적인 구성 요소 중 일부에 어셈블러가 사용되었다는 것은 의심의 여지가 없습니다.
GreenMatt

67
솔직히 말하면, 500kloc 숫자를 보았을 때 "Only?" 하스켈이라면 현실적 일 수 있었지만, 이전 프로젝트와 저수준 언어에 대해 조금 읽은 것은 너무 낮은 것 같았습니다. 아래에 인용 된 2.5mio loc C 코드가 더 믿을 만합니다.
Philip Kamenarsky

19
더 흥미로운 질문은 "어떤 언어로?" 이다 "어떤 과정을?" . 그것은 차이를 만드는 과정이며 NASA는 수십 년 동안 엄격한 것을 사용해 왔습니다.
dmckee

답변:


506

BAE에서 제조 한 RAD750 프로세서 에서 250 만 라인의 C 를 실행하고 있습니다. JPL은 좀 더 정보를 가지고 있지만 많은 세부 사항이 공개되지 않은 의심 할. 테스트 스크립트는 Python으로 작성된 것으로 보입니다.

기본 운영 체제는 Wind River의 VxWorks RTOS 입니다. 문제의 RTOS 는 C, C ++, Ada 또는 Java로 프로그래밍 할 수 있습니다. 그러나 C 및 C ++ 만 OS에 표준이며 Ada 및 Java는 확장에서 지원됩니다. 윈드 리버는 VxWorks의 방법 과 이유에 대해 많은 세부 정보를 제공합니다 .

기본 칩셋은 거의 터무니없이 강력 합니다. 사양은 처음에는별로 좋아 보이지 않을 수도 있지만 15 년마다 하나의 "블루 스크린"만 가질 수 있습니다. 명심하십시오, 이것은 인간을 여러 번 죽이는 방사선으로 인한 충격을 받고 있습니다. 우주에서는 견고성이 속도보다 뛰어납니다. 물론 견고성은 비용이 많이 듭니다. 이 경우 멋진 $ 200,000 ~ $ 500,000입니다.

얼랑 프로그래머는 이야기 호기심에 컴퓨터와 코드베이스의 기능에 대해.


48
JPL C 언어 코딩 표준, 특히 "지상 소프트웨어"대신 임베디드 환경에 적합합니다. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes

80
@Dynamic : NASA가 위험을 감수하지 않는 것은 중요한 임무입니다. 인간의 글쓰기 어셈블리는 더 많은 오류를 만듭니다. 그것은 측정 된 사실입니다.
MSalters

22
컴파일 된 C 코드는 기계 코드이고 어셈블리 언어는 기계 코드입니다. 차이를 보지 못합니다. 당신이 그것을 얻을 때 큰 성능 차이가 없습니다.
Ramhound

23
NASA는 그들의 코드에 대해 조심스럽게주의합니다. 모든 것 (모든 것)은 먼저 사양에서 수행되며 반복적으로 검토, 확인 및 조정됩니다. 라이프 코드 스트림에 들어가면 스펙 참조를 거의 잘라내어 붙여 넣습니다. 테스트 스크립트는 최소한 코드만큼이나주의를 기울여야하며, 꼭 필요한 경우가 아니면 '깜박 거리는'또는 영리한 코드 트릭은 허용되지 않습니다.
Stefan

99
@Amarghosh : 예, 그리고 우주와 같은 고 방사선 환경을 통과 할 때 휴대폰이 얼마나 잘 작동하는지 확인하십시오. :)
whatsisname

175

이 코드는 첫 번째 착륙선 인 MPF ( Sojourner )를 기반으로 한 MER ( Spirit and Opportunity ) 의 코드를 기반으로합니다 . BAEVxWorks 운영 체제 에서 제조 한 RA50 프로세서에서 실행되는 350 만 라인의 C (대부분 자동 생성) 입니다. 백만 줄 이상이 직접 코딩되었습니다.

코드는 각각 다른 기능을 수행하는 150 개의 개별 모듈로 구현됩니다. 고도로 결합 된 모듈은 포함 된 모듈을 추상화하고 "특정 기능, 활동 또는 동작을 지정"하는 구성 요소로 구성됩니다. 이러한 구성 요소는 추가 계층으로 구성되며 "최상위 구성 요소는 10 개 이하"입니다.

출처 : 2010 년 FSW-10 (Spacecraft Flight Software) 워크샵 , 슬라이드, 오디오 및 비디오 워크숍 에서 Benjamin Cichy의 기조 연설 (미션 개요, 슬라이드 80의 아키텍처 토론으로 시작).


Hacker News의 누군가가 "대부분의 C 코드가 자동으로 생성된다는 것이 무엇인지 확실하지 않습니다. 무엇으로부터?"

그 해 또는 다른 해에 자동 생성 프로세스를 설명하는 별도의 프레젠테이션이있을지라도 100 % 확신 할 수는 없습니다. 나는 그것이 FSW-11 컨퍼런스에서 일반적으로 인기있는 주제라는 것을 알고 있습니다.

Simulink 가 가능합니다. 기계 엔지니어들에게 인기있는 MATLAB 구성 요소이므로 대부분의 내비게이션 및 제어 엔지니어이므로 코딩을 생각하지 않고 사물을 '코딩'하고 시뮬레이션 할 수 있습니다.

모델 기반 프로그래밍은 업계에서 천천히 인식하고 있지만 JPL 에서 얼마나 잘 파악하고 있는지 또는 프로젝트가 시작될 때 사용하기로 선택 했는지는 잘 모르겠습니다 .

세 번째로 가능성이 높은 통신 코드입니다. 모든 우주 시스템에서는 지상 소프트웨어에서 비행 소프트웨어로 명령을 전송하고 비행 소프트웨어에서 원격 측정을 수신하여 지상 소프트웨어로 처리해야합니다. 각 명령 / 텔레 메 트리 패킷은 이기종 데이터 구조이며, 양쪽이 정확히 동일한 패킷 정의에서 작동하고 패킷이 한 쪽에서 올바르게 형식화되고 다른 쪽에서 구문 분석되도록 패킷을 형식화해야합니다. 여기에는 데이터 유형, 크기 및 엔디안 (endianness)을 포함하여 많은 것들을 올바르게 얻는 것이 포함됩니다 (후자는 일반적으로 전역 적이지만 엔디안이 다른 여러 프로세서를 내장 할 수 있음).

그러나 그것은 단지 표면 일뿐입니다. 로깅, 명령 / 원격 분석 유효성 검사, 한계 검사 및 오류 처리와 같은 작업을 처리하려면 양쪽에 많은 반복 코드가 필요합니다. 그리고 더 정교한 일을 할 수 있습니다. 하드웨어 레지스터 값을 설정하라는 명령이 있고 해당 값이 특정 패킷의 원격 측정으로 다시 전송되었다고 가정하십시오. 이 레지스터 값이 설정 될 때 원격 측정이 변경 사항을 반영하도록 변경되도록 원격 측정 지점을 모니터링하는 접지 소프트웨어를 생성 할 수 있습니다. 물론 일부 원격 측정 지점은 다른 원격 측정 지점보다 중요하며 (예 : 주 버스 전류) 여러 패킷으로 다운되도록 지정됩니다. 여기에는 비행 측의 추가 복사와지면 측의 데이터 중복 제거가 포함됩니다.

이 모든 것, 정적 텍스트 파일 모음 (XML, CSV 또는 일부 DSL / What-have-you)을 작성하고 Perl / Python 스크립트를 통해 실행하는 것이 훨씬 쉽습니다 (제 생각에)! 암호!

JPL에서 일하지 않으므로 비디오에 포함되지 않은 세부 정보는 예외로 제공 할 수 없습니다. 자동 생성 된 C 코드는 Python 스크립트로 작성되며 프로젝트의 자동 코딩 양은 FSW 리더가 누구인지에 따라 크게 다릅니다.


8
이는 윈드 리버, VxWorks를 만드는 계약자에 도움이 되거 수 있습니다 windriver.com/news/press/pr.html?ID=10901을 나는 NASA 사람들이 작업 한 많은 버그를 발견하는 것입니다 팀이있다 읽었습니다 그들은 다른 팀이 작성한 제어 시스템 코드에서 할 수 있습니다. 버그 찾기 팀은 찾은 버그에 대해 보상을받으며 비전 버그를 찾는 데 매우 능숙합니다. 버그가 발견되면 향후 유사한 버그의 가능성을 제거하기 위해 소프트웨어 개발 프로세스를 개선 할 수있는 방법을 찾기 위해 5Y 유형 분석이 수행됩니다. 매우 힘들고 비싼 과정입니다.
Jim Raden 2012 년

15
@JimRaden 프로브의 직접 고장 비용이 수억 달러에서 수십억 달러, 그리고 몇 년 동안 (아마도) 재실행 시도에 대해 QA의 극도의 편집증을 정당화하는 것은 정당화됩니다. 수십 년 또는 수백 명의 대학원생이 수년간의 작업을 잃고 박사 학위 작업을 다시 시작해야하는 간접 비용과 재직 기간 연구를 제공하기 위해 데이터를 사용하는 다양한 신임 교수는 또 다른 주요 타격이지만 NASA 예산의 광고 항목보다 수량화합니다.
Dan Neely

1
C는 무엇에서 자동 생성 되었습니까? 그것이 Simulink가 아니라고 말 해주세요. :-)
William Payne

2
@William Payne 기조 연설은이 키 노트 중 일부가 XML 설명에서 파이썬 프로그램에 의해 생성 된 자동 생성 프로토콜 인코딩 / 디코딩 루틴 (지구와의 통신을위한)이라고 설명합니다.
nos

1
ICD에서 자동으로 코드를 생성하는 것은 다소 멋진 일입니다. 나는 그 아이디어를 좋아한다! 그래도 XML 대신 YAML을 사용했을 것입니다. :-)
William Payne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.