Máy tính từ lâu đã là một phần không thể thiếu trong những chuyến bay lên không gian - cả đối với những người dưới mặt đất lẫn bên trong tàu vũ trụ. SpaceX đã đưa mối liên hệ này lên một tầm cao mới.
Trong bài viết này, chúng ta sẽ được nghe Steven Gerding, trưởng nhóm phát triển phần mềm của tàu Dragon, nói về những thách thức đặc biệt trong quá trình tạo ra hệ thống phần mềm phục vụ các sứ mệnh của SpaceX.
Vào ngày 23/4/2021, SpaceX và NASA đã thực hiện sứ mệnh thứ hai của tàu Dragon (Crew-2) lên Trạm vũ trụ Quốc tế (ISS), đánh dấu chuyến bay có người lái đầu tiên đưa các phi hành gia lên không gian bằng tên lửa Falcon 9 và tàu Dragon. Khoảng 24 giờ sau đó, tàu Dragon đã tự động ghép nối với ISS, và đây cũng là lần đầu tiên có hai tàu Crew Dragon đồng thời liên kết với phòng thí nghiệm đang bay trên quỹ đạo Trái đất này. Sự kiện nói trên được xem là khởi đầu của một kỷ nguyên mới đối với SpaceX, với các sứ mệnh đưa phi hành gia lên ISS dự kiến được công ty của Elon Musk định kỳ thực hiện trong tương lai.
Công việc thực sự của một kỹ sư phát triển phần mềm như Gerding chủ yếu được thực hiện bằng C++, vốn đã là ngôn ngữ lập trình mà SpaceX tin dùng từ những ngày đầu hoạt động. Phần mềm của họ sẽ đọc những tập tin cấu hình dạng văn bản, mà theo Gerding thì nhóm của anh "đã phát triển những ngôn ngữ chuyên biệt đơn giản để diễn đạt những thứ đó, để các kỹ sư khác không chuyên về phần mềm trong công ty có thể đọc hiểu được".
SpaceX và NASA đã thực hiện sứ mệnh thứ hai của tàu Dragon (Crew-2).
Phần mềm bay bên trong các tên lửa của SpaceX được thiết kế xoay quanh khái niệm "chu kỳ điều khiển". "Bạn đọc tất cả các thông tin đầu vào: các cảm biến mà chúng tôi đọc vào thông qua một ADC, các gói dữ liệu từ mạng lưới, dữ liệu từ một IMU, các thông tin cập nhật từ một cảm biến theo dõi sao hay cảm biến dẫn đường, các mệnh lệnh từ mặt đất" - Gerding nói. "Bạn sẽ xử lý một số trong đó để xác định được trạng thái của mình, như bạn đang ở vị trí nào trên thế giới, hay tình trạng của hệ thống hỗ trợ sự sống. Việc này sẽ xác định tín hiệu đầu ra của bạn - bạn viết chúng, chờ cho đến thời điểm tiếp theo, và sau đó làm mọi thứ một lần nữa"
Chu kỳ điều khiển thể hiện một số yêu cầu về hiệu suất của phần mềm. "Trên Dragon, một số máy tính chạy chu kỳ điều khiển ở xung nhịp 50Hz và một số chạy ở 10Hz. Máy tính chính chạy ở 10Hz. Đó là máy tính quản lý tổng thể sứ mệnh và gửi mệnh lệnh đến các máy tính khác. Một vài trong số đó cần phản ứng nhanh hơn trước các sự kiện nhất định, do đó chúng chạy ở 50Hz"
Có rất nhiều loại máy khác nhau giao tiếp với hệ thống bay trung tâm. "Chúng tôi có dữ liệu đầu vào từ các cảm biến trên toàn bộ tàu, đủ loại cảm biến khác nhau". Nhiều cảm biến dùng để đo các giá trị bên trong, rất quan trọng đối với tình trạng của tàu và phi hành đoàn. "Nhiệt độ là tối quan trọng. Đối với các phương tiện có phi hành đoàn, chúng tôi có các cảm biến khí oxy và carbon dioxide, cảm biến áp suất khoang, và vài thứ tương tự"
Một bộ các cảm biến khác sẽ theo dõi tình trạng bên ngoài để hỗ trợ điều hướng và viễn trắc. "Chúng là các cảm biến IMU, GPS, và theo dõi sao". Một khi chúng đến đủ gần với trạm vũ trụ, chúng sẽ sử dụng hệ thống range finder bằng tia laser.
Một thành phần khác của chu kỳ điều khiển là dữ liệu đầu ra. "Có hai loại dữ liệu đầu ra khác nhau. Một loại dùng để "đóng hoặc mở một van" hoặc "vặn nút tắt hoặc bật". Loại còn lại là dữ liệu viễn trắc, về cơ bản là một luồng gồm các cặp giá trị khoá, cứ mỗi 20 - 100 milli-giây sẽ cho bạn biết giá trị của một thứ nhất định"
Chu kỳ điều khiển thể hiện một số yêu cầu về hiệu suất của phần mềm.
Đôi lúc các kết quả đến trực tiếp từ các cảm biến dưới dạng dữ liệu thô. Nhưng phần lớn thời gian chúng sẽ được xử lý trước. "Đó có thể là một loại giá trị đã được tính toán từ phần mềm, như giá trị hiện tại của tình trạng máy móc hay kết quả của một thuật toán tạo ra dữ liệu đầu ra"
Khi thiết bị ở trên mặt đất, dữ liệu đi qua một đường truyền có dây với tốc độ tryền tải cao. "Một khi nó cất cánh, sẽ có các hệ thống liên lạc khác nhau cho phép chúng tôi truy cập nhiều bộ dữ liệu viễn trắc từ dưới mặt đất". Khi nó trở lại mặt đất, sẽ có các hệ thống cho phép các điều hành viên đánh giá các giá trị tức thời và đưa ra những quyết định liên quan việc điều khiển phương tiện. Ngoài ra còn có một hệ thống lưu trữ dữ liệu trọng yếu phục vụ các sứ mệnh sau này, khá quan trọng nếu bạn dự định tái sử dụng tên lửa đẩy và tàu con thoi trong tương lai.
Dragon hiện tự động ghép nối vào ISS và mục tiêu cuối cùng của SpaceX là phương tiện này sẽ tự động hoá hoàn toàn. "Chúng tôi có cơ chế để các phi hành gia kiểm soát và lái phương tiện nếu cần thiết - đó là khả năng chúng tôi từng biểu diễn trong sứ mệnh Dragon Demo-2" - Gerding nói.
Khi được hỏi về những gì sẽ xảy ra nếu có lỗi bất ngờ, anh cho biết: "Chúng tôi có các bản sao của phần cứng, bao gồm phần cứng máy tính hay các cảm biến hay các bộ dẫn động, và do đó chúng tôi có thể phát hiện ra lỗi và tìm cách giải quyết chúng"
Gerding chỉ ra rằng không có cách nào để bảo vệ hệ thống trước các lỗi phần mềm do sơ suất mà ra. "Chúng tôi cố gắng thiết kế phần mềm theo hướng nếu nó bị lỗi, tác động gây ra sẽ là tối thiểu". Ví dụ, nếu một lỗi phần mềm làm ảnh hưởng lên hệ thống đẩy, nó sẽ không ảnh hưởng đến hệ thống hỗ trợ sự sống hay các chức năng của hệ thống dẫn đường như lái tàu vũ trụ và ngược lại. "Cách ly các hệ thống con khác nhau là chìa khoá giải quyết tình huống"
Phần mềm được thiết kế mang tính phòng thủ, đến mức mà ngay cả bên trong một linh kiện, SpaceX cũng tìm cách để cách ly những tác động của lỗi xảy ra. "Chúng tôi luôn kiểm tra các mã lỗi và giá trị trả về. Chúng tôi còn có thể cho phép các điều hành viên hoặc phi hành đoàn bỏ qua nhiều phần khác nhau của thuật toán."
Không có cách nào để bảo vệ hệ thống trước các lỗi phần mềm do sơ suất mà ra.
Một phần quan trọng trong quy trình phát triển phần mềm là xác thực và phê chuẩn. "Viết phần mềm chỉ là một phần nhỏ của cả một quá trình sẵn sàng cho chuyến bay vào không gian"
Với sứ mệnh bay thử đầu tiên (Demo-1) lên ISS, phần mềm được NASA yêu cầu chỉ được dính tối đa 2 lỗi trong hệ thống. "Chúng tôi triển khai kiến trúc ba máy tính xâu chuỗi với nhau và cần một hệ thống để điều khiển nó" - Gerding nói. Kinh nghiệm về các hệ thống phân tán sau thời gian làm việc tại Google giúp anh trở thành lựa chọn phù hợp cho công việc mới này. "Chỉ có 10 người trong nhóm phần mềm vào thời điểm đó. Tôi quản lý và làm việc cùng họ. Tôi thấy các hệ thống phân tán thực sự thú vị"
Tại Google, những yêu cầu về thời gian thao tác rất khác biệt. "Bạn sẽ muốn quy trình của bạn bị thất bại, nếu có thứ gì đó bất thường xảy ra. Khi đó, một trong hàng ngàn quy trình tương tự nhau sẽ được khởi động lại. Nếu bạn thất bại đủ nhiều, bạn sẽ thu được thông tin cần thiết và có thể dành thời gian nghiên cứu vấn đề, rồi xây dựng một giải pháp để giải quyết nó"
Tại Google, những rủi ro đó là một tín hiệu hữu ích trong số nhiều thứ khác. Nhưng hướng tiếp cận đó không phù hợp với những tên lửa có người lái. "Tại SpaceX, chúng tôi thực sự không muốn các quy trình thất bại do một lỗi phần mềm. Chúng tôi cần tiếp tục với phần còn lại của phần mềm chưa bị tác động bởi lỗi. Chúng tôi vẫn cần biết lỗi gì và đó là lúc những dữ liệu viễn trắc phát huy tác dụng, nhưng chúng tôi muốn mọi thứ phải tiếp tục, kiểm soát nó theo cách tốt nhất có thể"