Why Bother Building a Robotic Mower?
If you’re in the market for a robotic lawn mower, you might have noticed that most models operate using the same principle: A perimeter wire is laid out around your yard and the robot simply follows this simple algorithm:
- drive straight until perimeter wire is detected.
- back off a little, rotate for some random time; goto 1.
- if battery is low, follow the wire until the base station is found.
This approach works fine for small, uncomplicated lawns, because due to the randomness, the robot will eventually reach all parts of the lawn.
Unfortunately, the approach also has lot’s of drawbacks:
- If the garden is split into multiple areas, the robot mower is not able to roam between these areas.
- If the lawn area is too large, it will take a long time for the robot to randomly reach every part of the lawn.
- The mowing pattern is not even. After manually mowing the lawn, you get a nice and even cut, whereas most robot mowers produce a random looking pattern.
Unfortunately, our property has multiple features which makes it unsuited for traditional robotic lawn mowers. Therefore I decided to build my own robotic lawn mower. Additionally, such a project is a lot of fun!
What Are the Requirements for the Robot?
After the decision to build a robotic lawn mower was made, we specified the following requirements:
- It shall be able to autonomously mow our lawn (obviously)
- It shall feature good safety. (i.e. turn off if lifted or stuck, emergency stop button, …)
- It shall not require a perimeter wire
- It shall be low cost (i.e. cheaper than a mid range off-the-shelf product)
- It shall be open source so that other people can use the project as well
- It shall be efficient and low-maintenance. (i.e. if I need to invest more to service the robot than I’d need to mow my lawn, the device is useless)
- It should be nice to look at. (i.e. not ugly)
- It should be able to avoid obstacles, but shall at least stop in front of obstacles
- It should be able to detect rain and pause mowing until weather conditions improve
With those requirements in mind, a concept was created.
In order to come up with a good mechanical hardware design, we researched the state of the art of robotic lawn mowers. The basic hardware design is very simple and similar between all of the products. Each robot consists of three sensored brushless motors, some buttons, some sensors in a waterproof case. Two geared motors for moving the robot and one directly driven motor for the mowing unit itself. The mowing motor has a spinning disk attached to it which itself holds the mowing blades. Most models also feature two passive wheels which are dragged around by the robot.
The commercially available models have contain the following safety features:
- An emergency stop button
- Wheel sensors which detect if the robot is lifted or went off a cliff
- A simple gravity sensor which can detect if the robot is flipped
After many hours of comparing robots and looking for replacement parts (connector documentation, parts numbers etc), we realized that upgrading an off-the-shelf robot is the best solution!
The reason behind this decision is simple: For as little as 350 € you can get a basic robotic lawn mower, but you can’t even get the parts you’d need to build one yourself! Additionally, by buying an off-the-shelf product, you get a nice looking, waterproof case included which saves a lot of time for this project.
For our robot, we chose the YardForce Classic 500 robot, which at the time cost 399 €. It is a little more expensive than the cheapest options we found, but we were fairly certain that it was hackable and had enough battery life for our application.
Unfortunately, in contrast to the mechanics, we cannot really reuse existing electronics in the mower. The reason for this is, that on the one hand the electronics are not powerful enough for our use case and on the other hand, the electronics are closed source. Therefore we’d need to reverse engineer it in order to use it.
At this stage of the project, we’re not 100% sure about the electronics to use in the robot, but some components are a perfect fit:
- The Raspberry Pi 4, since it is widely used and has enough computational power. Additionally, it features up to five hardware serial interfaces, which allows us to talk to lots of peripherals.
- A RTK GPS board for positioning. Since we won’t use a perimeter wire, the robot needs to know its position on a known map. We decided to use the Ardusimple RTK GPS baord.
- Three Brushless Motor Controllers: In order to accurately control the three brushless motors in the mower, we use the xESC mini brushless motor controllers. This controller enables us to control the motors with FOC commutation and even provides positional and current feedback to the controller.
- A Raspberry Pi Pico as low level controller. The Pico is perfect for this use-case, since it features a fast dual-core CPU with lots of IOs. It will handle sensor IOs etc.
The next steps are to create a hardware architecture, build a mainboard, put it together and then write some software for the robot. If you want to get updates to this project, you can star the GitHub project: https://github.com/ClemensElflein/OpenMower