The Kabot robot is a hardware and software solution that aims to lower the entry barrier to mobile robotics. The concept is based around simple network-enabled embedded platform (i.e. ESP32-S3) with firmware based on Zehyr RTOS, which has sensors and actuators connected to it, and sends State and receives Control messages from much beefier processing unit - the computer. This split allows the hardware to be small and cost effective, while the hardware that has the processing power for more advanced algorithms is already available for the person willing to dive into the world of robotics.
Hardware - Electronics and Mechanics
Currently, the robot hardware is at its second revision, packed with cost-effective features, in contrary to the first version, which was completely bare-bones. The mechanical parts are designed using FreeCAD and 3D printed with some little exceptions, which were not viable to print due to the low cost of China-sourced parts, such as wheels. The electronics has been designed using KiCad and consist of few distinct sections (however, on a single PCB).
Based on the ESP32-S3-N16R8 MCU on Wroom-1 module, which is responsible for communication with the PC, fetching data from the sensors, and executing control messages - driving the motors.
This MCU has a built-in USB JTAG interface, which allows for flashing and debugging the robot firmware without the need of any external tools, besides USB-C cable.
There is also onboard USB HUB (CH334F) and USB-to-serial adapter (CH343P), which allows for connecting to the robot over the raw UART interface, which exposes first-stage bootloader logs, and a connector which allows for splitting the USB-C lanes, and injecting offboard processing units, such as embedded Linux board (instead of the beefy PC, to make the robot self-contained if needed)
The USB-C connector that is used to program the robot, is also used to charge the robot built-in battery, which is a single Lithium-Ion 18650 sized cell. The same chip is also responsible for stepping the battery voltage up to 5V, which is then fed to the motor drivers to have somehat stable motor power supply, and stabilized to 3.3V for the MCU. The chip is the thing used in powerbanks - INJOINIC IP5306.
Motors are driven by two DRV8837 motor drivers (up to 1.8A per motor). Each motor driver is supplied via INA219 I2C Current/Power monitor. The motors are chinese N20 sized 298:1 micro gearmotors, equipped with magnetic incremental encoders. The power supply branch for the rest of the system also has it's own IN219 sensor. There is also voltage divider connected directly do the battery terminals (or rather semi-directly - via a switch that gets opened when the robot is not powered up, to avoid entirely draining the battery).
Besides the current sensors and encoders, robot has a bunch of on-board sensors:
- 6 Degrees of Freedon Inertial Measurement Unit: TDK ICM-42670-L
- 3 Degrees of Freedom Magnetometer: MEMSIC MMC5603NJ
- dual visible light sensors (left and right): LITEON LTR-303-ALS
- distance sensor - ST VL53L0X on the GY-530 footprint module - this allows for supplying different distance sensors, sucha as 8x8 grid ST VL53L5X ToF sensor
These allow for implementing a wide variety of algorithms - from simple BEAM-like photovores, trough IMU sensor fusion up to localization and mapping.
The board also supplies a bunch of addresable RGB LEDs.
Software - Human Machine Interface and Firmware
To make the robot algorithms writing as simple and comfortable as possible, a Human-Machine-Interface has been developed. The HMI is kept to be as welcoming as possible, similar to the Arduino IDE - only the necessary stuff is exposed to the user, and it is exposed in as readable and simple as possible manner. The HMI connectos to the robot and acts as a sensor values plotter and robot controller. User writes Python code, which is then executed on the PC, fed the sensor readings, end outputs motor controls to the robot. The built-in code editor has syntax highlighting and displays runtime errors and exceptions next to the code line. The HMI also allows for Over-the-Air firmware updates of the robot firmware.
Firmware of the robot is based on the Zephyr Real Time Operating System. The main purpose of the firmware is to get the sensor readings, send them to the PC and act based on the control messages from this PC. Beyond that, the firmware also allows for discovery of the robots connected to the same network, blinking lights and exposes Zephyr shell over Serial over USB connection, that allows for tinkering with the firmware on the lower level (and providing wifi credentials).