Warning
PROJECT STATUS: EXPERIMENTAL / WORK IN PROGRESS
This project is currently in active development and testing.
- Stability: The serial connection with the robot firmware is still being optimized to prevent buffer overflows and disconnects.
- Thermal Issues: The Radxa Zero 3W tends to overheat (thermal throttling at 85°C) inside the enclosed chassis. Active cooling solutions are being investigated.
- Software: The ROS 2 stack is functional but requires manual tuning.
Proceed with caution. This is not yet a plug-and-play solution. Do not leave the robot unattended during operation.
OpenNeato is an open-source project designed to breathe new life into Neato robotic vacuums (specifically tested on the Neato D7) by replacing the proprietary logic board functions with a modern Single Board Computer (SBC) running ROS 2.
This project transforms your old vacuum into a smart, fully autonomous robot capable of advanced mapping, navigation, and web-based control, leveraging the power of the nav2 stack and a custom Python-based driver.
To build your own OpenNeato, you will need:
- Robot: Neato XV, Botvac, or D-Series (e.g., Neato D7 Connected).
- SBC: Radxa Zero 3W (recommended) or Raspberry Pi Zero 2 W.
- Power: Buck Converter (Step-down) to convert the robot's battery voltage (approx. 14V-16V) to 5V for the SBC.
- Storage: High-endurance MicroSD Card (16GB+).
- Connectivity: UART connection wires (TX/RX/GND) to interface the SBC with the Neato motherboard.
We recommend Ubuntu 24.04 Server (Joshua Riek's Rockchip build is currently the most stable for Radxa Zero 3W).
- Download the Image:
- Radxa Zero 3 NPU with Ubuntu 24.04 (Look for
Radxa_Zero3_NPU_Ubuntu24.img.xz).
- Radxa Zero 3 NPU with Ubuntu 24.04 (Look for
- Download the loader.bin:
- rkdeveloptool (Look for
rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin).
- rkdeveloptool (Look for
- Flash to eMMC (Radxa Zero 3W):
- Hold the Maskrom button on the board while plugging it into your PC via USB.
- Use BalenaEtcher for writing on a SD or
rkdeveloptoolto flash the.imgfile directly to the eMMC device.
- eMMC
- Prepare the image (extract it)
- (OPTIONAL) if the image is less than the eMMC, expand it (example for a 32GB eMMC):
truncate -s 28G Radxa_Zero3_NPU_Ubuntu24.img sudo gdisk Radxa_Zero3_NPU_Ubuntu24.img
-
Press in order
x(menu expert),e(relocate backup data structures to the end of the disk),w(write),Y -
Resize the partition:
sudo losetup -fP --show Radxa_Zero3_NPU_Ubuntu24.img
- Note the result: should be somethink like
/dev/loop0, now wh have to check which partition number we have to increase (look for anEXT4partition and note the number)
lsblk /dev/loop0
- Suppose to use loop0p1
sudo parted /dev/loop0 resizepart 1 100% sudo e2fsck -f -y /dev/loop0p1 sudo resize2fs /dev/loop0p1
- WiFi Setup (headless setup)
- Mount the image:
mkdir -p radxa_mount sudo mount /dev/loop0p1 radxa_mount cd radxa_mount/etc/netplan/ sudo nano 01-netcfg.yaml- Configure your network by copying and editing this file (you can configure more than one network):
network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: true optional: true wifis: wlan0: dhcp4: true optional: true access-points: "WIFI_NAME": password: "WIFI_PASSWD" "WIFI2": password: "passwd2"- Save and exit
CTRL + oandCTRL + x - Exit and umount:
sudo chmod 600 01-netcfg.yaml cd ../../../ sudo umount radxa_mount sudo losetup -D - Flashing
- Put the Radxa in Maskrom and then flash bin file and than the img (could take time)
sudo rkdeveloptool db rk356x_spl_loader_ddr1056_v1.12.109_no_check_todly.bin sudo rkdeveloptool wl 0 Radxa_Zero3_NPU_Ubuntu24.img
- Reboot
sudo rkdeveloptool rd
The installation process has been fully automated to ensure a smooth setup on Ubuntu 24.04.
-
Clone the Repository:
git clone https://github.com/94-psy/OpenNeato.git cd OpenNeato -
Run the Installer:
chmod +x installer/install.sh sudo ./installer/install.sh
-
Follow the Interactive Menu: The script uses a
whiptailinterface. Select "Install / Update" to begin. The installer will automatically:- Install system dependencies (ROS 2, Python venv, etc.).
- Set up permissions (dialout group).
- Deploy the firmware and web interface to
/opt/openneato. - Build the ROS 2 workspace.
- Configure and start
systemdservices.
Once finished, the installer will display the IP address of your robot and the URL for the Web Dashboard.
When new features or bug fixes are released, updating your robot is simple. The installation script is idempotent and handles updates automatically.
cd OpenNeato
git pull
sudo ./installer/install.shSelect "Install / Update" again. The script will detect the changes, rebuild the firmware if necessary, and restart the services.
OpenNeato is built on a modular architecture:
- OpenNeato Core (ROS 2):
- Driver Node: Interfaces with the Neato hardware via serial (Lidar, Motors, Sensors).
- Nav2 Stack: Handles mapping (SLAM), path planning, and autonomous navigation.
- Docking Server: Custom Action Server for precise docking and charging logic.
- Mission Control: Manages cleaning queues, state persistence, and battery watchdogs.
- Web Interface:
- Backend: FastAPI (Python) server that bridges the web UI with ROS 2.
- Frontend: Responsive HTML/JS dashboard for control and status monitoring.
Use at your own risk. Modifying your robot's hardware or firmware will void the manufacturer's warranty. This software is provided "as is", without warranty of any kind. The authors are not responsible for any damage to your hardware, data loss, or fires caused by improper handling of Li-Ion batteries or electrical components. Always ensure proper insulation and power regulation when modifying electronics.