The gate that fell behind, and the hop at the wall
The mower kept getting stuck in the same corner of a model of a real yard. It turned out to be two bugs stacked on top of each other. The safety gate was right but late, and the plan asked the robot for a move it could never finish. With both fixed, the same lawn went from 11.8% mowed to 99.5%. Also: the project has a new name, Mowlark.
A gate that was right, but late
Every lidar scan goes through the safety gate before the wheels move. In a small test lawn that takes a few milliseconds. In the yard model, with 22 raised beds and trees, it took 128 to 133 ms a scan, and a new scan arrives every 100 ms. So the gate fell further behind with every scan, and drive commands queued up behind it. Only 3.1 of every 20 commands a second got through, and they arrived 0.68 s late on average (the median). A robot that turns 0.68 s late overshoots its turns.
We timed every stage of the gate on every scan, and one stage was most of the bill: asking "is this point inside a mapped raised bed?" took 84 ms of each scan. In the next full run it averaged 1.8 ms.
Checking each of thousands of points against 1,525 bed corners, one point at a time, was the slow part. Now only points near a bed are checked, against an indexed shape: 194 ms down to 1.4 ms in a benchmark. Drive commands now run on their own thread, so a slow scan can't hold them up: 19.7 of 20 get through, with a median delay of zero. The gate also reports its own load every 10 s, so if it ever falls behind again, the log says so.
A hop it could never finish
With the gate fixed, the next run stopped in the same corner. This time the gate wasn't behind at all (zero warnings in 6 minutes), so the stop was real. The robot was facing a house wall.
The plan joined one lap to the next with a 0.32 m hop straight at the wall. At the end of it, the robot's nose would be 0.36 m from the wall. The gate never lets the nose get closer than 0.57 m to something it can't see past. So the robot stopped, backed off, turned, tried again and stopped again, until the mission gave up.
Why did the plan ask for that? The planner keeps transits clear of walls by more than a turn needs. The next lap's start was inside that clearance, so no transit could reach it, and the planner fell back to a straight line, aimed at the wall. The same thing happened at a shrub.
The fix has two parts:
- Start each lap at a point a transit can reach.
- If there isn't one (a single lap round a shrub, all of it close in), slide onto the lap at about 12° from a reachable point. The slide is accepted only if the nose ends up outside the gate's stop field.
To see how common this was, we planned 300 random yards, each with a house on the edge and a shrub near a corner, and checked every transit. The old planner made a hop like this in at least 51 of them. The new one made it in none. Sim-yard's Test patch, which we've mowed dozens of times, had one too. We never noticed it because that lawn's start position never happened to use it.
| The yard model, front lawn | Gate fixed only | Gate and plan fixed |
|---|---|---|
| Covered | 11.8% | 99.5% |
| Realigns (back off and turn) | 2 | 0 |
| Worst distance off the line | 0.14 m | 0.10 m |
What's still wrong
- Docking. After mowing 99.5% of that lawn, the robot failed to get onto its dock in the yard model. The dock there is close to a wall, and that's the next job.
- The Test patch's tightest corner. Ion still comes out of it 15.6 cm off the line against a 15 cm limit. The last run before these changes was 15.5 cm, so this isn't new, but it's a fail and it's on the list.
Mowlark
The project's name had the founder's family name in it, which was fine for a hobby and awkward for something meant to go public. It's now Mowlark: a lark, a little bird of open grass, that mows. Code, packages, telemetry and this site use the new name. Posts written before today keep their original wording, except that the old name and the old web addresses were taken out when the site moved to mowlark.com. Recordings made under the old names still load, and every old report still reproduces exactly.
We haven't done a trademark search yet. That happens before anything is sold or a company is formed.
Numbers
- 272 unit tests pass from a clean build, 2 of them new (no hop into the stop field; random yards).
- Gate fix: dc44ec5. Planner fix: 7d83352. Rename: bd31a9b.