Close

Ubo Software v1.0 Debut

A project log for Ubo Pod: Build Apps with Rich UX on Raspberry Pi

An open source dev kit to build Raspberry Pi app with rich UI/UX with an easy to use SDK

mehrdad-majzoobiMehrdad Majzoobi 12/06/2024 at 06:370 Comments

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:

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:

  1. How to write your own services/application and plug them into the Ubo App
  2. Core design of Ubo App and how it works
  3. The challenges we faced while developing Ubo App and how we solved them
  4. 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