Hi FarmBot community,
I'm happy to share that we just released
v4.0.0 of FarmBot OS and deployed the last 2 month's worth of web app progress to
my.farmbot.io! Here is an overview of what's new:
Import Plant Coordinates into Move Absolute Commands
Move Absolute commands in the sequence builder can now import coordinates from any Plant in the Farm Designer. This allows you to graphically design your garden layout and then use Sequences to perform operations according to the plant locations. For example: You can make a sequence that moves to a plant location and then waters the plant.
Note that all plants currently have a z-coordinate of 0 so you will most likely need to use the z-offset functionality in combination with the imported plant coordinates. On our roadmap is the ability to define the z-height of your soil plane. Then, all imported plant coordinates will have a default z-coordinate according to the soil height and planting depth.
Find Home in Sequences
As requested, we added a
FIND HOME command to the Sequence Builder. This allows your FarmBot to programatically find the home (minimum) position and set that position as (0, 0, 0) whenever you want. We recommend as a best practice to not only
MOVE ABSOLUTE to (0, 0, 0) at the end of your sequences, but then also
FIND HOME to ensure locational accuracy. You might also want to
FIND HOME at the beginning of tool mounting sequences. You can choose to find home for a single or all three axes.
Send Email Messages
SEND MESSAGE commands can now be configured to send you an email in addition to the status ticker and toast notification options.
The Farm Designer
You can now choose the origin of the Farm Designer map to match up its display with how you have configured your FarmBot. There are four options - one for each corner. In the image below, the bottom left corner is chosen as the origin. Coming soon will be the ability to rotate the map 90 degrees so that all possible configurations are covered.
Spread is the expected maximum size that a plant will grow. It is displayed in the farm designer as a filled-in semi transparent green circle behind each plant icon. It is shown when you click an icon, or shown for all plants when the layer is turned on from the right-side menu. Spread is useful for efficiently using the space in your garden without overcrowding any plants. Spread data will soon come from OpenFarm, though right now we are just using a default value for all crops.
The new FarmBot layer shows the locations of the tool slots as semi transparent gray circles. The name of the tool in that slot is shown upon mouseover. This layer also displays the real-time location of the FarmBot gantry and cross-slide/z-axis as a darker gray bar and circle (shown at the home position (0, 0, 0) in the image below).
Other bug fixes and improvements
- Status ticker times are now displayed correctly
- Dragging and dropping now works at all map zoom levels and scroll locations
- All Arduino Pins are now available for evaluation as the variable in an IF statement
- You can now also choose "is unknown" from the operator dropdown in an IF statement
- Camera widget displays properly when no webcam stream is present
- Crop image aspect ratios are now correct
- New Invert Jog Button Toggles located in the gear menu on the Controls widget allow you to match the jog buttons to your real-life perspective when manually controlling FarmBot. Coming soon: an additional toggle to swap the X and Y jog buttons to cover all possible perspectives.
- To reliably execute Farm Events, your FarmBot needs to know its timezone. We will guess your FarmBot's timezone and set it for you based on your web browser's location, though if you manage your FarmBot remotely (from a different timezone) then you should double check our guesswork by going to the Device page and finding the TIMEZONE dropdown.
- New organization of the device parameters
New Arduino Firmware
We have further improved the rotary encoder support. We recommend these new parameter values for the rotary encoders and motors:
- Max Speed (Steps/s): 400
- Enable Encoders: Yes
- Encoder Scaling: 56
- Max Missed Steps: 5
- Encoder Missed Step Decay: 3
While the encoders are currently best used for stall detection, we are working on the ability to use them for positioning as well. You can try the experimental support for this with the new toggle switches for "Use Encoders for Positioning". Note this will not work reliably above 400 steps/s.
The new firmware also supports software limits (
STOP AT HOME and
STOP AT MAX) that will restrict movements from going beyond the maximum or minimum locations. We recommend enabling these from the Device page of the web app.
AXIS LENGTH values are now automatically set during calibration. You can also manually set the values from the device page, though they will be overwritten with every calibration.
FarmBot OS v4.0.0
The ability to import plant coordinates required a significant refactor to how plant, weed, and tool locations are defined across the entire software stack.
FarmBot OS v4.0.0 is a required upgrade to be able to use the new web app features. In addition to the new importable coordinates functionality, the new OS also includes:
- Better WiFi stability that resolves the :nxdomain issues
- Improvements to rebooting and factory resetting
- The new Arduino firmware
To upgrade to the new OS, simply go to the Device page and press the green
UPDATE button. Note that the download and upgrade might take a while and your FarmBot may reboot a few times.
Addressing Tediousness
We understand that programming your FarmBot to take care of an entire garden is still a tedious process that requires many duplicate sequences and regimens rather than generic reusable ones. For example: each tool requires its own "pickup" sequence. And each plant requires its own "water" sequence or move absolute steps. We have a lot of ideas and features on our roadmap for how to make these things less tedious:
- Move Absolute commands that can inherit coordinates from a parent sequence, regimen, or farm event - Currently you can manually define move absolute coordinates or import them from a tool, plant, etc. In either case, the coordinates are resolved in the sequence step. Inheriting coordinates will allow the coordinates to be resolved in the sequence itself, in a parent regimen, or in a parent farm event. This will allow sequence steps to be more generic, and only become fully defined as part of the entire sequence or when that sequence is scheduled in a farm event or used in a regimen.
- Plant groups - Allows you to define groups of plants. There will also be some auto-generated groups for all-plants, and plants of a certain crop. This allows:
- Looping a sequence over a group of plants or weeds - This will allow you to make one watering sequence, for example, that can be run for all of your plants.
- Applying Regimens to a Plant or Plant Group - Currently you can schedule regimens to run on their own, and they might interact with your plants. However, the grand vision is to be able to apply a regimen to a plant, or group of plants. This will allow you to re-use all the sequences and steps needed to take care of a crop, season after season.
What Else is Next
Our next big pushes include the notes mentioned above, as well as:
- Improving the communication between the Arduino and the Raspberry Pi by implementing a stricter messaging specification. This will help resolve some of the issues we've seen with "combined movements", unexpected e-stop unlocking results, and other anomalies.
- Displaying all Regimen Items in the Farm Events calendar
- Implementing a "Safe State" feature so FarmBot knows what to do (and what not to do) during an E-Stop or when the encoders detect a motor stall.
- Implementing a "Retry Movement" feature so that FarmBot can attempt to move again after a stall. If the max number of retries limit is reached, the device will likely be e-stopped and you will be notified via email. Note that this concept is still in the works and subject to change.
- Deploying alpha weed detection farmware.
- And of course: stability improvements and bug fixes throughout the stack.
We appreciate everyone's support in providing us with software feedback, reporting bugs, and troubleshooting. We also appreciate everyone's patience as we develop these new features. We understand that this release took a while since the last big one, and we're working to speed up the time in between releases so that you can get new features and fixes faster. We look forward to hearing what you think!