<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OpenMower — Open Source RTK GPS Robotic Mower – Knowledge Base</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/</link><description>Recent content in Knowledge Base on OpenMower — Open Source RTK GPS Robotic Mower</description><generator>Hugo -- gohugo.io</generator><atom:link href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: Compatible Mowers</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/compatible-mowers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/compatible-mowers/</guid><description>
&lt;h2 id="yard-force">Yard Force&lt;/h2>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers//images/yf-mainboard.jpg" alt="OpenMower-V2 YardForce Carrierboard">&lt;/p>
&lt;p>&lt;strong>Check out the Git Repo Here:&lt;/strong> &lt;a href="https://github.com/xtech/hw-openmower-yardforce" target="_blank" rel="noopener">https://github.com/xtech/hw-openmower-yardforce&lt;/a>
&lt;/p>
&lt;p>The project got started on a YardForce Classic 500(B), and there are photo guides in this documentation on how to disassemble and reassemble it. From a user&amp;rsquo;s perspective, the YardForce Classic 500(B) is the &amp;ldquo;best supported&amp;rdquo; mower.&lt;/p>
&lt;p>&lt;strong>However, there are more mowers from the YardForce brand that are compatible:&lt;/strong>&lt;/p>
&lt;p>In theory, every YardForce model with the Core + Outer Frame Chassis (SA, SC, LUV, N and NX Line) that has a production year of 2019+ has compatible electronics to replace the stock mainboard with an OpenMower one.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
As of today the YardForce Amiro, Compact, EasyMow, MowBest, XPower and MB series models are not (yet) compatible.&lt;br>
The main reason is that the OpenMower mainboard does not fit in their chassis.
&lt;/div>
&lt;h2 id="sabo--john-deere">SABO / John Deere&lt;/h2>
&lt;p>There is a dedicated mainboard for &lt;strong>SABO MOWit 500F&lt;/strong> (Series-I &amp;amp; II) and &lt;strong>John Deere Tango E5&lt;/strong> (Series-I &amp;amp; II) mowers.&lt;/p>
&lt;p>&lt;strong>Check out the Git Repo Here:&lt;/strong> &lt;a href="https://github.com/xtech/hw-openmower-sabo" target="_blank" rel="noopener">https://github.com/xtech/hw-openmower-sabo&lt;/a>
&lt;/p>
&lt;p>This Carrierboard is compatible with the following mower models:&lt;/p>
&lt;ul>
&lt;li>SABO MOWit 500F (Series-I &amp;amp; II)&lt;/li>
&lt;li>John Deere Tango E5 (Series-I &amp;amp; II)&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:center">Series-I Carrierboard (v0.2)&lt;/th>
&lt;th style="text-align:center">Series-II Carrierboard (v0.2)&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:center">&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers//images/om-sabo-cb-s1-v02.jpg" alt="OpenMower-V2 SABO Carrierboard Series-I v0.2">&lt;/td>
&lt;td style="text-align:center">&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers//images/om-sabo-cb-s2-v02.jpg" alt="OpenMower-V2 SABO Carrierboard Series-II v0.1">&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">&lt;strong>Series-I (v0.1) @ John Deere Tango E5&lt;/strong>&lt;/td>
&lt;td style="text-align:center">&lt;strong>Series-II (v0.1) @ Sabo MOWiT 500F&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:center">&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers//images/johndeere-s1-v01-assembled.jpg" alt="V0.1 Carrierboard Series-I assembled">&lt;/td>
&lt;td style="text-align:center">&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers//images/sabo-s2-v01-assembled.jpg" alt="V0.1 Carrierboard Series-II assembled">&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>These mowers are &lt;strong>well supported&lt;/strong>. Even the display controller was replaced by a fully functional, modern user interface!&lt;/p>
&lt;div style="padding-bottom: 2.5rem">
&lt;video width="640" height="360" controls>
&lt;source src="https://www.shbe.net/openmower/sabo/Sabo_LCD_20251212.mp4" type="video/mp4">
Your browser does not support the video tag.
&lt;/video>
&lt;/div>
&lt;h2 id="universal-board">Universal Board&lt;/h2>
&lt;p>The universal board contains all features needed for an Open Mower build (e.g., three BLDC/DC motor controllers, a LiPo charger on board, connectors for GPS, emergency sensors, etc.). It has screw terminals for easy connections and can be broken into smaller modules if it doesn&amp;rsquo;t fit as a whole board.&lt;/p>
&lt;p>&lt;strong>Check out the Git Repo Here:&lt;/strong> &lt;a href="https://github.com/xtech/hw-openmower-universal" target="_blank" rel="noopener">https://github.com/xtech/hw-openmower-universal&lt;/a>
&lt;/p>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers//images/BreakingTheBoard.jpg" alt="V2 Universal Board with Modules">&lt;/p>
&lt;h3 id="other-compatible-brands">Other Compatible Brands&lt;/h3>
&lt;p>The following mower brands are known to have compatible hardware with the Universal mainboard. If you want to check your specific model, ask on Discord. The probability is high that it will work:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Husqvarna&lt;/strong>: Most Husqvarna mowers&lt;/li>
&lt;li>&lt;strong>Gardena&lt;/strong>: Most Gardena mowers&lt;/li>
&lt;li>&lt;strong>Fuxtec / Redback&lt;/strong>: Fuxtec and Redback mowers&lt;/li>
&lt;/ul>
&lt;h3 id="custom-hardware">Custom Hardware&lt;/h3>
&lt;p>If you have a custom chassis, there is a good chance you can get it to work with the Universal board. Ask on Discord for guidance on your specific setup.&lt;/p></description></item><item><title>Docs: Change Hostname</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/change-hostname/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/change-hostname/</guid><description>
&lt;p>Changing the hostname is simple, thanks to the &lt;code>raspi-config&lt;/code> tool:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Run&lt;/strong> &lt;code>sudo raspi-config&lt;/code>&lt;/li>
&lt;li>&lt;strong>Select&lt;/strong> System Options -&amp;gt; Hostname&lt;/li>
&lt;li>&lt;strong>Enter&lt;/strong> a new hostname and press &lt;kbd>Enter&lt;/kbd>`&lt;/li>
&lt;li>&lt;strong>Finish and Reboot&lt;/strong>&lt;/li>
&lt;/ul></description></item><item><title>Docs: External Wifi Antenna</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/external-wifi-antenna/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/external-wifi-antenna/</guid><description>
&lt;p>After adding the external antenna, you need to tell the Raspberry Pi CM4 to use the external antenna instead of the built-in one.&lt;/p>
&lt;h3 id="terminal-cast">Terminal Cast&lt;/h3>
&lt;div class="container pb-3 pt-3">
&lt;div class="row justify-content-md-center">
&lt;div id="external-wifi-player" class="">&lt;/div>
&lt;/div>
&lt;div class="row justify-content-md-center">
&lt;div>How to edit the antenna configuration&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
AsciinemaPlayer.create(
'/archive/v1.2.0/docs/knowledge-base/external-wifi-antenna//cast/change-antenna.cast',
document.getElementById('external-wifi-player'),
{ cols: 110, rows: 24, autoplay: false, loop: true }
);
&lt;/script>
&lt;h3 id="instructions">Instructions&lt;/h3>
&lt;p>You can do this by:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Run&lt;/strong> &lt;code>sudo nano /boot/firmware/config.txt&lt;/code>&lt;/li>
&lt;li>&lt;strong>Scroll Down&lt;/strong> to the &lt;code>[cm4]&lt;/code> section and:
&lt;ul>
&lt;li>Comment &lt;code># dtparam=ant1&lt;/code>&lt;/li>
&lt;li>Uncomment &lt;code>dtparam=ant2&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Save&lt;/strong> &lt;kbd>CTRL&lt;/kbd> + &lt;kbd>O&lt;/kbd> and &lt;strong>Exit Nano&lt;/strong> &lt;kbd>CTRL&lt;/kbd> + &lt;kbd>X&lt;/kbd>&lt;/li>
&lt;li>&lt;strong>Reboot&lt;/strong> the OS by running &lt;code>sudo reboot&lt;/code>&lt;/li>
&lt;/ul></description></item><item><title>Docs: Record Areas</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/record-areas/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/record-areas/</guid><description>
&lt;p>In this section, we finally drive the robot around and test if everything works as expected. Then we will record a map, and you can see the magic happen.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>A smartphone or PC (or a &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/using-a-gamepad/">USB gamepad&lt;/a>
)&lt;/li>
&lt;li>Modified robot connected to your network&lt;/li>
&lt;li>OpenMower software running on the robot&lt;/li>
&lt;li>Docking station powered up&lt;/li>
&lt;li>Mower fully charged&lt;/li>
&lt;/ul>
&lt;h2 id="step-41-check-the-gps">Step 4.1: Check the GPS&lt;/h2>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/record-areas//images/gps_quality_indicator.jpg" alt="GPS Quality Indicator">&lt;/p>
&lt;p>For this step, put the mower into the docking station and turn it on. It should boot up and get to a solid green status LED.&lt;/p>
&lt;p>It is important that the mower is out in the open for the RTK GPS to work. Don&amp;rsquo;t try this indoors and don&amp;rsquo;t cover the mower.&lt;/p>
&lt;p>Open the OpenMower web app with any device by opening a browser and going to the following URL: &lt;a href="http://openmower.local:8080/" target="_blank" rel="noopener">&lt;code>http://openmower.local:8080&lt;/code>&lt;/a>
or &lt;code>http://&amp;lt;your-openmower-IP&amp;gt;:8080&lt;/code>.&lt;/p>
&lt;p>Wait for the GPS to find a position. This might take some time (up to 30 minutes).&lt;/p>
&lt;p>You can see the current GPS quality in the Open Mower app as shown in the graphic above.&lt;/p>
&lt;p>&lt;strong>You need to have RTK Fixed&lt;/strong> for the following to work. If you don&amp;rsquo;t get a good GPS fix, you will need to check your RTK setup and configuration.&lt;/p>
&lt;h2 id="step-42-initialize-the-orientation">Step 4.2: Initialize the Orientation&lt;/h2>
&lt;p>In addition to the position, the robot also needs to know its orientation. Since we are not using a compass, the robot&amp;rsquo;s orientation is derived from its movement.
In order to initialize the orientation, you need to drive the robot.&lt;/p>
&lt;p>You can either use the on-screen joystick in the Open Mower App or a &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/using-a-gamepad/">gamepad connected via USB&lt;/a>
(hold the A button) to drive the robot.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Don&amp;rsquo;t pick up the mower or the orientation will be lost again!
&lt;/div>
&lt;p>Now drive the mower for at least 50m, do some straight lines and some figure eight patterns. Currently, the robot does not know the quality of its orientation estimate, but you can judge by driving and looking at the app.&lt;/p>
&lt;p>The orientation is initialized correctly if:&lt;/p>
&lt;ul>
&lt;li>When driving a straight line, the visualization also drives a straight line (no jumps)&lt;/li>
&lt;li>When rotating in place, the visualization stays in place and doesn&amp;rsquo;t jump&lt;/li>
&lt;/ul>
&lt;h2 id="step-43-record-a-simple-map">Step 4.3: Record a Simple Map&lt;/h2>
&lt;p>In this step, we will record a simple map. Keep it simple for the first tests and record your map as soon as you&amp;rsquo;re confident that everything works as expected.&lt;/p>
&lt;p>The map for the mower consists of three parts: the &lt;strong>docking position&lt;/strong>, at least one &lt;strong>mowing area&lt;/strong> and optionally &lt;strong>navigation areas&lt;/strong>.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Mowing Areas&lt;/strong> are the areas which will be mowed. Each mowing area has a single outline and optional areas to exclude (e.g. static obstacles).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Docking Position&lt;/strong> is the position and orientation of your docking station. It needs to be close to a mowing area or navigation area. This is needed for the robot to find its way to the docking station.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Navigation Areas&lt;/strong> are areas similar to mowing areas (they consist of an outline and optionally exclusions). The mower is allowed to drive in these areas, but &lt;strong>won&amp;rsquo;t mow&lt;/strong>. Use these areas to connect mowing areas. Also, if your docking station is not close to a mowing area, you can use a navigation area to allow the robot to drive to the docking station.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Now that the robot knows where it is located, and you know which areas we need to record, start recording your first map. In the following picture, you can see an example.&lt;/p>
&lt;h3 id="record-outline">Record Outline&lt;/h3>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/record-areas//images/record_outline.jpg" alt="Record Outline">&lt;/p>
&lt;ul>
&lt;li>Drive the robot to the outline. Make sure that the robot is facing in &lt;strong>counterclockwise direction&lt;/strong>.&lt;/li>
&lt;li>Start the recording by pressing &lt;strong>Start Recording&lt;/strong>.&lt;/li>
&lt;li>Drive around the mowing area. Make sure that the GPS position stays fixed at all times.&lt;/li>
&lt;li>Stop the recording using &lt;strong>Stop Recording&lt;/strong>.&lt;/li>
&lt;li>The outline should now turn green. This means it&amp;rsquo;s done recording, and you can move on to recording exclusions.&lt;/li>
&lt;/ul>
&lt;h3 id="optional-record-exclusions">Optional: Record Exclusions&lt;/h3>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/record-areas//images/record_obstacle.jpg" alt="Record Obstacle">&lt;/p>
&lt;p>If your area has zones you want to exclude (e.g. static obstacles), you can record them like this:&lt;/p>
&lt;ul>
&lt;li>Drive the robot to the edge of the exclusion zone. Make sure that the robot is facing in &lt;strong>clockwise direction&lt;/strong>.&lt;/li>
&lt;li>Start the recording by pressing &lt;strong>Start Recording&lt;/strong>.&lt;/li>
&lt;li>Drive around the area to exclude. Make sure that the GPS position stays fixed at all times.&lt;/li>
&lt;li>Stop the recording using &lt;strong>Stop Recording&lt;/strong>.&lt;/li>
&lt;li>The outline should now turn red. This means it&amp;rsquo;s done recording, and you can move on to recording more exclusions.&lt;/li>
&lt;/ul>
&lt;h3 id="save-area">Save Area&lt;/h3>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/record-areas//images/save_mowing_area.jpg" alt="Save Area">&lt;/p>
&lt;p>If you are happy with your recording, you can save the area. In order to do this, click the &lt;strong>Finish Area&lt;/strong> button. A dialog will appear asking if you want to save the area as mowing or navigation area. Alternatively, you can also discard the recording.&lt;/p>
&lt;p>As soon as the area is saved, the area will turn solid. Mowing areas will be displayed in green, navigation areas will be shown in white.&lt;/p>
&lt;h3 id="record-docking-position">Record Docking Position&lt;/h3>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/record-areas//images/record_docking_position.jpg" alt="Record Docking Position">&lt;/p>
&lt;p>In order to record the docking position, do the following:&lt;/p>
&lt;ul>
&lt;li>Drive to a location about 2 m in front of your docking station.&lt;/li>
&lt;li>Make sure you have a GPS fix and press the &lt;strong>Record Docking&lt;/strong> button.&lt;/li>
&lt;li>Now drive close to the docking station. The front wheels of the robot should be at the edge of the docking station. &lt;strong>Don&amp;rsquo;t fully drive into the docking station!&lt;/strong>.&lt;/li>
&lt;li>Make sure you have a GPS fix and press the &lt;strong>Record Docking&lt;/strong> button.&lt;/li>
&lt;li>The app should move the &lt;strong>home&lt;/strong> icon to your current location. Now you can fully drive into the docking station.&lt;/li>
&lt;/ul>
&lt;h3 id="finish-recording">Finish Recording&lt;/h3>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/record-areas//images/start_mowing.jpg" alt="Start Mowing">&lt;/p>
&lt;p>Finish the process by pressing &lt;strong>Exit Recording&lt;/strong>. Now the mower should go to &lt;strong>IDLE&lt;/strong> mode. You should be able to start mowing by pressing the &lt;strong>Start&lt;/strong> button. The mower will undock, wait for GPS and mow the area.&lt;/p></description></item><item><title>Docs: Managing ROS Parameters</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-ros-parameters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-ros-parameters/</guid><description>
&lt;h2 id="viewing-and-configuring-ros-parameters">Viewing and Configuring ROS Parameters&lt;/h2>
&lt;p>OpenMower is built on ROS, which means much of its behavior is controlled through parameters. Understanding how to inspect and modify these parameters gives you fine-grained control over your mower’s operation.&lt;/p>
&lt;h3 id="listing-all-parameters">Listing All Parameters&lt;/h3>
&lt;p>To see all currently active ROS parameters, open the OpenMower shell:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>openmower shell
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Then run:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rosparam list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will display a full list of parameters currently loaded in the system. It’s a useful first step when debugging or trying to understand how your mower is configured.&lt;/p>
&lt;h3 id="overwriting-parameters">Overwriting Parameters&lt;/h3>
&lt;p>All parameters can be customized using the &lt;code>mower_params.yaml&lt;/code> configuration file. This file acts as the central place to override default values.&lt;/p>
&lt;p>The easiest way to edit it is with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>openmower configure ros
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="example">Example&lt;/h3>
&lt;p>In this example we will be overwriting the speed parameter.&lt;/p>
&lt;h4 id="1-fetch-the-parameters-current-value">1. Fetch the Parameter&amp;rsquo;s current value&lt;/h4>
&lt;p>After discovering a parameter you want to edit using &lt;code>rosparam list&lt;/code>, you can get the value using &lt;code>rosparam get &amp;lt;parameter&amp;gt;&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>🚜 openmower@openmower-v2:~$ rosparam get /move_base_flex/FTCPlanner/speed_fast
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0.4
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In this case, our speed is currently at 0.4 m/sec for mowing&lt;/p>
&lt;h4 id="2-change-the-value-for-your-config">2. Change the value for your config&lt;/h4>
&lt;p>On the host system call &lt;code>openmower configure ros&lt;/code> and translate the parameter name to YAML.
This is done by replacing each &lt;code>/&lt;/code> into indentations (2x space).&lt;/p>
&lt;p>For our example it looks like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">move_base_flex&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">FTCPlanner&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">speed_fast&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">0.5&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="3-save-the-file-and-check-the-updated-value">3. Save the file and check the updated value&lt;/h4>
&lt;p>After saving the file, ROS is automatically restarted and you can check, if the value is now updated:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>🚜 openmower@openmower-v2:~$ rosparam get /move_base_flex/FTCPlanner/speed_fast
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>0.5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>🎉 Done!&lt;/p>
&lt;h3 id="if-you-have-issues">If you have issues&lt;/h3>
&lt;p>If some parameter isn&amp;rsquo;t overriding correctly, make sure you are on the latest version of OpenMower. If it still doesn&amp;rsquo;t work ask on Discord.&lt;/p></description></item><item><title>Docs: Configuring GPIO Inputs</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-gpio-inputs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-gpio-inputs/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>OpenMower supports configuring GPIO pins as digital inputs that can trigger emergency stops or other events. Common use cases include:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Wheel lift sensors&lt;/strong> — detect when the mower is lifted&lt;/li>
&lt;li>&lt;strong>Stop buttons&lt;/strong> — physical emergency stop buttons on top of the mower&lt;/li>
&lt;/ul>
&lt;h2 id="step-1-create-the-inputs-configuration-file">Step 1: Create the inputs configuration file&lt;/h2>
&lt;p>Create &lt;code>/home/openmower/params/inputs.yaml&lt;/code> with your GPIO input definitions:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">gpio&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Front left wheel lift&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">line&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">GPIO10&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">active&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">low&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">emergency&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">reason&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lift&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">delay&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2500&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Front right wheel lift&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">line&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">GPIO11&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">active&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">low&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">emergency&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">reason&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">lift&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">delay&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2500&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Top stop button 1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">line&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">GPIO12&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">active&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">low&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">emergency&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">reason&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">stop&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">delay&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">10&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Top stop button 2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">line&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">GPIO13&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">active&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">low&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">emergency&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">reason&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">stop&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">delay&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">10&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="configuration-fields">Configuration fields&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>Human-readable label for the input&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>line&lt;/code>&lt;/td>
&lt;td>GPIO pin name (e.g. &lt;code>GPIO10&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>active&lt;/code>&lt;/td>
&lt;td>Logic level that triggers the event — &lt;code>low&lt;/code> or &lt;code>high&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>emergency.reason&lt;/code>&lt;/td>
&lt;td>Emergency type — &lt;code>lift&lt;/code> for wheel lift, &lt;code>stop&lt;/code> for stop button&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>emergency.delay&lt;/code>&lt;/td>
&lt;td>Debounce/delay in milliseconds before the emergency is triggered&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="gpio-pin-mapping">GPIO Pin Mapping&lt;/h2>
&lt;p>The example config above uses GPIO10–GPIO13. Here is how those map to physical connectors on each board.&lt;/p>
&lt;h3 id="openmower-universal-board">OpenMower Universal Board&lt;/h3>
&lt;p>Orientation: looking at the board with the ethernet ports facing you.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Position&lt;/th>
&lt;th>GPIO&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Top left&lt;/td>
&lt;td>GPIO13&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Top right&lt;/td>
&lt;td>GPIO12&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Bottom right&lt;/td>
&lt;td>GPIO11&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Bottom left&lt;/td>
&lt;td>GPIO10&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="openmower-yardforce-board">OpenMower Yardforce Board&lt;/h3>
&lt;p>Orientation: looking at the board with the ethernet ports at the bottom left, pins sorted top to bottom.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Position&lt;/th>
&lt;th>GPIO&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>1st (topmost)&lt;/td>
&lt;td>GPIO10&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2nd&lt;/td>
&lt;td>GPIO11&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>3rd&lt;/td>
&lt;td>GPIO12&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>4th&lt;/td>
&lt;td>GPIO13&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="step-2-enable-the-input-service">Step 2: Enable the input service&lt;/h2>
&lt;p>Add the following to your &lt;code>mower_params.yaml&lt;/code> (or &lt;code>custom_params.yaml&lt;/code> for Universal board builds):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">ll&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">services&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">input&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">config_file&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">/data/params/inputs.yaml&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To open the file for editing:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>openmower configure ros
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Path mapping on OSv2&lt;/h4>
On OSv2, &lt;code>/home/openmower/params&lt;/code> is mapped to &lt;code>/data/params&lt;/code> inside the container. If you are on a different setup, adjust the &lt;code>config_file&lt;/code> path accordingly.
&lt;/div>
&lt;h2 id="step-3-restart-openmower">Step 3: Restart OpenMower&lt;/h2>
&lt;p>After saving both files, restart the service to apply the changes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>openmower restart
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Your GPIO inputs are now active and will trigger the configured emergency events when the specified logic level is detected.&lt;/p></description></item><item><title>Docs: Flashing the CM4 eMMC</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/flash-cm4-emmc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/flash-cm4-emmc/</guid><description>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">CM4 with eMMC only&lt;/h4>
&lt;p>This guide applies &lt;strong>only to CM4 variants with onboard eMMC storage&lt;/strong>. The CM4 Lite variant has no eMMC — it uses a microSD card instead and does not require this process.&lt;/p>
&lt;p>Check your CM4 model number: variants with eMMC have the storage size in the name (e.g. CM4008032 = 32 GB eMMC). Lite variants are explicitly labelled &amp;ldquo;Lite&amp;rdquo; (e.g. CM4008000).&lt;/p>
&lt;/div>
&lt;p>The CM4 with eMMC has onboard flash storage instead of a microSD slot. To flash a new image, you need to put it into USB boot mode so it appears as a mass storage device on your computer.&lt;/p>
&lt;p>This guide covers the OpenMower-specific steps. For full reference, see the &lt;a href="https://www.raspberrypi.com/documentation/computers/compute-module.html#flash-compute-module-emmc" target="_blank" rel="noopener">official Raspberry Pi documentation&lt;/a>
.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>A host computer (Linux, Windows, or macOS)&lt;/li>
&lt;li>A micro USB cable (connected to the USB port on the xCore board)&lt;/li>
&lt;li>The OS image you want to flash (e.g. OpenMower OS)&lt;/li>
&lt;/ul>
&lt;h2 id="step-1-enter-usb-boot-mode">Step 1: Enter USB boot mode&lt;/h2>
&lt;p>The xCore board has an &lt;strong>Rpi Boot&lt;/strong> button (left of the two buttons, label printed below the CM4 slot).&lt;/p>
&lt;p>&lt;img src="images/rpi-boot-button.png" alt="xCore board showing the Rpi Boot button location">&lt;/p>
&lt;ol>
&lt;li>Hold the &lt;strong>Rpi Boot&lt;/strong> button.&lt;/li>
&lt;li>While holding it, connect power to the xCore board (or plug in the micro USB cable to your host computer).&lt;/li>
&lt;li>Release the button once powered.&lt;/li>
&lt;/ol>
&lt;p>The CM4 is now in USB boot mode.&lt;/p>
&lt;h2 id="step-2-install-rpiboot-on-your-host-computer">Step 2: Install rpiboot on your host computer&lt;/h2>
&lt;ul class="nav nav-tabs" id="tabs-1" role="tablist">
&lt;li class="nav-item">
&lt;a class="nav-link active"
id="tabs-01-00-tab" data-toggle="tab" href="#tabs-01-00" role="tab"
aria-controls="tabs-01-00" aria-selected="false">
Linux
&lt;/a>
&lt;/li>&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-01-01-tab" data-toggle="tab" href="#tabs-01-01" role="tab"
aria-controls="tabs-01-01" aria-selected="false">
Windows
&lt;/a>
&lt;/li>&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-01-02-tab" data-toggle="tab" href="#tabs-01-02" role="tab"
aria-controls="tabs-01-02" aria-selected="false">
macOS
&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-1-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab">
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo apt install rpiboot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo rpiboot
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-01-01" role="tabpanel" aria-labelled-by="tabs-01-01-tab">
&lt;ol>
&lt;li>Download and run the installer from the &lt;a href="https://github.com/raspberrypi/usbboot/releases" target="_blank" rel="noopener">usbboot releases page&lt;/a>
.&lt;/li>
&lt;li>Reboot your computer after installation.&lt;/li>
&lt;li>With the CM4 in USB boot mode, open &lt;strong>Start → rpiboot - Mass Storage Gadget&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-01-02" role="tabpanel" aria-labelled-by="tabs-01-02-tab">
&lt;p>Build rpiboot from source, then run:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>rpiboot -d mass-storage-gadget64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See the &lt;a href="https://github.com/raspberrypi/usbboot" target="_blank" rel="noopener">usbboot repository&lt;/a>
for build instructions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>Within a few seconds the CM4&amp;rsquo;s eMMC will appear as a USB mass storage device on your computer.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
If the device is not recognised, avoid USB hubs — connect the micro USB cable directly to your computer.
&lt;/div>
&lt;h2 id="step-3-flash-the-image">Step 3: Flash the image&lt;/h2>
&lt;p>Use &lt;strong>Raspberry Pi Imager&lt;/strong> to write your OS image to the eMMC device. Select the eMMC as the target storage — it will appear like any other USB drive.&lt;/p>
&lt;p>Alternatively, use &lt;code>dd&lt;/code> on Linux/macOS:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo dd &lt;span style="color:#204a87;font-weight:bold">if&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>your-image.img &lt;span style="color:#000">of&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/dev/sdX &lt;span style="color:#000">bs&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>4MiB &lt;span style="color:#000">status&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>progress &lt;span style="color:#000">oflag&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>sync
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace &lt;code>/dev/sdX&lt;/code> with the actual device path of the eMMC. Double-check this before running.&lt;/p>
&lt;h2 id="step-4-boot-from-emmc">Step 4: Boot from eMMC&lt;/h2>
&lt;p>Once flashing is complete, disconnect the micro USB cable and power-cycle the board. The CM4 will boot from the newly flashed image.&lt;/p></description></item><item><title>Docs: Creating a Debug Recording</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/debug-recording/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/debug-recording/</guid><description>
&lt;p>When investigating issues — especially positioning problems — a rosbag recording gives developers a full snapshot of sensor data to analyse. This guide walks you through recording one and retrieving it from your mower.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Privacy notice&lt;/h4>
A rosbag records raw sensor data, which includes the &lt;strong>GPS position of your mower&lt;/strong>. By sharing the file you disclose the physical location of your garden. Only share it with people you trust.
&lt;/div>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>OpenMower is running and the mower has a GPS fix (green GPS icon in the app)&lt;/li>
&lt;li>You can access the mower via SSH or the web terminal&lt;/li>
&lt;/ul>
&lt;h2 id="step-1-start-the-recording">Step 1: Start the recording&lt;/h2>
&lt;p>Connect to your mower via SSH or the web terminal, then enter the ROS shell:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>openmower shell
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once inside, navigate to the recordings directory and start recording all topics:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">cd&lt;/span> /data/recordings
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rosbag record -a
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This records &lt;strong>all&lt;/strong> active ROS topics. Leave the terminal open — the recording runs until you stop it with &lt;kbd>Ctrl&lt;/kbd>+&lt;kbd>C&lt;/kbd>.&lt;/p>
&lt;h2 id="step-2-enter-area-recording-mode">Step 2: Enter area recording mode&lt;/h2>
&lt;p>Open the OpenMower app and activate &lt;strong>area recording mode&lt;/strong> — the same mode you use when recording mowing areas. This ensures all relevant topics (GPS, IMU, wheel odometry) are actively publishing at full rate.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">GPS fix required&lt;/h4>
Make sure the GPS icon in the app is &lt;strong>green&lt;/strong> before driving. Recording without a fix produces data that cannot be used for analysis.
&lt;/div>
&lt;h2 id="step-3-drive-the-test-patterns">Step 3: Drive the test patterns&lt;/h2>
&lt;p>Drive the mower through the following patterns. Each one exercises a different aspect of positioning:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Pattern&lt;/th>
&lt;th>Purpose&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Straight lines&lt;/td>
&lt;td>Linear odometry and GPS consistency&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Figure-8&lt;/td>
&lt;td>Combined turning and straight-line tracking&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Rotate on the spot (clockwise)&lt;/td>
&lt;td>Yaw estimation, IMU vs. GPS heading&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Rotate on the spot (counter-clockwise)&lt;/td>
&lt;td>Same, opposite direction&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>A minute or two of each pattern is sufficient. You don&amp;rsquo;t need a large area — a small open patch of lawn works fine.&lt;/p>
&lt;h2 id="step-4-stop-the-recording">Step 4: Stop the recording&lt;/h2>
&lt;p>Once done, go back to the terminal and press &lt;kbd>Ctrl&lt;/kbd>+&lt;kbd>C&lt;/kbd>, then type &lt;code>exit&lt;/code> to leave the ROS shell.&lt;/p>
&lt;p>The &lt;code>.bag&lt;/code> file is now in &lt;code>~/recordings/&lt;/code> on the mower. List the directory to find your filename:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ls -lh ~/recordings/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The filename includes a timestamp, e.g. &lt;code>2024-06-01-12-34-56.bag&lt;/code>.&lt;/p>
&lt;h2 id="step-5-retrieve-the-file">Step 5: Retrieve the file&lt;/h2>
&lt;p>Copy the &lt;code>.bag&lt;/code> file from &lt;code>~/recordings/&lt;/code> on the mower to your computer.&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-2" role="tablist">
&lt;li class="nav-item">
&lt;a class="nav-link active"
id="tabs-02-00-tab" data-toggle="tab" href="#tabs-02-00" role="tab"
aria-controls="tabs-02-00" aria-selected="false">
Linux / macOS
&lt;/a>
&lt;/li>&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-02-01-tab" data-toggle="tab" href="#tabs-02-01" role="tab"
aria-controls="tabs-02-01" aria-selected="false">
Windows
&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-2-content">
&lt;div class="tab-body tab-pane fade show active"
id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab">
&lt;p>Use &lt;code>scp&lt;/code> from your local terminal:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>scp openmower@&amp;lt;mower-ip&amp;gt;:recordings/&amp;lt;filename&amp;gt;.bag .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Replace &lt;code>&amp;lt;mower-ip&amp;gt;&lt;/code> with your mower&amp;rsquo;s IP address and &lt;code>&amp;lt;filename&amp;gt;&lt;/code> with the actual filename. The file downloads to your current directory.&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab">
&lt;p>&lt;strong>Windows 10 (build 1809 or later) and Windows 11&lt;/strong> include an OpenSSH client. Open &lt;strong>Command Prompt&lt;/strong> or &lt;strong>PowerShell&lt;/strong> and run:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bat" data-lang="bat">&lt;span style="display:flex;">&lt;span>scp openmower@&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>mower-ip&lt;span style="color:#000;font-weight:bold">&amp;gt;&lt;/span>:recordings/&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>filename&lt;span style="color:#000;font-weight:bold">&amp;gt;&lt;/span>.bag .
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>On &lt;strong>older Windows versions&lt;/strong>, use a graphical SFTP client instead:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://winscp.net" target="_blank" rel="noopener">WinSCP&lt;/a>
&lt;/strong> — free, open source&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://cyberduck.io" target="_blank" rel="noopener">Cyberduck&lt;/a>
&lt;/strong> — free, cross-platform&lt;/li>
&lt;/ul>
&lt;p>Connect with protocol &lt;strong>SFTP&lt;/strong>, host &lt;code>&amp;lt;mower-ip&amp;gt;&lt;/code>, user &lt;code>openmower&lt;/code>, and navigate to &lt;code>/home/openmower/recordings/&lt;/code> to download the file.&lt;/p>
&lt;/div>
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
&lt;code>.bag&lt;/code> files compress very well. Zipping before sharing can reduce the file size significantly:
&lt;/div>
&lt;p>Once you have the file, share it with whoever is helping you debug — via Discord, a file sharing service, or any other method that works in context.&lt;/p>
&lt;h2 id="step-6-clean-up">Step 6: Clean up&lt;/h2>
&lt;p>Once debugging is done, delete the recordings from the mower to free up disk space:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># delete a specific file&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm ~/recordings/&amp;lt;filename&amp;gt;.bag
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># delete all recordings&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm ~/recordings/*.bag
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs: Hardware Versions / Known Issues</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/hardware-versions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/hardware-versions/</guid><description>
&lt;div class="toc">
&lt;h2>Table of Contents&lt;/h2>
&lt;ul>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#0130---red">0.13.0 - Red&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#notable-changes">Notable changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#known-issues">Known issues&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;ul>
&lt;li>&lt;a href="#0130---red-1">0.13.0 - Red&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#notable-changes-1">Notable changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#known-issues-1">Known issues&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#0120---black">0.12.0 - Black&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#notable-changes-2">Notable changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#known-issues-2">Known issues&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#0110---purple">0.11.0 - Purple&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#notable-changes-3">Notable changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#known-issues-3">Known issues&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#0100---green">0.10.0 - Green&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#notable-changes-4">Notable changes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#known-issues-4">Known issues&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#093---also-green">0.9.3 - Also Green&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/ul>
&lt;/div>
&lt;h1 id="current-hardware-v2-hardware-platform">Current Hardware (v2 Hardware Platform)&lt;/h1>
&lt;p>For v2 Hardware Platform, please check the corresponding repository for changes and known issues:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>YardForce:&lt;/strong> &lt;a href="https://github.com/xtech/hw-openmower-yardforce" target="_blank" rel="noopener">https://github.com/xtech/hw-openmower-yardforce&lt;/a>
&lt;/li>
&lt;li>&lt;strong>SABO / John Deere:&lt;/strong> &lt;a href="https://github.com/xtech/hw-openmower-sabo" target="_blank" rel="noopener">https://github.com/xtech/hw-openmower-sabo&lt;/a>
&lt;/li>
&lt;li>&lt;strong>Universal:&lt;/strong> &lt;a href="https://github.com/xtech/hw-openmower-universal" target="_blank" rel="noopener">https://github.com/xtech/hw-openmower-universal&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h2 id="0130---red">0.13.0 - Red&lt;/h2>
&lt;p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_13_b_hud8caa6e944d50688b274f3b562da2ed7_107995_400x400_fill_q99_catmullrom_smart1.jpg" width="400" height="400">
&lt;/figure>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_13_a_hucf7ddfef5d0ec1d511b55a6238cecbdb_1194312_400x400_fill_q99_catmullrom_smart1.jpg" width="400" height="400">
&lt;/figure>
&lt;/p>
&lt;h3 id="notable-changes">Notable changes&lt;/h3>
&lt;ul>
&lt;li>Custom CoverUI added to the kit&lt;/li>
&lt;li>Dropped support for dfPlayer sound module&lt;/li>
&lt;/ul>
&lt;h3 id="known-issues">Known issues&lt;/h3>
&lt;ul>
&lt;li>2.5mm screws were missing (used to fasten RPi4). Affect kits shipped before June'23.&lt;/li>
&lt;li>The first batch of 0.13 boards was mistakenly labeled &amp;ldquo;latest&amp;rdquo;. No action needed.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/outdated-firmware/" target="_blank" rel="noopener">Outdated Firmware&lt;/a>
. Affect kits shipped before May'23.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/ic2-is-wrong/" target="_blank" rel="noopener">IC2 chip is wrong&lt;/a>
. Affect kits shipped before May'23.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/wrong-rain-sensor-cable/" target="_blank" rel="noopener">rain sensor cable is female, but needs to be male&lt;/a>
. Affect kits shipped before May'23.&lt;/li>
&lt;/ul>
&lt;h1 id="legacy-hardware-v1-hardware-platform">Legacy Hardware (v1 Hardware Platform)&lt;/h1>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Information&lt;/h4>
V1 hardware used a completely different architecture to v2 hardware which makes it hard to port to new mower models.
If you currently own a v1 hardware kit, this is nothing to worry, the kit will continue to work with your mower,
there is no real benefit of upgrading it to a v2 hardware kit. For new builds, the v2 hardware platform is recommended.
&lt;/div>
&lt;h2 id="0130---red-1">0.13.0 - Red&lt;/h2>
&lt;p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_13_b_hud8caa6e944d50688b274f3b562da2ed7_107995_400x400_fill_q99_catmullrom_smart1.jpg" width="400" height="400">
&lt;/figure>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_13_a_hucf7ddfef5d0ec1d511b55a6238cecbdb_1194312_400x400_fill_q99_catmullrom_smart1.jpg" width="400" height="400">
&lt;/figure>
&lt;/p>
&lt;h3 id="notable-changes-1">Notable changes&lt;/h3>
&lt;ul>
&lt;li>Custom CoverUI added to the kit&lt;/li>
&lt;li>Dropped support for dfPlayer sound module&lt;/li>
&lt;/ul>
&lt;h3 id="known-issues-1">Known issues&lt;/h3>
&lt;ul>
&lt;li>2.5mm screws were missing (used to fasten RPi4). Affect kits shipped before June'23.&lt;/li>
&lt;li>The first batch of 0.13 boards was mistakenly labeled &amp;ldquo;latest&amp;rdquo;. No action needed.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/outdated-firmware/" target="_blank" rel="noopener">Outdated Firmware&lt;/a>
. Affect kits shipped before May'23.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/ic2-is-wrong/" target="_blank" rel="noopener">IC2 chip is wrong&lt;/a>
. Affect kits shipped before May'23.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/wrong-rain-sensor-cable/" target="_blank" rel="noopener">rain sensor cable is female, but needs to be male&lt;/a>
. Affect kits shipped before May'23.&lt;/li>
&lt;/ul>
&lt;h2 id="0120---black">0.12.0 - Black&lt;/h2>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_12_x_hu852cc7bf07bde5f673cb173046f198e3_105342_400x0_resize_q99_catmullrom.jpg" width="400" height="300">
&lt;/figure>
&lt;h3 id="notable-changes-2">Notable changes&lt;/h3>
&lt;ul>
&lt;li>IMU: LSM6DSO instead of WT901&lt;/li>
&lt;/ul>
&lt;h3 id="known-issues-2">Known issues&lt;/h3>
&lt;ul>
&lt;li>SPI tracks from Pico were misplaced, already fixed in firmware. No action needed.&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/outdated-firmware/" target="_blank" rel="noopener">Outdated Firmware&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/ic2-is-wrong/" target="_blank" rel="noopener">IC2 chip is wrong&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/wrong-rain-sensor-cable/" target="_blank" rel="noopener">rain sensor cable is female, but needs to be male&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h2 id="0110---purple">0.11.0 - Purple&lt;/h2>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_11_x_hud065a97029026eee637f866edb8cab94_105715_400x0_resize_q99_catmullrom.jpg" width="400" height="300">
&lt;/figure>
&lt;h3 id="notable-changes-3">Notable changes&lt;/h3>
&lt;ul>
&lt;li>Connected WT901 via I2C freeing pins for dfPlayer&lt;/li>
&lt;li>Upgraded dock station PCB with extra holes and terminals (red)&lt;/li>
&lt;/ul>
&lt;h3 id="known-issues-3">Known issues&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/ic2-is-wrong/" target="_blank" rel="noopener">IC2 chip is wrong&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h2 id="0100---green">0.10.0 - Green&lt;/h2>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_10_x_hu24d4ab11dbc115a5038818757321b1b6_201660_400x0_resize_q99_catmullrom.jpg" width="400" height="400">
&lt;/figure>
&lt;h3 id="notable-changes-4">Notable changes&lt;/h3>
&lt;ul>
&lt;li>Added dock station PCB (green)&lt;/li>
&lt;/ul>
&lt;h3 id="known-issues-4">Known issues&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://openmower.de/archive/v1.0.2/docs/versions/errata/ic2-is-wrong/" target="_blank" rel="noopener">IC2 chip is wrong&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h2 id="093---also-green">0.9.3 - Also Green&lt;/h2>
&lt;p>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_9_3_hu06b4bcf8a4cb53a2adcbd38b3d75b4eb_245928_400x0_resize_q99_catmullrom.jpg" width="400" height="300">
&lt;/figure>
&lt;figure class="card rounded p-2 td-post-card mb-4 mt-4" style="max-width: 410px">
&lt;img class="card-img-top" src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/hardware-versions/0_9_3_gps_huacf58bf9d1b8aad2e5aacd6c79ee4fbd_1066416_400x0_resize_q99_catmullrom.jpg" width="400" height="300">
&lt;/figure>
&lt;/p>
&lt;p>First build. Experimental xESC2040 instead of xESC-mini (STM32).&lt;/p></description></item><item><title>Docs: Configuring xESC</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/</guid><description>
&lt;p>The xESC motor controllers can be configured to work with many BLDC and DC motors.
The firmware for the controllers is based on the open source VESC project and therefore, the controllers can be configured using the VESC Configuration Tool.&lt;/p>
&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Windows or Linux computer&lt;/strong> to run the VESC Configuration Tool&lt;/li>
&lt;li>&lt;strong>VESC Tool (&lt;a href="https://vesc-project.com/vesc_tool" target="_blank" rel="noopener">https://vesc-project.com/vesc_tool&lt;/a>
)&lt;/strong> You can download the tool for free by adding the &amp;ldquo;free&amp;rdquo; version in your cart and proceeding to checkout.&lt;/li>
&lt;li>&lt;strong>OpenMower Firmware&lt;/strong> needs to be successfully installed in the xCore board. This is needed because the xCore bridges the connection between your computer and the xESC. If you haven&amp;rsquo;t done it, follow the &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/firmware-update/">Firmware Update&lt;/a>
guide.&lt;/li>
&lt;li>&lt;strong>Optional (but makes your life easier):&lt;/strong>&lt;br/>Configuration files for the mower you are using.&lt;br/>Look in the &lt;a href="https://github.com/ClemensElflein/OpenMower/tree/main/configs/xESC" target="_blank" rel="noopener">OpenMower repository&lt;/a>
for the files suited for your mower. &lt;br/>You will need three files:
&lt;ul>
&lt;li>App configuration XML (sets the baud rate, etc. Same for all three xESC controllers)&lt;/li>
&lt;li>Mower Motor configuration XML (motor parameters for the mower motor)&lt;/li>
&lt;li>Drive Motor configuration XML (motor parameters for the wheel motors)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="configuration-process">Configuration Process&lt;/h3>
&lt;h4 id="stop-ros-from-interfering-with-the-controllers">Stop ROS from interfering with the controllers&lt;/h4>
&lt;p>&lt;code>openmower stop&lt;/code> to stop ROS from interfering with the controllers during configuration.&lt;/p>
&lt;h4 id="expose-the-esc-to-the-network">Expose the ESC to the network&lt;/h4>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/openmower-expose-xesc.png" alt="Expose ESC to the network">
Run &lt;code>openmower expose-xesc [left|right|mower]&lt;/code> to expose the xESC controller (choose &lt;code>left&lt;/code>, &lt;code>mower&lt;/code> or &lt;code>right&lt;/code>).&lt;br/>The controller is then reachable in your local network on &lt;code>openmower:65102&lt;/code> until you hit &lt;kbd>Ctrl&lt;/kbd> + &lt;kbd>C&lt;/kbd>.&lt;/p>
&lt;h4 id="connect-to-the-xesc">Connect to the xESC&lt;/h4>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/ConnectToTheESC.png" alt="Connect VESC tool to ESC">
Open the VESC Configuration Tool and connect to the xESC controllers by clicking:&lt;/p>
&lt;ul>
&lt;li>&lt;code>Connection -&amp;gt; TCP&lt;/code> &lt;strong>[1]&lt;/strong>&lt;/li>
&lt;li>Insert the IP address of your mower or &lt;code>openmower&lt;/code> into the Address field &lt;strong>[2]&lt;/strong>.&lt;/li>
&lt;li>Set the port to &lt;code>65102&lt;/code> &lt;strong>[3]&lt;/strong>&lt;/li>
&lt;li>Click &lt;code>Connect&lt;/code> &lt;strong>[4]&lt;/strong>&lt;/li>
&lt;/ul>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Information&lt;/h4>
&lt;p>If you encounter this warning message:&lt;/p>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/Firmware_Version_Warning_Message.png" alt="Warning message">&lt;/p>
&lt;p>you can safely ignore it. The VESC tool is backward compatible with the firmware version used on the xESC controller.&lt;/p>
&lt;/div>
&lt;h4 id="configure-xesc">Configure xESC&lt;/h4>
&lt;ul class="nav nav-tabs" id="tabs-4" role="tablist">
&lt;li class="nav-item">
&lt;a class="nav-link disabled"
id="tabs-04-00-tab" data-toggle="tab" href="#tabs-04-00" role="tab"
aria-controls="tabs-04-00" aria-selected="false">
&lt;strong>Choose your configuration path&lt;/strong>:
&lt;/a>
&lt;/li>&lt;li class="nav-item">
&lt;a class="nav-link active"
id="tabs-04-01-tab" data-toggle="tab" href="#tabs-04-01" role="tab"
aria-controls="tabs-04-01" aria-selected="false">
Preset configs (Yard Force)
&lt;/a>
&lt;/li>&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-04-02-tab" data-toggle="tab" href="#tabs-04-02" role="tab"
aria-controls="tabs-04-02" aria-selected="false">
SABO/John Deere (tuning)
&lt;/a>
&lt;/li>&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-04-03-tab" data-toggle="tab" href="#tabs-04-03" role="tab"
aria-controls="tabs-04-03" aria-selected="false">
New model? Let’s dial it in
&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="tab-content" id="tabs-4-content">
&lt;div class="tab-body tab-pane fade"
id="tabs-04-00" role="tabpanel" aria-labelled-by="tabs-04-00-tab">
&lt;/div>
&lt;div class="tab-body tab-pane fade show active"
id="tabs-04-01" role="tabpanel" aria-labelled-by="tabs-04-01-tab">
&lt;h4 id="upload-the-configurations">Upload the configurations&lt;/h4>
&lt;div class="tab-gallery">&lt;style>
.image-gallery {overflow: auto; margin-left: -1%!important;}
.image-gallery li {float: left; display: block; margin: 0 0 1% 1%; width: 24%;}
.image-gallery li a {text-align: center; text-decoration: none!important; color: #777;}
.image-gallery li a span {display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; padding: 3px 0;}
.image-gallery li a img {width: 100%; display: block;}
&lt;/style>&lt;ul class="image-gallery">&lt;li>
&lt;a href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/1%20-%20Load%20Motor%20Configuration%20XML_hu0eb09337d9fc523d6b24212fe2fcb3d8_166698_1600x1600_fit_q99_catmullrom_3.png" title="1 - Load Motor Configuration XML" class="lightbox-image">
&lt;img class="nozoom"
src="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/1%20-%20Load%20Motor%20Configuration%20XML_hu0eb09337d9fc523d6b24212fe2fcb3d8_166698_400x400_fill_q95_catmullrom_smart1_3.png"
alt="1 - Load Motor Configuration XML"
title="1 - Load Motor Configuration XML">
&lt;span title="1 - Load Motor Configuration XML">1 - Load Motor Configuration XML&lt;/span>
&lt;/a>
&lt;/li>&lt;li>
&lt;a href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/2%20-%20Select%20Motor%20XML%20Config_hu2b2ce675b08900813ce00c64727145e1_214179_1600x1600_fit_q99_catmullrom_3.png" title="2 - Select Motor XML Config" class="lightbox-image">
&lt;img class="nozoom"
src="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/2%20-%20Select%20Motor%20XML%20Config_hu2b2ce675b08900813ce00c64727145e1_214179_400x400_fill_q95_catmullrom_smart1_3.png"
alt="2 - Select Motor XML Config"
title="2 - Select Motor XML Config">
&lt;span title="2 - Select Motor XML Config">2 - Select Motor XML Config&lt;/span>
&lt;/a>
&lt;/li>&lt;li>
&lt;a href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/3%20-%20Ignore%20Configuration%20Version%20Warning%20Message_huf0970ccf74f2234a8e533e5627fa8d04_188960_1600x1600_fit_q99_catmullrom_3.png" title="3 - Ignore Configuration Version Warning Message" class="lightbox-image">
&lt;img class="nozoom"
src="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/3%20-%20Ignore%20Configuration%20Version%20Warning%20Message_huf0970ccf74f2234a8e533e5627fa8d04_188960_400x400_fill_q95_catmullrom_smart1_3.png"
alt="3 - Ignore Configuration Version Warning Message"
title="3 - Ignore Configuration Version Warning Message">
&lt;span title="3 - Ignore Configuration Version Warning Message">3 - Ignore Configuration Version Warning Message&lt;/span>
&lt;/a>
&lt;/li>&lt;li>
&lt;a href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/4%20-%20Write%20Motor%20Configuration_hu81be6b3f54ede5385c5d307c4ffd1418_165908_1600x1600_fit_q99_catmullrom_3.png" title="4 - Write Motor Configuration" class="lightbox-image">
&lt;img class="nozoom"
src="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/4%20-%20Write%20Motor%20Configuration_hu81be6b3f54ede5385c5d307c4ffd1418_165908_400x400_fill_q95_catmullrom_smart1_3.png"
alt="4 - Write Motor Configuration"
title="4 - Write Motor Configuration">
&lt;span title="4 - Write Motor Configuration">4 - Write Motor Configuration&lt;/span>
&lt;/a>
&lt;/li>&lt;li>
&lt;a href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/5%20-%20Load%20App%20Config_hu958e648c383bac8982d55fff917b9920_171326_1600x1600_fit_q99_catmullrom_3.png" title="5 - Load App Config" class="lightbox-image">
&lt;img class="nozoom"
src="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/5%20-%20Load%20App%20Config_hu958e648c383bac8982d55fff917b9920_171326_400x400_fill_q95_catmullrom_smart1_3.png"
alt="5 - Load App Config"
title="5 - Load App Config">
&lt;span title="5 - Load App Config">5 - Load App Config&lt;/span>
&lt;/a>
&lt;/li>&lt;li>
&lt;a href="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/6%20-%20Write%20App%20Config_huc9635877522a0f61a37b4ccc6225d372_161627_1600x1600_fit_q99_catmullrom_3.png" title="6 - Write App Config" class="lightbox-image">
&lt;img class="nozoom"
src="https://openmower.de/archive/v1.2.0/docs/knowledge-base/configure-xesc/images/upload-configurations/6%20-%20Write%20App%20Config_huc9635877522a0f61a37b4ccc6225d372_161627_400x400_fill_q95_catmullrom_smart1_3.png"
alt="6 - Write App Config"
title="6 - Write App Config">
&lt;span title="6 - Write App Config">6 - Write App Config&lt;/span>
&lt;/a>
&lt;/li>
&lt;/ul>
&lt;/div>
&lt;p>With the VESC Configuration Tool connected, you can now upload the configuration to your xESC controllers:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>[Image 1]&lt;/strong>: Click &lt;code>File -&amp;gt; Load Motor Configuration XML&lt;/code>&lt;/li>
&lt;li>&lt;strong>[Image 2]&lt;/strong>: Select the motor configuration XML file for your motor (different for mowing motor and the drive motors)&lt;/li>
&lt;li>&lt;strong>[Image 3]&lt;/strong>: Ignore the version message, if it appears&lt;/li>
&lt;li>&lt;strong>[Image 4]&lt;/strong>: Click &lt;code>Write Motor configuration&lt;/code>. The green banner will appear on success.&lt;/li>
&lt;li>&lt;strong>[Image 5]&lt;/strong>: Click &lt;code>File -&amp;gt; Load App Configuration XML&lt;/code>. Ignore the version message, if it appears&lt;/li>
&lt;li>&lt;strong>[Image 6]&lt;/strong>: Click &lt;code>Write App configuration&lt;/code>. The green banner will appear on success.&lt;/li>
&lt;li>&lt;strong>Hit &lt;kbd>Ctrl&lt;/kbd> + &lt;kbd>C&lt;/kbd>&lt;/strong> in the openmower terminal to stop exposing the xESC controller.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Repeat these steps for all three of the three xESC controllers.&lt;/strong>&lt;/p>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-04-02" role="tabpanel" aria-labelled-by="tabs-04-02-tab">
&lt;h4 id="required-preparations">Required preparations&lt;/h4>
&lt;ol>
&lt;li>Remove the mower blade.&lt;/li>
&lt;li>Really, remove the blade! This is a huge mower with a strong motor and large blade! 💀&lt;/li>
&lt;li>Lift the mower&amp;rsquo;s rear so wheels can spin freely (use a carton, block or stand).&lt;/li>
&lt;li>Unmount the mower blade!&lt;/li>
&lt;li>Use battery power for calibration (not dock power), and ensure the battery has sufficient charge.&lt;/li>
&lt;li>Check if you disassembled the mower blade!&lt;/li>
&lt;/ol>
&lt;h4 id="drive-motor-calibration-left-then-right">Drive motor calibration (left then right)&lt;/h4>
&lt;p>Perform calibration for left drive first, then repeat the procedure for the right drive.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Enable realtime data:&lt;/strong> Later on, we wanna validate our calibration with a known reference value, but also during calibration it&amp;rsquo;s interesting to see the displayed values in the marked 2 window. That&amp;rsquo;s why we enable real-time data first:&lt;br>
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_3_realtime_data.jpg" alt="RT Data">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Start the &lt;strong>FOC Calibration Wizard&lt;/strong>:&lt;br>
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_1.jpg" alt="Start FOC Calibration">&lt;br>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Now we need to provide some specs of our motor. &lt;strong>These are the specs for the left and right drive motors&lt;/strong>, for the mow motor, we need to use other specs:&lt;br>
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_2.jpg" style="vertical-align: middle; width:31%"> 🡆 &lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_3.jpg" style="vertical-align: middle; width:31%"> 🡆 &lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_4.jpg" style="vertical-align: middle; width:31%">&lt;br>&lt;/p>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_5.jpg" style="vertical-align: middle; width:31%"> 🡆 &lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_6.jpg" style="vertical-align: middle; width:31%"> 🡆 &lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_7.jpg" style="vertical-align: middle; width:31%">&lt;br>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Once calibration has been done, &lt;strong>do not change the direction&lt;/strong> (even though the left wheel turns forward during calibration, whereas the right one backwards):&lt;/p>
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_4_voc_8.jpg" style="vertical-align: middle; width:31%">
&lt;/li>
&lt;li>
&lt;p>Now that the calibration succeed, lets test the result:
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_5_test.jpg" alt="Run Test">&lt;br>&lt;/p>
&lt;p>Test with &amp;ldquo;&lt;strong>D 0,4&lt;/strong>&amp;rdquo; (1) and press the &amp;ldquo;Duty cycle&amp;rdquo; play button (2). If it draw &lt;strong>&amp;lt;= 0.15A&lt;/strong> (3) and sound healty, it is calibrated well.&lt;br>
Test with some higher duty settings. It will become more loud for sure, but should always spin smooth and sound healty. If not, press the STOP sign (4).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>As a last important step, load the correct ESC-App config via: &lt;em>File → Load App Configuration XML&lt;/em>, choose &lt;code>SABO_Drive-App.xml&lt;/code> (see &lt;a href="https://github.com/xtech/hw-openmower-sabo/tree/main/Configs/xESC" target="_blank" rel="noopener">SABO ESCs configs&lt;/a>
) and finally press the &lt;code>↧A&lt;/code> icon (Write app configuration) on the right side.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>Done 😆&lt;br>
&amp;hellip; &lt;strong>but not finished&lt;/strong> ✌️ &amp;hellip; you need to do the whole procedure again, but with the right drive side.&lt;/p>
&lt;p>So, &lt;kbd>Ctrl&lt;/kbd>+&lt;kbd>c&lt;/kbd> your &lt;code>openmower expose-xesc left&lt;/code>, and do it again but with &lt;code>openmower expose-xesc right&lt;/code>.&lt;/p>
&lt;h4 id="mow-motor-calibration">Mow Motor Calibration&lt;/h4>
&lt;p>For the mow motor ESC calibration, you do the same workflow, but with adapted values:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;code>openmower expose-xesc mower&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>During FOC Calibration Wizard use the following values:&lt;/p>
&lt;ul>
&lt;li>Tab &amp;ldquo;Motor&amp;rdquo; = Medium Inrunner ~750g
&lt;ul>
&lt;li>Advanced: Max Power Loss = 200, Motor Poles = 8&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Tab &amp;ldquo;Battery&amp;rdquo;
&lt;ul>
&lt;li>Battery Capacity = 3.9Ah (same as before)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Tab &amp;ldquo;Setup&amp;rdquo;
&lt;ul>
&lt;li>Gear Ratio = Check Direct Drive&lt;/li>
&lt;li>Motor Poles = 8&lt;/li>
&lt;li>Motor Temp. Sensor = disabled&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Test with &amp;ldquo;&lt;strong>D 0,08&lt;/strong>&amp;rdquo; which should draw &lt;strong>&amp;lt;= 0.52A&lt;/strong> (without assembled blade)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Check/Adjust blade rotation direction:&lt;br>
We need to ensure that the blade rotate CCW (when watching from downside onto the axis). Do this with a slow rotation speed like &amp;ldquo;D 0,08&amp;rdquo;.&lt;/p>
&lt;p>If it rotates CW, change direction via: &lt;em>Motor Settings → General → Tab General → Invert Motor Direction&lt;/em>. &lt;strong>Do not forget to do: &amp;ldquo;Write motor configuration&amp;rdquo; via &lt;code>↧M&lt;/code>&lt;/strong>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Load the correct ESC-App config via: &lt;em>File → Load App Configuration XML&lt;/em>, choose &lt;code>SABO_Mower-App.xml&lt;/code> (see &lt;a href="https://github.com/xtech/hw-openmower-sabo/tree/main/Configs/xESC" target="_blank" rel="noopener">SABO ESCs configs&lt;/a>
) and finally press the &lt;code>↧A&lt;/code> icon (Write app configuration) on the right side.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Limit blade RPM:&lt;br>
It&amp;rsquo;s important to limit the max. RPM to the one like OEM is running it! Otherwise you risk your motor bearings or more dangerous: Your blade might fly away 💀
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/configure-xesc//images/sabo/vesc_7_mow_settings2.jpg" alt="Limit RPM">&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div>
&lt;div class="tab-body tab-pane fade"
id="tabs-04-03" role="tabpanel" aria-labelled-by="tabs-04-03-tab">
&lt;p>Choose your adventure. Your build, your rules.&lt;/p>
&lt;/div>
&lt;/div></description></item><item><title>Docs: Firmware Update</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/firmware-update/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/firmware-update/</guid><description>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
&lt;p>Early versions of the xCore board have a bug in the bootloader which sometimes prevents the board from being detected by the &lt;code>openmower&lt;/code> tool.&lt;/p>
&lt;p>If you encounter Timeout errors during the firmware installation process, update the bootloader by running: &lt;code>openmower update-bootloader&lt;/code> and try again.&lt;/p>
&lt;/div>
&lt;p>To install the firmware to the xCore board, simply run: &lt;code>openmower update-firmware&lt;/code>. The &lt;code>openmower&lt;/code> tool will read your environment variables, download the appropriate firmware binary and upload it to the xCore board via Ethernet.&lt;/p>
&lt;p>The expected output is shown below:&lt;/p>
&lt;div class="container pb-3 pt-3">
&lt;div class="row justify-content-md-center">
&lt;div id="step-3-2-2-player" class="">&lt;/div>
&lt;/div>
&lt;div class="row justify-content-md-center">
&lt;div>Example output for &lt;code>openmower update-firmware&lt;/code> command.&lt;/div>
&lt;/div>
&lt;/div>
&lt;script>
AsciinemaPlayer.create(
'/archive/v1.2.0/docs/knowledge-base/firmware-update//cast/openmower-update-firmware.cast',
document.getElementById('step-3-2-2-player'),
{ cols: 110, rows: 24, autoplay: false, loop: true }
);
&lt;/script></description></item><item><title>Docs: GPS / Coordinate System</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/rtk-gps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/rtk-gps/</guid><description>
&lt;h2 id="positioning--coordinate-system">Positioning / Coordinate System&lt;/h2>
&lt;p>Positioning in the Open Mower project is done in a local 2D coordinate system. This means that the robot&amp;rsquo;s current position can be described by the coordinates (X / Y) of the VRP and the current orientation.&lt;/p>
&lt;p>The origin of the coordinate system can either be chosen freely by the user or can be set to the base station. If an external correction service is used, the origin has to be specified manually.&lt;/p>
&lt;p>Open Mower uses a right-handed ENU coordinate system.&lt;/p></description></item><item><title>Docs: GPS Base Setup</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/rtk-base-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/rtk-base-setup/</guid><description>
&lt;p>This part of the documentation is work in progress. There are many ways of setting up the RTK base, here is one using RPi 0W, ZED-F9P and a web based software RTKBase. On discord you may ask karl.ranseier for support.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://amzn.to/48sGCVP" target="_blank" rel="nofollow noopener">Raspberry Pi 0W&lt;/a>
&lt;/li>
&lt;li>µSD card&lt;/li>
&lt;li>Power supply for RPi&lt;/li>
&lt;li>&lt;a href="https://www.ardusimple.com/product/simplertk2b-basic-starter-kit-ip65/" target="_blank" rel="nofollow noopener">Ardusimple ZED-F9P&lt;/a>
&lt;/li>
&lt;li>A cable or combinatin of cables to connect micro usb male to micro usb male:
&lt;ul>
&lt;li>A) Direct like &lt;a href="https://amzn.to/3K7kfMs" target="_blank" rel="nofollow noopener">this&lt;/a>
&lt;/li>
&lt;li>B) Adapter (&lt;a href="https://amzn.to/4ifLYqG" target="_blank" rel="nofollow noopener">like this&lt;/a>
) + micro usb to usb-a cable&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>A windows PC&lt;/li>
&lt;li>Stable internet connection (no disconnection within one hour)&lt;/li>
&lt;/ul>
&lt;h2 id="installation">Installation&lt;/h2>
&lt;p>If you know about RPi and have already a functional OS, you may head on to &amp;ldquo;Software&amp;rdquo;, but in my case it did not work using an older image.&lt;/p>
&lt;h3 id="preparing-sd-card">Preparing sd card&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Download &lt;a href="https://www.raspberrypi.com/software/" target="_blank" rel="noopener">RPi Imager&lt;/a>
for windows&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Start Imager:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="Imager1.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Choose your RPI (in my case RPi 0W, choosing wrong RPi will most probably result in many problems)&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Imager2.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Choose Operating system &amp;ldquo;Raspberry Pi OS lite (legacy, 32bit)&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Imager3.png" width="120">&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Imager4.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Select your sd card:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Imager5.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Press next so this will appear:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Imager6.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Edit settings like the following (and use your personal WiFi settings and country), where you set a good password for your Pi account. Username and password are case sensitive!&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./OSCustom1.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>activate SSH:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./OSCustom.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Press save to see this:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./OSCustom2.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Click on YES and allow to overwrite the data on your sd card (if you are sure, that you will not miss them). It will start downloading and writing the data:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Imager7.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Wait until it is finished, it may take half an hour, depending on your internet connection ;-)&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="start-your-rtkbase-rpi">Start your RTKBase RPi&lt;/h3>
&lt;ul>
&lt;li>Put your sd card into your RPi&lt;/li>
&lt;li>Connect ZED-F9P via usb to your RPi (NOT after the installation, it will be configured during installation).&lt;/li>
&lt;li>Power your RPi&lt;/li>
&lt;/ul>
&lt;h3 id="connect-to-rpi">Connect to RPi&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Get from your router the IP of your RPi&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Start &lt;a href="https://putty.org" target="_blank" rel="noopener">PuTTY&lt;/a>
and connect to RPi, where you enter the local IP of your RPi&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Putty1.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Enter your Username Pi, press enter and than enter your password:&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Putty2.png" width="120">&lt;/p>
&lt;p>&lt;img src="" alt=""> &lt;img src="./Putty3.png" width="120">&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="software">Software&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Is your ZED-F9P connected? Do it!&lt;/p>
&lt;/li>
&lt;li>
&lt;p>We will use &lt;a href="https://github.com/Stefal/rtkbase" target="_blank" rel="noopener">RTKBase&lt;/a>
&lt;/p>
&lt;/li>
&lt;li>
&lt;p>To install it, you can use the following lines, which you can copy and paste at once. The original recommendation is no sudo in front of chmod. That did not work for me.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">cd&lt;/span> ~
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>wget https://raw.githubusercontent.com/Stefal/rtkbase/master/tools/install.sh -O install.sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo chmod +x install.sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo ./install.sh --all release
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>A very long output should follow. It ends with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>GNSS Configuration: &lt;span style="color:#204a87;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">################################&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>STARTING SERVICES
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">################################&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Created symlink /etc/systemd/system/multi-user.target.wants/str2str_tcp.service → /etc/systemd/system/str2str_tcp.service.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Job &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> gpsd.service failed because the control process exited with error code.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>See &lt;span style="color:#4e9a06">&amp;#34;systemctl status gpsd.service&amp;#34;&lt;/span> and &lt;span style="color:#4e9a06">&amp;#34;journalctl -xe&amp;#34;&lt;/span> &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> details.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">################################&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>END OF INSTALLATION
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>You can open your browser to http://192.168.178.34 &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>here the editor deleted IPV6&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">################################&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Pi@RTKBase:~ $
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Installation finished, go on and configure your RTKBase&lt;/p>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;h2 id="configuring-your-rtkbase">Configuring your RTKBase&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Start a browser and enter the IP address of your RTKBase. You will get this:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase01.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Enter as password admin. On the following site press the copy symbol right to PPP.&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase02.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Go to settings and press &amp;ldquo;options&amp;rdquo; right to &amp;ldquo;Main Service&amp;rdquo;, than paste your coordinates to &amp;ldquo;Base coordinates&amp;rdquo;:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase03.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Press on options again, than on options right to &amp;ldquo;Caster Service&amp;rdquo;&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase04.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Here you have to enter the setting set up in your mower, standard is: username gps and password gps. Select the right mount point. I have named it like my city, in mower config and here.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Save the config&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Switch on &amp;ldquo;Caster Service&amp;rdquo; and &amp;ldquo;File Service&amp;rdquo;, it should look like this:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase05.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Eventually change your password below these options.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>At logs you should find at least two files:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase06.png" width="120">&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="find-the-position-of-your-rtkbase">Find the position of your RTKBase&lt;/h3>
&lt;p>There are several ways to find your position. To use openmower you do not need the perfect position. Therefore the first option should be your choice, if you want a fast and good result for openmower.&lt;/p>
&lt;h4 id="easy-and-good-way">Easy and good way&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>Click on the symbol right to PPP to copy the values to the clipboard:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase02.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Enter these values to your options at MainService.&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase03.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Save&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ReActivate Ntrip Service&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Finished!&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h4 id="more-complicated-and-more-exact-way">More complicated and more exact way&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>You have to set up the logging of your position as mentioned above by activating &amp;ldquo;file service&amp;rdquo;. You should wait for a day to average all the values to get a high precision position.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>After midnight you find a zip-file at logs. This you can convert to a Rinex file. To understand this file you may check &lt;a href="http://walter.bislins.ch/bloge/index.asp?page=Understanding&amp;#43;GPS%2FGNSS&amp;#43;RINEX&amp;#43;Files&amp;#43;and&amp;#43;Relevant&amp;#43;Parameters" target="_blank" rel="noopener">RINEX-File&lt;/a>
, but you don&amp;rsquo;t need it.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Press on the pencil right to the zip-file:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase07.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&amp;ldquo;Create Rinex file&amp;rdquo;:&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase08.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Download it when finished (may take a while, some minutes or longer)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Go to &lt;a href="https://rgp.ign.fr/SERVICES/calcul_online.php" target="_blank" rel="noopener">Calculator&lt;/a>
, upload your Rinex file and enter your email address. Don&amp;rsquo;t forget to enter the &amp;ldquo;no robot&amp;rdquo;-verification.&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./ignfr.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>When you received the email, look at &amp;ldquo;ITRF2014&amp;rdquo; (or search for &amp;ldquo;longitude&amp;rdquo;) and see your values like LONGITUDE 6.XXXXXXXXX° LATITUDE 51.XXXXXXXXX° HELL 79.9041&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./averaged.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You enter these values to your options at MainService. Be aware that the order of LONGITUDE and LATITUDE is switched!&lt;/p>
&lt;p>&lt;img src="" alt="">&lt;img src="./RTKBase03.png" width="120">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Save&lt;/p>
&lt;/li>
&lt;li>
&lt;p>ReActivate Ntrip Service&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Finished!&lt;/p>
&lt;/li>
&lt;/ul>
&lt;br>
&lt;p>Thanks to Stefal and all the contributors of RTKBase and the used resources.&lt;/p></description></item><item><title>Docs: Shopping List</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/shopping-list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/shopping-list/</guid><description>
&lt;p>&lt;em>If you make a purchase through the links marked with an Asterisk (*), I may earn a small commission at no extra cost to you. Thank you for supporting this project!&lt;/em>&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Read this first: &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/getting-started/#important-info">Important Info&lt;/a>
&lt;/div>
&lt;h2 id="parts-for-the-robot-and-the-charging-station">Parts for the Robot and the Charging Station&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Quantity Required&lt;/th>
&lt;th>Source Link&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Mower&lt;br>(YardForce Classic 500(B))&lt;/td>
&lt;td>The mower to modify.&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;a href="https://amzn.to/3NWgIxk" target="_blank" rel="nofollow noopener">Amazon*&lt;/a>
&lt;/td>
&lt;td>Check the &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/compatible-mowers/">Compatible Mowers&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Open Mower Hardware Kit&lt;/td>
&lt;td>The electronics we will mount inside the robot and the charging station. Also includes goodies to make stuff easier to mount.&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;b>Version 2 Hardware:&lt;/b>&lt;br/> (see &lt;a href="">Announcement&lt;/a>
)&lt;br/>Contact @Apehaenger on Discord, he has Hardware available&lt;br/>&lt;br/>&lt;b>Version 1 Hardware:&lt;/b>&lt;br/>&lt;a href="https://shop.devops.care/10-openmower" target="_blank" rel="nofollow noopener">Vermut&amp;rsquo;s shop&lt;/a>
&lt;/td>
&lt;td>Alternatively you can source and solder most of these parts yourself. Check the repositories in the Links section for PCB designs and BOMs.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ardusimple RTK2B GPS + Antenna&lt;/td>
&lt;td>Positioning system for the robot&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;a href="https://www.ardusimple.com/product/simplertk2b-basic-starter-kit-ip65/" target="_blank" rel="nofollow noopener">ArduSimple&lt;/a>
&lt;/td>
&lt;td>Some users use &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/unicore-gps/">UM9XX chips&lt;/a>
(available from &lt;a href="https://witmotion-sensor.com/products/rtk-gps-gnss-modules-centimeter-level-um982-um980-um960" target="_blank" rel="nofollow noopener">WitMotion&lt;/a>
and &lt;a href="https://aliexpress.com/item/1005007177629130.html" target="_blank" rel="nofollow noopener">AliExpress&lt;/a>
) as alternative. Compared to ArduSimple, they&amp;rsquo;re a bit cheaper and support triple-band frequencies.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Raspberry Pi Compute Module 4 with WiFi&lt;/td>
&lt;td>The brain of the robot.&lt;br>&lt;br>RAM: 2GB+ for running the software&lt;br>4GB+ for development&lt;br>&lt;br> 16GB+ storage (eMMC or µSD Card)&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;a href="https://rpilocator.com/?cat=CM4&amp;amp;instock" target="_blank" rel="noopener">RPi Locator&lt;/a>
&lt;/td>
&lt;td>Yes, it has to be the Raspberry Pi CM4, because we need all the UARTs and it goes into the xCore board.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>µSD Card&lt;/td>
&lt;td>Only for RPi CM4 Lite. The absolute minimum capacity you should buy is 16GB. But better buy a 32GB one&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;a href="https://amzn.to/3EeWBXj" target="_blank" rel="nofollow noopener">Amazon*&lt;/a>
or your local hardware store&lt;/td>
&lt;td>A Gucci option would be a &lt;a href="https://www.uugear.com/product/raspikey-plug-and-play-emmc-module-for-raspberry-pi/" target="_blank" rel="nofollow noopener">RasPiKey&lt;/a>
&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Optional:&lt;/strong>&lt;/td>
&lt;td>&lt;strong>Optional:&lt;/strong>&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>USB Wi-Fi Dongle&lt;/td>
&lt;td>For better Wi-Fi reception&lt;/td>
&lt;td>0&lt;/td>
&lt;td>&lt;/td>
&lt;td>Check for Linux Support&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Left-Angle USB adapter&lt;/td>
&lt;td>If you want to keep Wi-Fi dongle inside the mower. RPi USB is really close to the mower side wall&lt;/td>
&lt;td>0&lt;/td>
&lt;td>&lt;a href="https://amzn.to/3ukNAIj" target="_blank" rel="nofollow noopener">Amazon*&lt;/a>
or your local hardware store&lt;/td>
&lt;td>The kit contains the wire to connect external USB port. That may be enough if Wi-Fi dongle is waterproof.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="parts-for-the-gps-base-station">Parts for the GPS Base Station&lt;/h2>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Info&lt;/h4>
You only need a GPS base station if you don&amp;rsquo;t have access to an external NTRIP service. There are multiple free services available, so check before buying this.
&lt;/div>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Quantity Required&lt;/th>
&lt;th>Source Link&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Raspberry Pi&lt;br>+ SD Card&lt;br>+ Power Supply&lt;/td>
&lt;td>You can basically use any Raspberry Pi for this. No special requirements.&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;a href="https://amzn.to/4a904YP" target="_blank" rel="nofollow noopener">e.g. Raspberry Pi 4&lt;/a>
&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ardusimple RTK2B GPS + Antenna&lt;/td>
&lt;td>Positioning system for the base station&lt;/td>
&lt;td>1&lt;/td>
&lt;td>&lt;a href="https://www.ardusimple.com/product/simplertk2b-basic-starter-kit-ip65/" target="_blank" rel="nofollow noopener">ArduSimple&lt;/a>
&lt;/td>
&lt;td>See above&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For the setup check the &lt;a href="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/rtk-base-setup/">GPS Base Setup Guide&lt;/a>
&lt;/p></description></item><item><title>Docs: The Map</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/the-map/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/the-map/</guid><description>
&lt;h2 id="the-map">The Map&lt;/h2>
&lt;p>The most important information for the Open Mower is its map. The map tells the robot in which areas the robot is allowed to drive &lt;strong>(= Navigation Area)&lt;/strong>, which areas need to be mowed &lt;strong>(= Mowing Area)&lt;/strong> and where the docking station is located. Using this information, the robot is able to do its work automatically.&lt;/p>
&lt;p>Each area consists of &lt;strong>one outline&lt;/strong> and &lt;strong>multiple obstacles&lt;/strong>. The mower is allowed to drive inside the outline of all areas, except for the obstacles. This way you can exclude some parts of your lawn and prevent the mower from entering them.&lt;/p>
&lt;p>The map is stored in the &lt;code>map.json&lt;/code> file that is located on the mower at &lt;code>/home/openmower/ros_home&lt;/code>&lt;/p></description></item><item><title>Docs: Unicore GPS Modules</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/unicore-gps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/unicore-gps/</guid><description>
&lt;p>Several users have chosen alternative GPS RTK modules with chips by &lt;strong>Unicore&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>UM960&lt;/li>
&lt;li>UM980&lt;/li>
&lt;li>UM982&lt;/li>
&lt;/ul>
&lt;p>These chips are sold in different variants. Some come with a USB-C socket (so they can be connected directly to the Raspberry Pi). Some have a different antenna socket, which requires an &lt;em>SMA F&lt;/em> to &lt;em>MMCX M90&lt;/em> cable.&lt;/p>
&lt;p>Compared to the &lt;em>ArduSimple simpleRTK2B&lt;/em>, they are a bit cheaper and support triple-band frequencies.&lt;/p>
&lt;h2 id="connection-options">Connection options&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Connection&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Module USB-C → RPi USB&lt;/td>
&lt;td>e.g. with angle connector&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Module UART → MainBoard UART&lt;/td>
&lt;td>requires header connectivity&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="configuration-options">Configuration options&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Method&lt;/th>
&lt;th>When to use&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Vendor software (UPrecise) on Windows&lt;/td>
&lt;td>Before installing module into mower&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Over UART bus (terminal only)&lt;/td>
&lt;td>When RPi is installed and operational&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="software">Software&lt;/h2>
&lt;p>The vendor offers &lt;a href="https://en.unicore.com/products/uprecise.html" target="_blank" rel="noopener">UPrecise&lt;/a>
to check all status details and configure the receiver. The UI is pleasing and has many features, but also quite some bugs. The download requires creating a free account.&lt;/p>
&lt;h2 id="configuration-via-uprecise-usb">Configuration via UPrecise (USB)&lt;/h2>
&lt;h3 id="receiver">Receiver&lt;/h3>
&lt;p>Connect to the receiver via UPrecise. COM3 is used when connected via USB. Paste the following commands into UPrecise:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>FRESET
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CONFIG COM3 460800
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MODE ROVER UAV
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGGA 0.1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGSV 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPRMC 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGSA 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPVTG 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGST 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>SAVECONFIG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can also connect directly to the receiver&amp;rsquo;s TTY, but make sure to send CR+LF (&lt;code>\r\n&lt;/code>) line endings — otherwise commands won&amp;rsquo;t be recognized.&lt;/p>
&lt;h3 id="openmower-mower_configtxt">OpenMower (&lt;code>mower_config.txt&lt;/code>)&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OM_GPS_PROTOCOL&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;NMEA&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OM_GPS_PORT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;/dev/ttyUSB0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OM_GPS_BAUDRATE&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;460800&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configuration-via-uart-mainboard">Configuration via UART (mainboard)&lt;/h2>
&lt;p>Use this method when the RPi is already installed and you want to wire the module directly to the mainboard UART header.&lt;/p>
&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;ul>
&lt;li>Modified mower with replaced mainboard&lt;/li>
&lt;li>RPi with &lt;code>openmower&lt;/code> service running&lt;/li>
&lt;/ul>
&lt;h3 id="step-1--solder-headers-on-the-um9xx">Step 1 — Solder headers on the UM9XX&lt;/h3>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/unicore-gps//images/wm9xx.png" alt="UM9XX module with header pins">&lt;/p>
&lt;p>You only need the 4 middle pins from the 6 available: &lt;strong>GND&lt;/strong>, &lt;strong>VCC&lt;/strong>, &lt;strong>TX&lt;/strong>, &lt;strong>RX&lt;/strong>.&lt;/p>
&lt;p>The remaining 2 pins are not needed:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>EN&lt;/strong> — can be used to temporarily shut down the module&lt;/li>
&lt;li>&lt;strong>PPS&lt;/strong> — pulse-per-second signal, useful only if you need precise timing&lt;/li>
&lt;/ul>
&lt;h3 id="step-2--wire-um9xx-to-the-mainboard">Step 2 — Wire UM9XX to the mainboard&lt;/h3>
&lt;p>An &lt;a href="https://github.com/xtech/hw-openmower-utils/tree/main/hw-openmower-utils-v1-arduino-uno-um9x" target="_blank" rel="noopener">adapter board&lt;/a>
is available as an alternative to manual wiring.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>MainBoard&lt;/th>
&lt;th>UM9XX&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>TXD&lt;/td>
&lt;td>TXD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>RXD&lt;/td>
&lt;td>RXD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>5V_IN&lt;/td>
&lt;td>VCC&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>GND&lt;/td>
&lt;td>GND&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/unicore-gps//images/um9xx-wiring-pinout.jpg" alt="UM9XX wiring pinout sample">
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/unicore-gps//images/mainboard-wiring.jpg" alt="Mainboard wiring sample">&lt;/p>
&lt;h3 id="step-3--configure-um9xx-over-uart">Step 3 — Configure UM9XX over UART&lt;/h3>
&lt;p>Install miniterm (part of &lt;code>python3-serial&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo apt-get install python3-serial
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Stop the openmower service so it does not occupy the UART bus:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo systemctl stop openmower
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Connect to the UART bus at the default baud rate (115200):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>python -m serial.tools.miniterm /dev/ttyAMA1 &lt;span style="color:#0000cf;font-weight:bold">115200&lt;/span> -e
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
Press &lt;kbd>Enter&lt;/kbd> after each command to send it to the receiver.
&lt;/div>
&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> The following commands assume you wired to the bottom lane (COM1). If you used a different lane, replace &lt;code>COM1&lt;/code> with &lt;code>COM2&lt;/code>.&lt;/p>
&lt;/blockquote>
&lt;p>Factory-reset the module and note the response:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>FRESET
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Expected output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>$command,FRESET,response: OK*4D
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>system is rebooting
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>..........
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$devicename,COM1*67
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Set the baud rate to 460800:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>CONFIG COM1 460800
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Exit miniterm with &lt;strong>Ctrl+]&lt;/strong>, then reconnect at the new baud rate:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>python -m serial.tools.miniterm /dev/ttyAMA1 &lt;span style="color:#0000cf;font-weight:bold">460800&lt;/span> -e
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>&lt;strong>Note:&lt;/strong> If commands get no response, the baud rate or COM port is wrong. Reconnect at 115200, run &lt;code>FRESET&lt;/code>, and try again.&lt;/p>
&lt;/blockquote>
&lt;p>Configure NMEA output. Each &lt;code>GP*&lt;/code> command produces extra output — make sure &lt;code>SAVECONFIG&lt;/code> completes successfully at the end:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>MODE ROVER UAV
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGSV COM1 2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPRMC COM1 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGSA COM1 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPVTG COM1 1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GPGGA COM1 0.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>SAVECONFIG
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Expected output after &lt;code>SAVECONFIG&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>$GNGGA,192705.50,,,,,0,00,9999.0,,,,,,*45
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$command,SAVECONFIG,response: OK*55
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$GNGGA,192706.00,,,,,0,00,9999.0,,,,,,*43
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$GPGSA,,1,,,,,,,,,,,,,,,,*73
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$GNRMC,192706.00,V,,,,,,,030625,0.0,E,N,V*7B
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Exit miniterm with &lt;strong>Ctrl+]&lt;/strong>.&lt;/p>
&lt;h3 id="step-4--configure-openmower">Step 4 — Configure OpenMower&lt;/h3>
&lt;p>Run &lt;code>openmower configure ros&lt;/code> and set the GPS protocol to &lt;code>NMEA&lt;/code> and the baud rate to &lt;code>460800&lt;/code>.&lt;/p>
&lt;p>With your RTK base configured, take the mower outside and verify you get a GPS fix.&lt;/p>
&lt;h2 id="troubleshooting--receiver-resets">Troubleshooting — receiver resets&lt;/h2>
&lt;p>If the receiver cannot get a fix, a reboot may help. UPrecise provides three reset buttons. Unlike &lt;code>FRESET&lt;/code>, these &lt;strong>do not wipe the configuration&lt;/strong>:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Button&lt;/th>
&lt;th>Command&lt;/th>
&lt;th>Effect&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Hot Start&lt;/td>
&lt;td>&lt;code>RESET&lt;/code>&lt;/td>
&lt;td>Quick restart&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Warm Start&lt;/td>
&lt;td>&lt;code>RESET EPHEM&lt;/code>&lt;/td>
&lt;td>Clears ephemeris data&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cold Start&lt;/td>
&lt;td>&lt;code>RESET EPHEM ALMANAC IONUTC POSITION&lt;/code>&lt;/td>
&lt;td>Full data reset&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>See section 8.3 (&amp;ldquo;Reset&amp;rdquo;) in the &lt;a href="https://core-electronics.com.au/attachments/localcontent/Unicore_Reference_Commands_Manual_For_N4_High_Precision_Products_V2_EN_R1_1_189543505cb.pdf" target="_blank" rel="nofollow noopener">Unicore command reference&lt;/a>
for details.&lt;/p></description></item><item><title>Docs: Using a Gamepad</title><link>https://openmower.de/archive/v1.2.0/docs/knowledge-base/using-a-gamepad/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://openmower.de/archive/v1.2.0/docs/knowledge-base/using-a-gamepad/</guid><description>
&lt;p>Using a USB gamepad is the most intuitive way to control your OpenMower during the area recording process. Instead of relying on the on-screen joystick in the web app, a physical controller gives you precise control over the mower&amp;rsquo;s movement — making it much easier to drive clean outlines around your mowing areas.&lt;/p>
&lt;p>Any Xbox-compatible USB gamepad works out of the box. Simply plug it into one of the USB ports on your Raspberry Pi and OpenMower will detect it automatically. No additional configuration is needed.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Recording Mode Required&lt;/h4>
&lt;p>Gamepad control only works while OpenMower is in &lt;strong>recording mode&lt;/strong>. Enter recording mode using the OpenMower app before using any of the buttons below.&lt;/p>
&lt;p>If no map has been recorded yet, OpenMower will automatically start in recording mode — no action needed.&lt;/p>
&lt;/div>
&lt;h2 id="video-tutorial">Video Tutorial&lt;/h2>
&lt;p>The video below walks through the entire area recording process, including how to use the gamepad to drive the mower and save mowing areas.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/j7qkwuoHJpI" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h2 id="button-reference">Button Reference&lt;/h2>
&lt;figure>
&lt;img src="https://openmower.de/archive/v1.2.0/archive/v1.2.0/docs/knowledge-base/using-a-gamepad/images/gamepad_controls.png"
alt="OpenMower Gamepad Controls (image licensed from shutterstock.com)"/> &lt;figcaption>
&lt;p>OpenMower Gamepad Controls (image licensed from shutterstock.com)&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>The table below covers every button used during normal operation and area recording. Most of your time will be spent holding &lt;strong>A&lt;/strong> to drive and using &lt;strong>B&lt;/strong> to start and stop recordings.&lt;/p>
&lt;h3 id="driving">Driving&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Input&lt;/th>
&lt;th>Action&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Hold &lt;strong>A&lt;/strong> + left analog stick&lt;/td>
&lt;td>Drive the mower&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>RB&lt;/strong>&lt;/td>
&lt;td>Turbo mode (faster driving)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="recording-areas">Recording Areas&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Input&lt;/th>
&lt;th>Action&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>B&lt;/strong>&lt;/td>
&lt;td>Start / stop recording the current polygon&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Y&lt;/strong> + &lt;strong>D-PAD UP&lt;/strong>&lt;/td>
&lt;td>Finish and save current area as a &lt;strong>navigation area&lt;/strong> — the mower can drive here but will not mow&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Y&lt;/strong> + &lt;strong>D-PAD DOWN&lt;/strong>&lt;/td>
&lt;td>Finish and save current area as a &lt;strong>mowing area&lt;/strong> — at least one is required&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="docking-station">Docking Station&lt;/h3>
&lt;p>Recording the docking station requires two separate position fixes that define the approach direction. The line between these two points tells the mower which way to face when returning to dock.&lt;/p>
&lt;ol>
&lt;li>Drive the mower to a point roughly &lt;strong>1.5 m in front of the docking station&lt;/strong>, facing toward it. Press &lt;strong>X&lt;/strong> to record the first point.&lt;/li>
&lt;li>Drive the mower forward until the &lt;strong>front wheels are just at the edge of the docking station&lt;/strong> — do not fully drive in. Press &lt;strong>X&lt;/strong> again to record the second point.&lt;/li>
&lt;/ol>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Input&lt;/th>
&lt;th>Action&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>X&lt;/strong> (first press)&lt;/td>
&lt;td>Record approach point ~1.5 m in front of the dock&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>X&lt;/strong> (second press)&lt;/td>
&lt;td>Record dock entry point at the edge of the station&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item></channel></rss>