Raspberry Pi based Mobile Command Center for Robots and other projects
- SolveBOTICS LLC
- Oct 28, 2024
- 8 min read
Updated: Apr 21
The Mobile Command Center is finished and I couldn't be more pleased with the way it turned out!

I've designed a number of RPi-based robots where a raspberry pi is embedded in the robot itself and I use a second raspberry Pi as the "base station" to control the robot. Both robot and base station are on the same WIFI network. The robot runs a python script as a socket server that receives commands and controls the motors. The base station runs a python script as the socket client that sends direction commands to the robot. The robot also runs a GStreamer script to send low-latency video to the base-station.
Up until now the base station simply meant any RPi I had available and would often end up looking like this:

or this:

This worked fine, but when I needed to move my base station setup, I would have to gather the keyboard, mouse, RPi, power supply, and monitor, then set everything back up in the new location. As you can imagine, this was inconvenient and hindered my ability to make progress.
To be able to quickly and reliably move the base station from one area to another I needed to design a solution that would combine the raspberry Pi, keyboard, mouse, monitor, and power supply together into a portable unit.
It was a long journey to go from the initial concept to the finished product, but along the way I moved away from referring to the setup as a base station and dubbed it the "Mobile Command Center", or the "mc^2" for short.

I designed the Mobile Command Center to meet the following requirements:
Design it so it fits inside a durable tactical case.
Offer multiple methods to power it including an AC/DC adapter or battery.
Design the power PCB to automatically select the power supply with the higher voltage.
Design it so it's easy to access the micro SD card and also access the Raspberry Pi.
Design it so it can work with different models of the Raspberry Pi.
Use a fullsize keyboard and add storage underneath it.
Provide a voltage meter and possibly a current meter.
Route at least two USB ports and the Ethernet port to the front panel.
Use a touch-screen monitor.
Utilize removable "expansion panels" to add or remove hardware/widgets.
Requirement 1: Design it so it fits inside a durable tactical case.
I went through a process to select the case I wanted to use for this project. There were some other factors that influenced my choice, but ultimately I channeled my inner Goldilocks and selected the case that wasn't too big and wasn't too small. I chose the Apache 3800 case, because it has the durability this project required and it also offered plenty of depth for routing cables and hardware behind and underneath the panels.

I knew the final panels would be made from polycarbonate , but it took some experimentation to develop a solution for fastening those panels to the case. I had seen other solutions that involved screwing a panel frame into the inside of the case, but I didn't like this idea. I wanted to minimize the use of screws that would penetrate the case. I also wanted to develop a solution that would allow me or anyone else to easily remove and re-install the panels for maintenance and upgrades. I found a series of plastic boxes that have brass threaded inserts. I then tested a series of different glues and attachment methods and developed an assembly process that worked. The height of the plastic boxes also serves as a spacer beneath the bottom panel. I first tried this method on the bottom part of the command center.

I then applied the same approach for the top of the command center as well. This shows the unit without the underplate panel.

This is the what the command center looks like with the bare underplate panel in place.

Here is an example with the populated underplate panel in place.


Here is the fully populated underplate panel installed, right before the bezel is installed.

Here is the command center with the bezel in place, but with the expansion/access panels removed. The right-hand panel allows access to the micro-SD card, and the left-hand panel allows access to plug in a rechargeable battery.

Requirement 2: Offer multiple methods to power it including an AC/DC adapter or battery.
Requirement 3: Design the power PCB to automatically select the power supply with the higher voltage.
Right from the start I knew I would need the flexibility to use an internal battery, or be able to power the command center from an AC/DC adapter. I designed the power distribution PCB to accept multiple power sources simultaneously and to auto-select the power source with the highest voltage.
I added a 5.5mm x 2.5mm DC input jack to the side of the command center. I thought long and hard before adding this input jack, because it would involve drilling through the case and would make it less waterproof. After much reflection and plenty of long walks, I finally decided to add it, since I don't have any requirement or plans to submerge the command center in water.

The battery I use is a 12V, 2000mAh NiMH battery. There is no charging circuit on the PCB, so the battery is removed and placed on a dedicated charger when it needs to be recharged. I added two connectors to the PCB for the battery, which allows me to hot-swap in a freshly charged battery. This allows me to switch from an old battery to a freshly charged battery without having to power down the command center. With an adapter, an external battery can be plugged into the DC input jack, so long as the external battery is not higher than 24V DC.

