The development of the software stack has been a one year+ long intense project with so many details and decisions. The v1 release is a smooth UX for headless operation. This is a heavily design-driven project with the goal of removing technical barriers and complicated shell commands with a polished UX.
Before I get into the software architecture design, let's watch a short demo
Ubo Pod and its SDK
What is Ubo Pod
Ubo Pod enables developer communities to bring openness, transparency, and privacy to the device ecosystem.
It has an LCD screen, a camera, a microphone, a pair of speakers, a set of buttons, some sensors, an LED ring, and a Raspberry Pi 4 inside. All the inputs and outputs on the Ubo Pod case are connected to the Raspberry Pi 4 through a custom PCB.
So it is basically a light weight, portable, and open-source computer that doesn't need a monitor, a keyboard, or a mouse to interact with it.
On the upcoming model that supports Pi 5, you can connect AI accelerators like Raspberry Pi AI Kit and Google Coral USB Accelerator to the Ubo Pod to run machine learning models on the edge to have your own AI assistant.
My goal is to support future models that support Pi 5 and beyond and keep support for model 4 until the end of life of the Pi 4.
Vision
We want to create a platform that is open, transparent, and respects the privacy of its users. So everything including the hardware as well as the software is open-source. Any proprietary element is opt-in. We believe that the Ubo Pod can be a great tool for developers to create applications that are not possible on other platforms. We want to create a community around the Ubo Pod that will help us to achieve this vision.
Ubo App
Ubo App is a Python library that allows you to interact with the Ubo Pod. It is compatible with Python 3.11 and above. It exposes its API to other programming languages via gRPC. So you can easily integrate with it from many programming languages including JavaScript, Python, C++, Rust, Go, Ruby, Java, etc. It includes an SDK for developers to create their applications for Ubo Pod as well as a runner app that hosts those applications.
High Level Functionality
Ubo App is designed to allow a less tech-savvy or lazy tech-savvy user to perform typical system admin tasks with ease. Here's a quick video showing some of the features:
Networking
Using the graphical user interface, you can add/delete WiFi networks (pass credentials either through QR code or Web UI), make the device a WiFi hotspot, get interface IPs, and other network related tasks.
Remote Access
Ubo Pod also helps you setup SSH, Raspberry Pi Connect, VS Code Tunnel to remotely connect to the device all without ever using a keyboard or a mouse.
System Management
You can add/remove user accounts, give users sudo access, change user passwords, and install/enable desktop environments.
Install Third Party Apps
The app lets you install and run Docker containers and run multi-container apps with Docker Compose. You just need to provide the Docker Compose config file (and other required files) and the app will take care of the rest.
Other features
You can check software version and update the device software via the graphical user interface.
Getting Started with Ubo App
Follow the installation instructions here to install it on your Ubo Pod. In case you don't have access to an Ubo Pod yet, you can follow the instructions provided here to set up a development environment on your computer. You can write and test your applications on your computer before deploying them to an Ubo Pod.
Our next software milestone in Version 2.0 is to release a virtualized Ubo Pod in your browser so that software and hardware components can be emulated. In that case, you can also use the software on a bare Raspberry Pi.
Core Design
Ubo App has a lightweight core. It is designed to be modular and extensible. It is composed of several modules named "Ubo services" or simply "services" that are responsible for different parts of the system.
Anyone can write a new service and plug it into the system on their own pods or share it with the community.
Ubo App runs on top of a redux-like store. It is a single source of truth for the whole system. Each service can subscribe to the relevant parts of the store and react to changes.
Reducers in the redux implementation used in Ubo App have the extra capability of returning a list of side effects.
The Core Menu Structure
The core mostly consists of a nested menu in the middle and a narrow footer in the bottom. The core only implements these menu items:
- Main Menu
- Apps Menu
- Settings Menu
- About (Lets the user check the version of the Ubo App, and update it if a new version is available)
- Notifications
- Power Menu
The footer renders a clock next to temperature and light sensor readings on the left and a set of status icons on the right. The core doesn't provide any status icons itself. It is up to the services to register their own status icons or use icons from nerdfonts.com which is supported by the core.
Ubo Services
Each service can register one or multiple icons in the footer and/or register one or multiple menu items in "Apps" and/or "Settings" top-level menus. The user will be able to interact with the modules through these menu items.
The Menus
Conclusion
In this post, we introduced you to the Ubo Pod and Ubo App. We explained the vision behind the project and how you can get started with Ubo App. We also explained the core design of Ubo App and how you can write your own services for it.
Upcoming Posts
In the upcoming posts, we will dive deeper into the Ubo App and its SDK. We will cover topics in these areas:
- How to write your own services/application and plug them into the Ubo App
- Core design of Ubo App and how it works
- The challenges we faced while developing Ubo App and how we solved them
- The future of Ubo App and how you can contribute to it
We are excited to see what you will build with Ubo Pod and Ubo App. We are looking forward to your contributions to the project. If you have any questions, feel free to create an issue in the Ubo App repository.
To obtain an Ubo Pod, please subscribe and follow our upcoming crowdfunding campaign on Crowdsupply.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.