Mission Control Center

16. November 2023


One big step up from last year’s participation was moving away from simple SSH-sessions to control the rover and going over to create a universal, unified, easy-to-use user interface. But to achieve that we still needed to decide on what technology to use.

However, quite early in our decision process, we came across NASA’s open source framework Open MCT. We concluded that implementing something from scratch might not be worth the effort, as we didn’t want to reinvent the wheel but rather use what’s already out there and adjust it to our specific needs.

What is Open MCT?

NASA developed Open MCT as an open source and web-based framework that can be used for mission control. Its primary goal is to make analysis, visualization, operation and support of space missions easier. Open MCT comes with a whole suite of plugins already available out of the box providing functionality such as multiple themes, a UTC time system, URL availability indicators and many more.

However, most missions have the need for very specific plugins, that might possibly only be useful for one or two missions. And that’s where Open MCT’s plugin system comes into play: you can add custom plugins and either publish them directly to Open MCT or just use them for “your own” version of Open MCT.

This goes to show that it is perhaps the most suitable technology out there for creating a Mission Control Dashboard for the ERC 2023.

Telemetry system

Open MCT also provides a telemetry system with which you can fetch sensor and telemetry data from the rover, the environment, the computer and possibly even more sources. This data can then be used in the user interface using a simple subscription model where you get notified when new values arrived.

How did we use it?

We used Open MCT and created our own dashboard-like Mission Control Center based on it adjusting it to our needs. As mentioned above, Open MCT is very customizable and we really made use of that by implementing 17 custom plugins needed for completing our tasks at the ERC.

Battery indicator

This plugin shows the current state of charge at the toolbar right next to all the other indicators. This helps us estimate how efficiently we need to use our resources and if there’s enough power left to complete a task successfully.

Beacon control

A color picker to quickly change the state and color of our LED beacon on the rover. A dropdown also allows for the change to specific states such as autonomous mode, where the LED is flashing blue.

Deep Sampling

A set of buttons and state messages allowing the rover operator to toggle the calibration as well as automation of the Deep Drilling Task at the ERC.

Drivetrain plugin

This plugin contains a button for changing the state of the Drivetrain. Depending on its current state it will either show as “Calibrate Drivetrain”, “Start Drivetrain” or “Stop Drivetrain”. Furthermore, this plugin adds two indicators to the toolbar. The first one shows the current state of the Drivetrain while the second one shows whether the ROS2-Node is able to communicate with the Motor Control Board.

Gamepad control

A plugin to connect a PS4 controller to the UI that will be used for maneuvering the rover through the tasks. It also includes three indicators: one that shows whether a controller is currently connected to this laptop, one that shows the currently set max-speed for the rover and one that indicates whether or not parallel speed for both drivetrain-axes is activated.

We even included a little help dialog to show the possible controls (can be opened using the Home-button).

Navigation Plugin

This plugin shows a top-view map of the ERC’s Mars yard as well as the rover’s current position and orientation (yaw) using a green arrow. Additionally, you can set waypoints for autonomous navigation, trigger the route calculation and start, pause, resume and stop the autonomous navigation.

You can also switch to a height-map using to button at the top.

Orientation Indicators

The name might be a bit misleading, as these are not Open MCT indicators but rather displays much like the ones you might expect to see in a plane, showing the current orientation of the rover in all three axes (yaw, pitch, roll). This allows the operator to make sure the rover is in a save state and will not fall over when driving up or down a steep slope.


RoslibJS is a library that allows for easier connection to a ROS system by translating Javascript messages to ROS and vice-versa. In this plugin we wrap the functionality of connecting to ROS and display the connection status in an indicator.

Speed Gauge

Since the default gauge plugin somehow didn’t work properly in our tests, we implemented a custom gauge displaying the speed of the rover’s four wheels at all times.

Task Buttons

A set of start and stop buttons allowing for the management of the Energy Report. Upon stop, the Energy Report PDF will automatically be created and opened up in a new browser tab.

Telemetry text

This plugin aims to be very generic in that you can create a view showing the current value of a telemetry value together with its name and unit.

Theme toggle

An small button on the toolbar for switching between Open MCT’s light and dark themes.


A plugin to display the WebRTC-video streams we use from our Raspberry Pi camera streams. It is also possible to take a screenshot and to restart a camera.

Voltage Measurement

This plugin is used during the Maintenance Task at the ERC where we need to measure a voltage on command. You can start the measurement and it will show the current voltage measured as well as the maximum voltage measured between pressing the start and stop buttons.

Web storage

By default you can either use the web browser’s local storage or a static JSON-file for loading the layout in Open MCT. The static JSON-file cannot be modified and the browser’s local storage is limited to one’s computer. Thus, we implemented a simple webserver, serving one or multiple JSON-files and allowing the user to update them, once he switched to edit-mode using a button located at the toolbar.

WebSocket buttons

Another very generic button that sends a simple (empty) message to a ROS2-Topic specified upon creation of the button.

WebSocket toggle switch

Much like the WebSocket buttons plugin above, but here we do not just have one Topic but rather two and depending on the current state of a telemetry value specified, a toggle of the switch will send a message to either one or the other of the two ROS2-Topics specified upon creation.


So far, we are very happy with the decision we made to use Open MCT. It is a great framework, very extensible and easy to use. It only requires web development knowledge and the base documentation is very good. However, it would have helped if the whole plugin system and build pipeline would have been more documented.

At the ERC23, our custom built version of Open MCT really helped us by providing the essential information during the tasks. It was also very easy to troubleshoot and to extend whenever a new requirement popped up.

For future participations at the ERC we are planning to improve our plugins and create new ones where needed. Currently due to the limited development time, we aimed for the very fast approach of implementing the plugins using plain JavaScript. However, for a cleaner solution and some more manageable code, we are planning on implementing a build step into our toolchain that allows us to create VueJS-plugins, build them and only then integrate them into our Open MCT version.

Tags: Computer Science, erc-rover, ERC23, fhnw, Mission Control, Mission Control Center, software, UI

back to all articles


One comment posted about Mission Control Center


    Great plugin examples!
    I also using OpenMCT for my autonomous system project.
    Can you contribute the plugins your team made to the community?


New comment