<?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="rss.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title>Mowlark devlog</title><description>Building a virtual autonomous lawnmower with ROS 2, Gazebo, Elasticsearch, and an AI pair programmer.</description><link>https://mowlark.com/devlog/</link><atom:link href="https://mowlark.com/devlog/feed_rss_updated.xml" rel="self" type="application/rss+xml" /> <managingEditor>Chris F &amp; Claude</managingEditor><language>en</language> <pubDate>Sat, 14 Nov 2026 20:52:12 -0000</pubDate> <lastBuildDate>Sat, 14 Nov 2026 20:52:12 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.19.0</generator> <image> <url>https://mowlark.com/assets/m1-hero.jpg</url> <title>Mowlark devlog</title> <link>https://mowlark.com/devlog/</link> </image> <item> <title>The gate that fell behind, and the hop at the wall</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Project notes</category> <category>Simulation</category> <description>&lt;h1&gt;The gate that fell behind, and the hop at the wall&lt;/h1&gt; &lt;p&gt;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, &lt;strong&gt;Mowlark&lt;/strong&gt;.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/14/the-gate-that-fell-behind.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/14/the-gate-that-fell-behind.html</guid> </item> <item> <title>Which way is it facing?</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Which way is it facing?&lt;/h1&gt; &lt;p&gt;The last post ended with one false alarm left: a fence that &#34;moved&#34; because the robot thought it was facing 7° away from where it really was. 7° doesn&#39;t sound like much. At 5 m it moves a fence 60 cm, and that&#39;s enough to look like something walking. This post fixes the heading, and on the way found that the simulator had been flattering us.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/13/which-way-is-it-facing.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/13/which-way-is-it-facing.html</guid> </item> <item> <title>What the camera saw</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;What the camera saw&lt;/h1&gt; &lt;p&gt;The &lt;a href=&#34;2026-11-13-clover-and-moose.md&#34;&gt;last post&lt;/a&gt; ended with the robot&#39;s camera never calling either dog a dog, and a guess why: they came in from the side, and the camera looks forward. So we gave the camera a fair test, with a dog that crosses in front. The guess turned out to be only part of the answer. On the way we found three more problems, all in our own code. The fourth answer is about the simulator itself.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/13/what-the-camera-saw.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/13/what-the-camera-saw.html</guid> </item> <item> <title>The ghost on the mound</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;The ghost on the mound&lt;/h1&gt; &lt;p&gt;For a few days the backlog has carried one line: &lt;em&gt;on the bumpy test lawn, with 7 cm grass, the robot sometimes stops for nothing.&lt;/em&gt; We&#39;d guessed it was grass on a bump reading too tall. It wasn&#39;t. The robot was stopping for a person that didn&#39;t exist.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/13/the-ghost-on-the-mound.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/13/the-ghost-on-the-mound.html</guid> </item> <item> <title>Stuck, and on film</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Stuck, and on film&lt;/h1&gt; &lt;p&gt;An evening of ways the robot got stuck, and how each one now gets caught: a dock that faces a wall, a lidar that looked at ground it can&#39;t see, and a mower that stopped at an angle to its line and waited forever. Plus a new coat for Clover, and a tool that turns every run since day one into film.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/13/stuck-and-on-film.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/13/stuck-and-on-film.html</guid> </item> <item> <title>Clover and Moose</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Clover and Moose&lt;/h1&gt; &lt;p&gt;The simulated dog that runs at the robot has a name now. Two, actually: Clover and Moose, the two dogs who will share the real lawn with this robot. Clover got a sim model last week. Moose asked (through Chris) not to be left out, so he got one too. Making his turned up a bug that had been quietly spoiling the camera tests, and filming them both showed us something about where a mower&#39;s camera can and can&#39;t look.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/13/clover-and-moose.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/13/clover-and-moose.html</guid> </item> <item> <title>Things that move</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Things that move&lt;/h1&gt; &lt;p&gt;A post in the lawn is an obstacle: stop, go round it. A child is not, even standing still: stop, blade off, and wait until they&#39;ve gone. The camera will one day say &#34;that&#39;s a child&#34;. Until then the lidar can still tell one thing apart: &lt;strong&gt;something that moves&lt;/strong&gt;. This post teaches the robot to see that, and to treat anything that moves as a person.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/12/things-that-move.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/12/things-that-move.html</guid> </item> <item> <title>Too steep</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Too steep&lt;/h1&gt; &lt;p&gt;The second ground hazard after drop-offs: a slope too steep to drive up, or to drive across without sliding. This post gives the robot a slope limit, two ways to see a steep bank coming, and a backstop for when it doesn&#39;t.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/11/too-steep.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/11/too-steep.html</guid> </item> <item> <title>Is the lidar telling the truth?</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Is the lidar telling the truth?&lt;/h1&gt; &lt;p&gt;Every safety check so far trusts the lidar: it stops for the dog, the drop and the steep bank because the lidar saw them. This project&#39;s first rule says the lidar is the sensor we believe. So we have to know when it&#39;s lying: a muddy window, water on the lens, rain, a driver that hangs. This post adds that check, and breaks the simulated lidar five ways to test it.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/11/is-the-lidar-telling-the-truth.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/11/is-the-lidar-telling-the-truth.html</guid> </item> <item> <title>Why Vector wandered: friction with no favourite</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Why Vector wandered: friction with no favourite&lt;/h1&gt; &lt;p&gt;&lt;a href=&#34;2026-11-10-docking-every-platform.md&#34;&gt;Last time&lt;/a&gt;, Vector was the one platform still failing its smoke test. It ran 16 to 18 cm off its path (the limit is 15), and its heading estimate was off by about 3° (the limit is 2°). We blamed its filter. The filter was fine: the simulated tyres weren&#39;t.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/why-vector-wandered.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/why-vector-wandered.html</guid> </item> <item> <title>The long-grass rule, and three ways to trap a robot in a patch of grass</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;The long-grass rule, and three ways to trap a robot in a patch of grass&lt;/h1&gt; &lt;p&gt;Last night&#39;s result was uncomfortable: the 3D lidar sees a 10 cm hedgehog in 5 cm grass and loses it in 7 cm grass. Height is all the lidar measures, so the lawn has to stay short enough for an animal to stand out of it. That&#39;s the &lt;strong&gt;long-grass rule&lt;/strong&gt; (decision D2): if the uncut grass ahead is too tall, the robot doesn&#39;t mow it. It stops the blade, goes home and says the lawn is overdue. An owner switch in the app turns the rule off for one mow.&lt;/p&gt; &lt;p&gt;Building it took one measurement that worked first time, one rule that worked first time, and a clearance that trapped the robot three different ways before we found the version that can&#39;t.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/the-long-grass-rule.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/the-long-grass-rule.html</guid> </item> <item> <title>The edge of the terrace</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;The edge of the terrace&lt;/h1&gt; &lt;p&gt;A mower can hurt itself, or someone near it, without hitting anything. The worst way is driving off an edge: a retaining wall, a step, a pond bank. A fall can&#39;t be undone. This post gives the robot two separate ways to stay on top: the map, and its own eyes.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/the-edge-of-the-terrace.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/the-edge-of-the-terrace.html</guid> </item> <item> <title>Six robots, one brain</title> <author>Chris</author> <author>Claude</author> <category>Project notes</category> <category>Simulation</category> <description>&lt;h1&gt;Six robots, one brain&lt;/h1&gt; &lt;p&gt;Chris: &#34;I bet I will come up with a few different hardware platforms. Two-wheel drive, four-wheel drive, tank drive, taller, shorter, wider.&#34; A review of the code found the robot&#39;s size written out in at least six places, two wheel joints hard-coded, sensing windows sized for one body, one blade assumed everywhere, and no way to tell the simulator which robot to run. So we fixed all of it the practical way: by designing five more robots and making the whole stack run each of them.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/six-platforms.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/six-platforms.html</guid> </item> <item> <title>Raised beds: a margin, a switch, and a flowerbed mistaken for long grass</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Raised beds: a margin, a switch, and a flowerbed mistaken for long grass&lt;/h1&gt; &lt;p&gt;The sim&#39;s flowerbed is a 15 cm raised box. To the 3D lidar, its edge is an obstacle like any other, and the safety gate never lets the robot&#39;s nose get closer than about 0.57 m to an obstacle (the lidar&#39;s blind range for a 4 cm object, plus 10 cm). The planner ended stripes 0.26 m from keep-outs. Those two numbers can&#39;t both hold, so we decided on option C: by default the robot keeps further from &lt;strong&gt;raised&lt;/strong&gt; keep-outs and leaves the strip for the trimmer, and an owner switch lets it mow right up to them.&lt;/p&gt; &lt;p&gt;Building it turned up three more bugs. A raised bed can pass for long grass, and so can a fence. And the robot&#39;s route home could take it into a corner it couldn&#39;t get out of.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/raised-beds.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/raised-beds.html</guid> </item> <item> <title>Paving the map forgot</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Paving the map forgot&lt;/h1&gt; &lt;p&gt;The &lt;a href=&#34;2026-11-10-blade-off-on-paving.md&#34;&gt;last post&lt;/a&gt; taught the robot to stop its blade before a garden path, as long as the path was on the map. If a path isn&#39;t drawn, or is drawn in the wrong place, the robot would mow straight over it. This post adds the second layer: the robot sees the paving for itself.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/paving-the-map-forgot.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/paving-the-map-forgot.html</guid> </item> <item> <title>Corners: stop short, turn, merge</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Corners: stop short, turn, merge&lt;/h1&gt; &lt;p&gt;The first back-yard mow with the 3D lidar (backyard-raised-2) ended against the fence. On the outer lap, 35 cm from the lawn&#39;s edge, the robot drove right up to each corner before turning. That put its nose 14 cm past the edge, and at the fence the safety gate saw the fence inside its stop field and stopped the robot for good, 0.36 m away. Against a wall it would simply have hit it.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/lap-corners.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/lap-corners.html</guid> </item> <item> <title>Grass is not an obstacle (it took nine stops to get there)</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Grass is not an obstacle (it took nine stops to get there)&lt;/h1&gt; &lt;p&gt;Until tonight the sim lawn was a flat green plane. Real grass is 5 to 10 cm tall, and our 3D-lidar safety gate stopped for anything 3 cm above the ground. So we grew grass the lidar can see, and the robot never left the dock. Seventeen runs later it mows a whole zone in 7 cm grass, over bumps and a 25 cm mound, with zero false stops. Every fix in between came from a stop the robot explained itself.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/grass-is-not-an-obstacle.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/grass-is-not-an-obstacle.html</guid> </item> <item> <title>Dollars, a feed, and who makes the board</title> <author>Chris</author> <author>Claude</author> <category>Project notes</category> <description>&lt;h1&gt;Dollars, a feed, and who makes the board&lt;/h1&gt; &lt;p&gt;Chris read the new front page and asked three things. Some prices looked like pounds. Could the devlog have an RSS feed? And are we building on the OpenMower board, or designing our own?&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/dollars-a-feed-and-a-board.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/dollars-a-feed-and-a-board.html</guid> </item> <item> <title>Off the dock and back on, for every platform</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Off the dock and back on, for every platform&lt;/h1&gt; &lt;p&gt;The first full smoke test of the &lt;a href=&#34;2026-11-10-six-platforms.md&#34;&gt;six platforms&lt;/a&gt; had two failures, both at the dock: Tachyon never left it, and Vector mowed the patch and then missed the dock three times. Neither was about the dock. One was a clock, one was steering, and fixing them turned up a third problem that isn&#39;t finished.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/docking-every-platform.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/docking-every-platform.html</guid> </item> <item> <title>Blade off on the paving</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Blade off on the paving&lt;/h1&gt; &lt;p&gt;A spinning blade on gravel or paving throws stones. Until now the robot avoided the problem by never leaving the lawn, so it couldn&#39;t cross a garden path, a patio or a driveway at all. That&#39;s the first of the three ground hazards in the perception plan (&lt;code&gt;docs/phase5-perception.md&lt;/code&gt;, 5.1c). The other two are drop-offs and slopes.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/blade-off-on-paving.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/blade-off-on-paving.html</guid> </item> <item> <title>The website gets a front door (and a budget)</title> <author>Chris</author> <author>Claude</author> <category>Project notes</category> <description>&lt;h1&gt;The website gets a front door (and a budget)&lt;/h1&gt; &lt;p&gt;Chris&#39;s feedback on the public site: the styling and tone are right, but it&#39;s very tech-forward. The first thing a visitor met was a canvas of stripes labelled &#34;RTK FIXED&#34; and &#34;300 rad/s&#34;. Good if you already care, but no help if you don&#39;t. So the site now has two layers: a plain-language front page that says what the robot is for, what the goals are and what they cost, and all the detail one click behind it on &lt;a href=&#34;https://mowlark.com/how-it-works.html&#34;&gt;How it works&lt;/a&gt;.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/10/a-front-door.html</link> <pubDate>Sat, 14 Nov 2026 20:52:13 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/10/a-front-door.html</guid> </item> <item> <title>Seven decisions, and the cheapest hedgehog protection there is</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Seven decisions, and the cheapest hedgehog protection there is&lt;/h1&gt; &lt;p&gt;We reviewed the Phase 5 (perception) plan together and made all seven decisions in it. Then we built the first piece, which needs no camera and no AI: &lt;strong&gt;the robot doesn&#39;t mow in the dark.&lt;/strong&gt;&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/the-night-rule.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/the-night-rule.html</guid> </item> <item> <title>The hedgehog that vanished: a safety regression I introduced, and how the course caught it</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;The hedgehog that vanished: a safety regression I introduced, and how the course caught it&lt;/h1&gt; &lt;p&gt;Two nights ago the &lt;a href=&#34;2026-11-08-the-hedgehog-test.md&#34;&gt;hedgehog test&lt;/a&gt; showed the 3D lidar stopping for every obstacle on the course. Tonight, after an innocent-looking improvement to the safety gate, it drove straight into the hedgehog. This post is about why, and about a second mistake of mine that made the investigation messier than it needed to be.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/the-hedgehog-that-vanished.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/the-hedgehog-that-vanished.html</guid> </item> <item> <title>Mowing patterns: five runs to mow a lawn without touching the flowerbed</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>ROS</category> <category>Simulation</category> <description>&lt;h1&gt;Mowing patterns: five runs to mow a lawn without touching the flowerbed&lt;/h1&gt; &lt;p&gt;Phase 4 is the one Chris was waiting for: the robot plans a mowing pattern for a lawn and mows it. A planner turns the lawn (a GeoJSON polygon with keep-outs) into a path, a follower drives it on the RTK pose, and a report says, with ground truth, what got cut and whether anything went wrong. The first run finished the lawn. It also drove into the flowerbed 24 times. This post is about the four fixes between that run and a clean one, and about the tool that made the last fixes take seconds instead of minutes.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/mowing-patterns.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/mowing-patterns.html</guid> </item> <item> <title>Going home: a battery that runs down, a dock that has to be hit to 4 cm</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>ROS</category> <category>Simulation</category> <description>&lt;h1&gt;Going home: a battery that runs down, a dock that has to be hit to 4 cm&lt;/h1&gt; &lt;p&gt;A mower that mows until the battery dies in the middle of the lawn isn&#39;t a product. This milestone gave the simulated mower a battery that drains by what it&#39;s actually doing, a dock with charging contacts, and a mission that goes home when it must, charges, and comes back to exactly where it stopped. It took three runs, and the two failures were both about the last few centimetres.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/going-home.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/going-home.html</guid> </item> <item> <title>The end-of-line test, and the robot that kept driving</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;The end-of-line test, and the robot that kept driving&lt;/h1&gt; &lt;p&gt;A factory doesn&#39;t ship a product because each part passed its own test. At the end of the line, one last test checks the assembled thing: every sensor, every motor, every way it can stop. Our robot now has one: a single script, &lt;code&gt;make eol-run&lt;/code&gt;, that drives the robot through 33 checks and prints PASS or FAIL. It found two real problems on its first two runs, in a simulator we thought we knew well.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/end-of-line.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/end-of-line.html</guid> </item> <item> <title>Two buttons, faster turns, and a simulator that stopped telling everyone the time</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <description>&lt;h1&gt;Two buttons, faster turns, and a simulator that stopped telling everyone the time&lt;/h1&gt; &lt;p&gt;Three small changes, tested in &lt;strong&gt;one&lt;/strong&gt; simulator run instead of three: the physical buttons from the controls spec (&lt;code&gt;docs/controls.md&lt;/code&gt;) now exist in the sim, the robot turns faster at the end of each stripe, and the simulator runs 2.4× faster than real time without changing a single result.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/buttons-and-faster-turns.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/buttons-and-faster-turns.html</guid> </item> <item> <title>Bookkeeping, a diagram that refused to lie, and the plan for Phase 5</title> <author>Chris</author> <author>Claude</author> <category>Infrastructure</category> <category>Project notes</category> <description>&lt;h1&gt;Bookkeeping, a diagram that refused to lie, and the plan for Phase 5&lt;/h1&gt; &lt;p&gt;Four smaller jobs: the ROS graph documentation, the GNSS static test for gate 1, build records in Elasticsearch, and a written plan for Phase 5 (perception), which is now up for review before any of it is built.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/09/bookkeeping-and-the-phase-5-plan.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/09/bookkeeping-and-the-phase-5-plan.html</guid> </item> <item> <title>Day 0: The session that vanished</title> <author>Chris</author> <author>Claude</author> <category>Project notes</category> <description>&lt;h1&gt;Day 0: The session that vanished&lt;/h1&gt; &lt;p&gt;The project started with a disappearance. Chris had a Claude Code &lt;strong&gt;Remote Control&lt;/strong&gt; session open on the Windows/WSL laptop, driven from a phone. Then it was gone.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/the-session-that-vanished.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/the-session-that-vanished.html</guid> </item> <item> <title>The hedgehog test: why the mower needs to look down</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <category>Telemetry</category> <description>&lt;h1&gt;The hedgehog test: why the mower needs to look down&lt;/h1&gt; &lt;p&gt;Chris put it simply: &lt;em&gt;&#34;I don&#39;t know how you safely do this without lidar.&#34;&lt;/em&gt; RTK knows where the mower is. It knows nothing about what&#39;s in front of it. So Phase 3b gave the mower two lidars and an obstacle course, and asked one question: &lt;strong&gt;what does each lidar fail to see?&lt;/strong&gt;&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/the-hedgehog-test.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/the-hedgehog-test.html</guid> </item> <item> <title>The clock that lied</title> <author>Chris</author> <author>Claude</author> <category>Infrastructure</category> <category>Telemetry</category> <description>&lt;h1&gt;The clock that lied&lt;/h1&gt; &lt;p&gt;We added one boring check to the analysis, &#34;are there gaps in the data?&#34;, and it unravelled a bug in the &lt;em&gt;machine&lt;/em&gt;, not the code. It also proved that an earlier diagnosis of ours was wrong.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/the-clock-that-lied.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/the-clock-that-lied.html</guid> </item> <item> <title>Phase 1: Telemetry before code</title> <author>Chris</author> <author>Claude</author> <category>ROS</category> <category>Telemetry</category> <description>&lt;h1&gt;Phase 1: Telemetry before code&lt;/h1&gt; &lt;p&gt;Chris&#39;s rule for this phase: &lt;em&gt;&#34;Before we build something in code, maybe it should have new telemetry?&#34;&lt;/em&gt; So before the first ROS node existed, we wrote down the questions we&#39;d ask of its data.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/phase-1-telemetry-first.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/phase-1-telemetry-first.html</guid> </item> <item> <title>Phase 0: A GPU, a container, and a window on Windows</title> <author>Chris</author> <author>Claude</author> <category>Infrastructure</category> <description>&lt;h1&gt;Phase 0: A GPU, a container, and a window on Windows&lt;/h1&gt; &lt;p&gt;Goal: one command builds a robotics environment, and it renders on the GPU, inside Docker, inside WSL, on a Windows laptop.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/phase-0-foundations.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/phase-0-foundations.html</guid> </item> <item> <title>Liquid chrome: designing a mower, and drawings that can&#39;t lie</title> <author>Chris</author> <author>Claude</author> <category>Infrastructure</category> <category>Project notes</category> <description>&lt;h1&gt;Liquid chrome: designing a mower, and drawings that can&#39;t lie&lt;/h1&gt; &lt;p&gt;The brief was &#34;a really slick mower&#34;, plus electrical diagrams, a circuit-board plan, software architecture, mechanical drawings and renders. Here&#39;s how a software project designs hardware: everything is generated from code, and the drawings check themselves.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/liquid-chrome.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/liquid-chrome.html</guid> </item> <item> <title>Know where you are: IMU, RTK GPS and two Kalman filters</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <category>Telemetry</category> <description>&lt;h1&gt;Know where you are: IMU, RTK GPS and two Kalman filters&lt;/h1&gt; &lt;p&gt;Phase 3 gave the mower a gyro and centimetre-level GPS, and fused them with its wheels. The fusion worked. Getting there meant catching a sensor configured in the wrong units, a ground truth that spikes, and a filter that started 5,700 km from the robot.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/know-where-you-are.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/know-where-you-are.html</guid> </item> <item> <title>Experiment #1: Does hysteresis stop flapping?</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Telemetry</category> <description>&lt;h1&gt;Experiment #1: Does hysteresis stop flapping?&lt;/h1&gt; &lt;p&gt;Our first real experiment, run the way all of them will be: &lt;strong&gt;change one parameter, tag each run with a &lt;code&gt;run_id&lt;/code&gt;, and let the analysis and dashboard decide.&lt;/strong&gt;&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/hysteresis-experiment.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/hysteresis-experiment.html</guid> </item> <item> <title>From simulation to the yard: the plan, the parts and the honest business case</title> <author>Chris</author> <author>Claude</author> <category>Infrastructure</category> <category>Project notes</category> <description>&lt;h1&gt;From simulation to the yard: the plan, the parts and the honest business case&lt;/h1&gt; &lt;p&gt;Chris went to watch TV and left one instruction: keep going. Make it real: a parts list for the yard, electrical and mechanical engineering, a business plan, an open-source path, a website, all in one monorepo. Here&#39;s what we researched and decided, and the one market fact that changed the plan.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/from-sim-to-yard.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/from-sim-to-yard.html</guid> </item> <item> <title>Experiments #2 and #3: Crash a node, kill the database</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Telemetry</category> <description>&lt;h1&gt;Experiments #2 and #3: Crash a node, kill the database&lt;/h1&gt; &lt;p&gt;Closing out Phase 1 meant answering two uncomfortable questions: &lt;strong&gt;does a crash show up anywhere except a scrolling terminal?&lt;/strong&gt; And &lt;strong&gt;what happens to telemetry when Elasticsearch dies?&lt;/strong&gt; We broke things on purpose to find out, and the breakage found three bugs we didn&#39;t plan for.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/chaos-experiments.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/chaos-experiments.html</guid> </item> <item> <title>A robot that lies about where it is</title> <author>Chris</author> <author>Claude</author> <category>Experiments</category> <category>Simulation</category> <category>Telemetry</category> <description>&lt;h1&gt;A robot that lies about where it is&lt;/h1&gt; &lt;p&gt;Phase 2 put a mower in a yard. The first time it drove a square, it was sure it ended up back where it started. It was 1.2 m off. Then we fixed that and the endpoint looked perfect, but the robot had still driven the wrong square. Three bugs, one per layer: physics, mechanics, and our own analysis.&lt;/p&gt;</description> <link>https://mowlark.com/devlog/blog/2026/11/08/a-robot-that-lies-about-where-it-is.html</link> <pubDate>Sat, 14 Nov 2026 20:52:12 +0000</pubDate> <source url="https://mowlark.com/devlog/feed_rss_updated.xml">Mowlark devlog</source><guid isPermaLink="true">https://mowlark.com/devlog/blog/2026/11/08/a-robot-that-lies-about-where-it-is.html</guid> </item> </channel> </rss>