{"repo":"ClemensElflein/OpenMower","free":true,"listed":false,"github":"https://github.com/ClemensElflein/OpenMower","clone":"git clone https://github.com/ClemensElflein/OpenMower.git","description":"Let's upgrade cheap off-the-shelf robotic mowers to modern, smart RTK GPS based lawn mowing robots!","language":"Shell","stars":6671,"topics":["arduino","gps","landscaping","lawn-mower","path-finding","raspberry-pi","robomow","robot","robotics","ros","rtk"],"license":null,"category":"robotics_system","readme_excerpt":"<p align=\"center\">\n  <a>\n    <h1 align=\"center\">OpenMower - The DIY Smart Mowing Robot for Everyone</h1>\n    <img align=\"center\" src=\"./img/open_mower_header.jpg\">\n  </a>\n</p>\n<br>\n<p align=\"center\">\n  <a href=\"#license\"><img src=\"https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg\" /></a>\n</p>\n<br>\n<p align=\"center\"><b>Join the Discord server for OpenMower discussion:</b></p>\n<p align=\"center\"><a href=\"https://discord.gg/jE7QNaSxW7\" target=\"_blank\"><img src=\"https://badgen.net/badge/icon/discord?icon=discord&label\" /></a></p>\n<br>\n<br>\n\n> [!WARNING]\n> <p align=\"center\"><b>DISCLAIMER:</b></p>\n>\n> **IF YOU ARE NOT 100% SURE WHAT YOU ARE DOING, PLEASE DON'T TRY THIS AT HOME! ASK IN [DISCORD](https://discord.gg/jE7QNaSxW7), IF YOU HAVE ANY QUESTIONS!**\n\n> [!IMPORTANT]\n> ### New users: start here → [openmower.de](https://openmower.de)\n>\n> This repository is the central entry point for the OpenMower project. The actual code, firmware and hardware designs live in dedicated repositories — see the [Ecosystem](#ecosystem) section below.\n\n<br>\n\n# About the Project\n\nIf you want to see a quick overview, check out this video:\n\n<p align=\"center\">\n  <a href=\"https://www.youtube.com/watch?v=BSF04i3zNGw\" target=\"_blank\"><img src=\"https://user-images.githubusercontent.com/2864655/161540069-f4263fa7-a47b-49d2-a7bc-d1cdc3a47704.jpg\" /></a>\n</p>\n\nLet's be honest: The current generation of robotic lawn mowers sucks. Basically all of these bots drive in a random direction until they hit the border of the lawn, rotate for a randomized duration and repeat. **We can do better.**\n\nOpenMower started by disassembling the cheapest off-the-shelf robotic mower we could find (YardForce Classic 500) and replacing its brain with custom hardware and open-source software — turning a dumb random-walk robot into a GPS-guided, map-aware, app-controlled mowing machine.\n\n## Project Goals\n\n:heavy_check_mark: **Autonomous Lawn Mowing:** The device mows the lawn automatically.\n\n:heavy_check_mark: **Good Safety:** Emergency stop if lifted or crashed.\n\n:heavy_check_mark: **No Perimeter Wire Needed:** Flexible support for multiple mowing areas.\n\n:heavy_check_mark: **Low Cost:** Cheaper than a mid-range off-the-shelf product.\n\n:heavy_check_mark: **Open:** Share knowledge and enable others to build their own OpenMower.\n\n:heavy_check_mark: **Nice to Look At:** You should not be ashamed to have an OpenMower mowing your lawn.\n\n:heavy_check_mark: **Avoid Obstacles:** Detect and avoid obstacles during mowing.\n\n:heavy_check_mark: **Rain Detection:** Detect bad weather and pause until conditions improve.\n\n<br>\n\n# Open Mower App\n\n![Open Mower App 1](./img/open_mower_app_1.jpg)\n\n![Open Mower App 2](./img/open_mower_app_2.jpg)\n\n<br>\n\n# Getting Started\n\n**Full documentation and step-by-step build guide:** [openmower.de](https://openmower.de)\n\nThe docs cover everything: compatibility checks, hardware shopping list (~€700 excl. mower and RTK base station), robot modification, software setup, and recording your mowing areas.\n\nBefore buying anything, read the [System Architecture overview](https://openmower.de/latest/docs/system-architecture/) and the [Step by Step Guide](https://openmower.de/latest/docs/step-by-step-guide/). The build requires intermediate electronics, Linux, and mechanical skills and typically takes a weekend for a YardForce-class mower.\n\n**Need help?** Join the [Discord](https://discord.gg/jE7QNaSxW7) — 2000+ members, active community.\n\n<br>\n\n# Ecosystem\n\nOpenMower is split across purpose-specific repositories, included here as submodules. Clone everything at once:\n\n```bash\ngit clone --recursive https://github.com/ClemensElflein/OpenMower\n```\n\nOr fetch submodules after an existing clone:\n\n```bash\ngit submodule update --init --recursive\n```\n\n## Software\n\n| Repository | Local path | Description |\n|---|---|---|\n| [ClemensElflein/open_mower_ros](https://github.com/ClemensElflein/open_mower_ros) | `software/open_mower_ros` | ROS navigation, planning and state machine |\n| [xtech/openmower-app](https://github.com/xtech/openmower-app) | `software/openmower-app` | Mobile and web app |\n| [ClemensElflein/OpenMowerOS](https://github.com/ClemensElflein/OpenMowerOS) | `software/OpenMowerOS` | Operating system image |\n\n## Firmware\n\n| Repository | Local path | Description |\n|---|---|---|\n| [xtech/fw-openmower-v2](https://github.com/xtech/fw-openmower-v2) | `firmware/fw-openmower-v2` | Mainboard firmware — motor control, sensors, hardware abstraction |\n| [ClemensElflein/xesc_firmware](https://github.com/ClemensElflein/xesc_firmware) | `firmware/xesc_firmware` | xESC motor controller firmware |\n\n## Hardware\n\n| Repository | Local path | Description |\n|---|---|---|\n| [xtech/hw-openmower-universal](https://github.com/xtech/hw-openmower-universal) | `hardware/hw-openmower-universal` | Universal mainboard |\n| [xtech/hw-openmower-yardforce](https://github.com/xtech/hw-openmower-yardforce) | `hardware/hw-openmower-yardforce` | YardForce-specific mainboard |\n| [xtech/hw-openmower-sabo](https://github.com/xtech/hw-openmower-sabo) | `hardware/hw-openmower-sabo` | Sabo / John Deere mainboard |\n\n<br>\n\n# Compatible Robotic Mowers\n\nMany robotic mowers share the same underlying hardware manufactured by SUMEC Hardware, sold under brands like YardForce, Herkules, and others. By upgrading one of these robots, a large number of devices become OpenMower-capable.\n\nCheck the [openmower website](https://openmower.de/latest/docs/getting-started/#is-your-mower-compatible) to check, if your mower is compatible.\n\n<br>\n\n# How You Can Help\n\n- **Build one** — validates the concept and generates useful documentation for others\n- **Star ⭐ and watch 👀** this repository — helps with visibility\n- **Contribute** — see [CONTRIBUTING.md](./CONTRIBUTING.md)\n- **Support** — subscribe to the [YouTube channel](https://youtube.com/c/ClemensElflein)\n\n<br>\n\n# Patents, Local Laws, Liability\n\nBefore building a robot based on the designs published here, make sure you are allowed to do so in your specific region. There may be patents and/or laws prohibiting it.\n\nThe code/schematics/PCB files are distributed in the hope that they will be useful, but **WITHOUT ANY WARRANTY**; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\nThis is a documentation of a personal project, shared freely. I am not liable for any damages your devices cause to anyone or anything. You will need real technical know-how to use this project.\n\n# License\n\n**Licenses differ across the project.** Software repositories (ROS, app, OS, firmware) are generally licensed under GPL or MIT — check the `LICENSE` file in each individual repository before use.\n\nThis repository documentation is licensed under:\n\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"><img alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /></a><br /><a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International</a>.\n\nFeel free to use the design in private/educational projects. Don't sell the design or products based on it without consent. The goal is to share knowledge, not to enable others to sell this work.\n","default_branch":"main","files":139,"tree":[".github/FUNDING.yml",".github/workflows/os-build.yaml",".github/workflows/update-submodules.yml",".gitmodules","CONTRIBUTING.md","LICENSE","README.md","configs/GPSConfig/Robot.txt","configs/GPSConfig/robot-fw-1_51.txt","configs/xESC/YardForce_Classic_Drive_Motor.xml","configs/xESC/YardForce_Classic_Mower_Motor.xml","configs/xESC/YardForce_SA650ECO_Drive_Motor.xml","configs/xESC/YardForce_SA650ECO_Mower_Motor.xml","configs/xESC/xESC_App.xml","img/clion_cmake_settings.png","img/dfplayer-clone_cut-pin.png","img/mainboard.jpg","img/open_mower_app_1.jpg","img/open_mower_app_2.jpg","img/open_mower_header.jpg","img/open_mower_mainboard.jpg","os/.gitignore","os/Makefile","os/README.md","os/build.sh","os/docker/Dockerfile","os/external/Config.in","os/external/board/openmower-cm4-migration/post-image.sh","os/external/board/openmower-cm4-migration/rootfs-overlay/init","os/external/board/openmower-kernel/kernel-fragment-cm4.config","os/external/board/openmower-kernel/kernel-fragment-cm5.config","os/external/board/openmower-kernel/kernel-fragment-common.config","os/external/board/openmower/autoboot.txt","os/external/board/openmower/cmdline-a.txt","os/external/board/openmower/cmdline-b.txt","os/external/board/openmower/genimage.cfg","os/external/board/openmower/post-build.sh","os/external/board/openmower/post-fakeroot.sh","os/external/board/openmower/post-image.sh","os/external/board/openmower/rauc-hook.sh","os/external/board/openmower/rootfs-overlay/etc/dnsmasq.conf","os/external/board/openmower/rootfs-overlay/etc/docker/daemon.json","os/external/board/openmower/rootfs-overlay/etc/dockge-stack/compose.yaml.default","os/external/board/openmower/rootfs-overlay/etc/dockge-stack/db-config.json.default","os/external/board/openmower/rootfs-overlay/etc/dockge-stack/dockge.db.default","os/external/board/openmower/rootfs-overlay/etc/entrypoint-stack/compose.yaml.default","os/external/board/openmower/rootfs-overlay/etc/entrypoint-stack/config.yaml.default","os/external/board/openmower/rootfs-overlay/etc/entrypoint-stack/env.default","os/external/board/openmower/rootfs-overlay/etc/fstab","os/external/board/openmower/rootfs-overlay/etc/modules-load.d/bluetooth.conf","os/external/board/openmower/rootfs-overlay/etc/openmower-stack/compose.yaml.default","os/external/board/openmower/rootfs-overlay/etc/openmower-stack/env.default","os/external/board/openmower/rootfs-overlay/etc/openmower-stack/mosquitto.conf.default","os/external/board/openmower/rootfs-overlay/etc/openmower/config.txt.default","os/external/board/openmower/rootfs-overlay/etc/openmower/usercfg.txt.default","os/external/board/openmower/rootfs-overlay/etc/openocd/xcore-cm4.cfg","os/external/board/openmower/rootfs-overlay/etc/openocd/xcore-cm5.cfg","os/external/board/openmower/rootfs-overlay/etc/rauc/system.conf","os/external/board/openmower/rootfs-overlay/etc/skel/.bashrc","os/external/board/openmower/rootfs-overlay/etc/skel/.profile","os/external/board/openmower/rootfs-overlay/etc/systemd/network/10-classic-names.link","os/external/board/openmower/rootfs-overlay/etc/systemd/network/15-br0.netdev","os/external/board/openmower/rootfs-overlay/etc/systemd/network/16-br0.network","os/external/board/openmower/rootfs-overlay/etc/systemd/network/20-ethernet.network","os/external/board/openmower/rootfs-overlay/etc/systemd/network/21-usb-ethernet.network","os/external/board/openmower/rootfs-overlay/etc/systemd/network/25-wireless.network","os/external/board/openmower/rootfs-overlay/etc/systemd/resolved.conf.d/10-mdns.conf","os/external/board/openmower/rootfs-overlay/etc/systemd/system.conf.d/10-watchdog.conf","os/external/board/openmower/rootfs-overlay/etc/systemd/system/bluetooth.service.d/10-persistent-state.conf","os/external/board/openmower/rootfs-overlay/etc/systemd/system/getty.target.wants/serial-getty@ttyGS0.service","os/external/board/openmower/rootfs-overlay/etc/systemd/system/serial-getty@ttyGS0.service.d/10-dumb-term.conf","os/external/board/openmower/rootfs-overlay/etc/systemd/system/systemd-networkd-wait-online.service.d/10-any.conf","os/external/board/openmower/rootfs-overlay/etc/systemd/system/wpa_supplicant@wlan0.service.d/10-openmower.conf","os/external/board/openmower/rootfs-overlay/etc/systemd/timesyncd.conf.d/10-fallback-ip-ntp.conf","os/external/board/openmower/rootfs-overlay/etc/tmpfiles.d/dnsmasq.conf","os/external/board/openmower/rootfs-overlay/etc/tmpfiles.d/docker-stacks.conf","os/external/board/openmower/rootfs-overlay/etc/tmpfiles.d/home-root.conf","os/external/board/openmower/rootfs-overlay/etc/tmpfiles.d/openmower.conf","os/external/board/openmower/rootfs-overlay/etc/udev/rules.d/80-openmower-wlan.rules","os/external/board/openmower/rootfs-overlay/etc/udev/rules.d/81-openmower-serial-access.rules","os/external/board/openmower/rootfs-overlay/etc/webterminal-stack/compose.yaml.default","os/external/board/openmower/rootfs-overlay/etc/webterminal-stack/env.default","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-detect-hardware","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-expand-data","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-persist-etc","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-persist-machine-id","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-persist-timesync","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-set-hostname","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-sync-bootcfg","os/external/board/openmower/rootfs-overlay/usr/bin/openmower-usb-gadget-init","os/external/board/openmower/rootfs-overlay/usr/lib/rauc/tryboot-backend","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system-preset/40-openmower.preset","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/dnsmasq.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/dockge.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/entrypoint.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-check-update.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-check-update.timer","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-detect-hardware.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-etc-overlay.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-expand-data.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-hostname.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-machine-id.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-sync-bootcfg.path","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-sync-bootcfg.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-timesync-persist.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/openmower-usb-gadget-init.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/rauc-mark-good.service","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/rauc-mark-good.timer","os/external/board/openmower/rootfs-overlay/usr/lib/systemd/system/webterminal.service","os/external/configs/openmower_cm4_migration_defconfig","os/external/configs/openmower_defconfig","os/external/configs/openmower_kernel-cm4_defconfig","os/external/configs/openmower_kernel-cm5_defconfig","os/external/external.desc","os/external/external.mk","os/external/package/improv-ble/Config.in","os/external/package/improv-ble/files/improv-ble","os/external/package/improv-ble/files/improv-ble.service","os/external/package/improv-ble/improv-ble.mk","os/external/package/improv-serial/Config.in","os/external/package/improv-serial/files/improv-serial","os/external/package/improv-serial/files/improv-serial.service","os/external/package/improv-serial/improv-serial.mk","os/external/package/openmower-cli/Config.in","os/external/package/openmower-cli/openmower-cli.mk","os/external/package/openmower-ros/Config.in","os/external/package/openmower-ros/files/mower_params.yaml.default","os/external/package/openmower-ros/files/openmower-check-config","os/external/package/openmower-ros/files/openmower-nspawn-start","os/external/package/openmower-ros/files/openmower-shell","os/external/package/openmower-ros/files/openmower-start","os/external/package/openmower-ros/files/openmower.conf.example","os/external/package/openmower-ros/files/openmower.service","os/external/package/openmower-ros/openmower-ros.mk","os/external/package/vcgencmd/Config.in","os/external/package/vcgencmd/vcgencmd.mk","os/keys-gen-dev.sh","os/scripts/migrate-to-openmower.sh","os/scripts/rebuild-changed-local-packages.sh"],"storefront":"/r/ClemensElflein","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/ClemensElflein/OpenMower/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}