Shown here is the command center being powered by a 12V NIMH battery.

While the 12V battery is still connected, I can also plug in the 12V DC input.

I can then disconnect the battery and the command center seamlessly switches to the DC input for the power source, all while the command center stays up and running. Note the slight change in voltage on the meter in the photos above.

Requirement 4: Design it so it's easy to access the micro SD card and also access the Raspberry Pi.
I may want to try other operating systems or different versions of Raspbian, so I added a micro SD card extender and placed it behind the right-hand access panel. Now if I need to change the SD card, I only need to loosen four screws.

At some point I may need to change the Raspberry Pi to a different model, or maybe add a hat board to it. This process takes some time, but is still easy and repeatable. I designed the Mobile Command Center so that the major components are fastened to the top underplate, making it modular. After removing the bezel, loosening six screws, then disconnecting six cables, the top underplate can be removed and the pi can be easily accessed.



Seen here, the top underplate panel is fully removed and placed to the side. I can now access the Raspberry Pi itself. Re-assembly is done by connecting the six cables, tightening six screws, then re-installing the bezel.

Requirement 5: Design it so it can work with different models of the Raspberry Pi.
This system works with the Raspberry Pi 5.
And this system also works with the Raspberry Pi 4.
Requirement 6: Use a fullsize keyboard and add storage underneath it.
The keyboard is where I started first and I originally planned to store the battery underneath it. However, I later decided to make the cable from the battery to the power distribution PCB as short as possible. I also did not want to place the battery cable in a place where it would flex often. The keyboard is held in place using three neodymium magnets.

A finger groove near the bottom of the keyboard allows it to be lifted up. Underneath is a removable tool/accessory box, as well as room for a small computer mouse.


Requirement 7: Provide a voltage meter and possibly a current meter.
Having a voltage meter was one of the very first requirements, because I wanted to monitor the voltage level when using a battery. Knowing the current draw when operating the mobile command center is also great. Based on a nominal value of 530mA, my 2000mAH NiMH battery should provide over 3.5 hours of run time.
Requirement 8: Route at least two USB ports and the Ethernet port to the front panel.
The meter, switch, USB and Ethernet ports are all placed on their own separate panel. This gives me the flexibility to re-design this panel and add an HDMI port in place of one of the USB ports. Although, I would probably choose one of the other expansion panels to add an HDMI port, before I modified this panel.

Requirement 9: Use a touchscreen monitor
I chose a 10.1" touchscreen, which makes it easy to read the text when I have a terminal window open. A bonus feature of this monitor is that it has built-in speakers that connect through HDMI. If more volume is needed, then I can connect the command center to a Bluetooth speaker.
Requirement 10: Utilize removable "expansion panels" to add or remove hardware/widgets
I mentioned earlier that it has been a long journey to develop the Mobile Command Center. A very large part of what took so long was indecision about what features I wanted to add. At first, I imagined the top panel and its components would be "set in stone". This notion of having a fixed configuration trapped me into trying to come up with the perfect layout before I even began. "Should I add a status panel, or an audio jack?" "Where should I place them?" I was stuck until I fully embraced the idea that this project needed room to be an iterative process. I needed to let go of the requirement to make it perfect and just allow myself enough room to change my mind later. That's when I came up with the idea of using removable panels. These panels would serve as placeholders for hardware that I could add later. When ready, I simply drill a hole or custom mill a panel for a component. Better yet, using panels makes the command center reconfigurable. Let's say I develop a status display panel to monitor the CPU temp for the Raspberry Pi. Later on, if I don't need the status display I can simply switch back to a blank panel, or develop a new panel with a power standby switch. Each panel is a small blank canvas. The only panel that needs to stay is the small exhaust vent panel.

And that's it. This is a project where I experienced significant progress once I let go of the need for perfection. I still have plenty of projects to work on. And each project has many problems to solve, however I know that setting up my "base station" won't be a problem anymore. I'm excited to use this to move my robotics and other Raspberry Pi related projects forward.
Comments