There is nothing — absolutely nothing — half so much worth doing as simply messing about in boats. Simply messing… about in boats — or with boats. In or out of ’em, it doesn’t matter. - Ratty, Wind in the Willows
I have taken this to heart for my Google Summer of Code (GSoC) 2019 project and will be carrying on developing rover sailboat support. The above YouTube vid is the culmination of the work I did last year, a autonomous mission of a mile completely under wind power. This year I will be adding several new features to the Rover Sailboat code.
-
Add support for commercial wind speed and direction sensors. This will support off the shelf sensors that are both more rugged and accurate than the currently supported ‘quick and dirty’ sensors implemented last year.
-
Motor sailing. The existing code has been developed with fully sail powered vehicles in mind. Giving the code knowledge that is has a motor and the ability to decide when to use it will allow better control, and give the ability for a boat to complete a mission or get back to base when the wind drops. This will also give the option to add a small ‘booster’ sail to existing power boats allowing more efficient operation.
-
Improve handling of failed tacks, currently the code can get stuck and confused if it fails to tack due to too much wind or too little. I will improve the way this is handled.
-
Support for wing sails with ‘elevator’ controls. These offer a wide range of benefits over soft sails. The best example of this is the sail drone (Not running ArduRover… yet)
-
Sea state classification, this will be a benefit to all boats, the code will calculate the wave height and frequency and try to estimate the speed of the tide/current. This will be reported to the operator. We could also set a fail-safe, or trigger different behavior based on the conditions.
-
Add functionality to lean, store and use a boat speed polar. This will allow sailboats to navigate from A to B in the quickest way in a range of conditions. Speed polars are commonly used in yacht racing, basically they a record of how fast the sailboat can travel in any direction for a range of wind speeds.This page gives some more info on what they are and how they are used. Sailboats are the most complex case, a example for a plane would be finding the airspeed that gives best endurance or range. The airspeed for best range will vary with wind speed and direction, just as a sailboats polar diagram does.
-
Tracking wind shifts and probabilistic decision making, again veering off into very sailboat focused stuff here. Given some information about the how the wind has changed in the past we can predict what it is likely to do in the future. If we can successfully do this then we can get from A to B faster.
-
Mapping functionality for sailboats (and more). This would allow a polygon to be defined, just like a fence, this area would then be mapped. The code will optimize the path to map the area in the minimum time. This will greatly reduce the complexity of planning mapping missions. The missions should be performed no slower than existing methods, for those vehicles that are more constrained by maneuverability and the directions they can travel (planes and sailboats) this should, I hope, provide a significant speed up in mission time.
Hopefully with these changes ArduRover sailboats will become the go-to tool for mapping large areas of water, and there may also be some benefit for other vehicles too. If you interested in the how and why of each task you can read my full proposal. I will be doing a few blog posts documenting my progress over the summer. The place to follow the ‘blow by blow’ developments is over on the sailboat thread. If you interested in GSoC you can check out the Ardupilot page, there are five students this year. Hopefully we will be bringing lots of exiting developments to ArduPilot between us. As ever I am always after more sailboat users (and code testers), join us in the slow paced, quite and relaxing world of sailboats.