Introducing Pilothouse - A Robotic Sailboat02 Jul 2015
Over the past 6 months I've been working on developing an open source robotic sailboat called Pilothouse.
The goal of Pilothouse is to make an open source robotic sailboat that can autonomously navigate and sail itself long distances, and to prove that this can be done using the latest web technology: Node.js.
Pilothouse has a number of awesome features, including:
- Robotic sailing, with 100% all natural renewable energy.
- WiFi based monitoring with remote GUI.
- Full Ubuntu Linux environment onboard.
- Advanced sensors, including the latest GPS and MEMS.
- Potential for expansion into a fully autonomous ocean going science vessel.
- Open source software (GitHub).
At this time, this project is just starting to get into autonomous control. Here's the first sail, with autonomous sail control and manual RC rudder.
As part of the Pilothouse project the base station displays all relevant boat state information, sent over WiFi.
This project was inspired by my volunteer work with Diane at RoboSail, an awesome project to teach kids programming through robotic sailboats.
The boat is a Ragazza sailboat from Pro Boat Models. This is a very nicely designed and built boat with a fiberglass hull, clean rigging, and lots of room inside.
I've modified the inside of the boat a bit for three new features: an improved sheeting system, a water tight hatch, and an internally mounted Pelican case.
Before any of the other modifications, I hacked at the center console to make it shorter. This provided enough room to slip the Pelican case for the electronics into the stern.
The sheeting system on the stock boat uses a witch that collects the jib sheet on the top spool, and the main sheet on the bottom spool. While this works ok, it's prone to problems with slack. Based on the options presented by the AMYA, I've implemented a continuous loop sheeting system:
Image courtesy of Hitec RCD
My implementation essentially follows. Instead of pulleys, which are difficult to find at this small scale, I used steel rings.
The two sheets require approximately 18in of travel from full in to full out. To get that kind of distance I mounted the rings an aluminum U channel, and mounted it so that it passes through the center bulkhead and into the bow of the ship.
The sheeting system is visible at the top of the image (lines are green), with the return line going from the O-ring on the left, through a tensioner O ring and to the winch. The tensioner is a piece of elastic, doubled back on itself to get the required length.
For all lines I've used 65lb test Spectra fishing line. It's strong and doesn't have any stretch.
One return pulley (ring) is visible on the left. To tighten the sheets the winch pulls the loop clockwise. The sheets are attached to the knot in the middle of this view, and run to the ring on the left and then out the the respective sail.
The stock hatch on the Regazza is just held on with magnets, and is not at all water tight. With all of the very expensive electronics inside I wanted to make sure that as little water got in as possible.
The hatch is a piece of Lexan held to the deck with four stainless steel screws. A tight seal is achieved with two layers of epom rubber weatherseal. One layer is around the hatch opening, and the other is on the Lexan. When the thumbnuts are tightened down the seals squish together nicely.
Sparkfun has come up with a really cool "block" system for the Edison. They've designed a number of common periperal blocks that can be stacked much like Arduino shields. For Pilothouse, I've used the following stack:
- Base Block
- SD card block
- I2C block
- GPIO block
- PWM block
- 9DOF block
There are two servos on the boat: a multi-turn winch servo to control sail angle and a rudder servo.
Pilothouse uses a standard LSM9DS0 from ST, mounted on a Sparkfun block. The LSM9DS0 offers a 3 axis accelerometer, a 3 axis gyroscope, and a 3 axis magnetometer all in a single package.
The wind sensor uses the MA3 absolute rotary encoder from US Digital. This sensor outputs a PWM pulse whose width is proportional to the position of the encoder shaft. The main advantage of this sensor over a potentiometer is the ball bearings, with allow for sensing even the lightest of winds.
The only problem is that the Intel Edison doesn't have a PWM input, and there doesn't seem to be any I2C PWM input chips available. To overcome this I'm using a Pro Micro Adruino to read the PWM and hang off the I2C bus.
For the wind vane itself I'm using a product from the Western Reserve Model Yacht Club (link) with the addition of a bit more surface area.
The GPS is a U-Blox M8 series GPS with a large patch antenna from CSG Shop. I've been very pleased with the performance of this unit, even in difficult conditions like Boston.
The base station is really any WiFi enabled device that has enough range to connect to the boat. Pilothouse sets up a simple web server to provide a GUI to any WiFi client so all that clients have to do is go to the specified URL and they will be provide with the app:
All data is streamed live over WiFi via web sockets. This enables a "fly by wire" control.
Pilothouse is an ongoing project, and this is just the start. I'll be adding a better GUI with a map and graphs, long term data storage, environmental sensing, and fully autonmous sailing. All code can be found in the GitHub repository.