VisualSail - Now Free & Open Source

As I mentioned in an earlier post, Mr. Gibbs isn't my first sailing related pet project. My first was a desktop application which recreated 3d replays of sailboat races based on GPS data. It was called VisualSail. I sold it commercially for a few years and then eventually it was making less money than the hosting/dns/adwords etc cost and I shut it down. You can download it here. You will also need to install xna 3.0 for it to work.

It has languished since then (2005-06ish), but last season it found new life (for me, at least) by replaying the data from Mr. Gibbs. It hasn't aged well in terms of technology, XNA is no more, winforms is ancient history, and various other libraries it used have gone by the wayside. The code is pretty crusty, looking at it now It's hard to imagine I was ever that bad. At the same time, I know that if I didn't have that reaction it would mean I hadn't learned anything new in the last 10+ yaers. With all that being said, it still serves its original purpose of allowing you to analyze your race.

I hope in the coming months to make some minor updates to it including:

  • Moving it from XNA to MonoGame. This will remove a cumbersome dependency, as well as allow it to run on OSX or Linux in addition to windows. Ideally I would like it to run on the raspberry pi so replays could be played directly on Mr. Gibbs.
  • Find a new source of Satellite imagery (the NASA service it used to use is long gone)
  • Clean up dependencies to use nuget.
  • Some general cruft cleanup. I probably won't do much in the way of refactoring & cleaning up classes etc simply because I would rather spend the time writing new functionality on Mr.Gibbs. I'm hoping to be minimally invasive on VisualSail and just keep it limping along.

I have grand visions of a new version I would like to implement, but that is probably lower priority than Mr. Gibbs so it will likely be a while.

If you're looking for off-the-shelf hardware to use with VisualSail, I used to use units like this: Canmore GT-730FL-S USB GPS Tracker. My preferred units actually used AAAs rather than builtin rechargeables because they were easy to charge up a "fleet" of chargers rather than to plug each one in, but I don't see any units like that for a good price right now. The gps chips themselves have gotten better, and the price dropped, but it doesn't seem as though the price of these logging units has dropped at all, I believe I was paying $40-60 per unit even in 2005.

Below are some excerpts from the original website that detail how to get started using the application. I hope someone finds it useful.

What you need

  • Windows PC
  • visualSail
  • 1 Gps logger per boat

Getting ready to race

Before you start the race, there are a few things you need to do.

  • Prepare your Gps Hardware
    • Label each Gps so you can tell them apart (Sail Number works well)
    • Charge Batteries
    • Turn On, and enable logging
    • Waterproof if necassary (ziplock bag, otterbox etc)
    • Distribute to each boat
  • Tell your race comittee to record the time of each race start.(optional, but will make things easier later)


During the race, try to place the gps on your boat where it will not move. For accuracy sake, it is best if all the boats place the gps in a similiar location

Post Race - Using visualSail

Collecting Gps Data

Before compiling your race in visualSail, create one or more files with Gps data for each boat. For many types of Gps units, such as the iBlue 747, Velocitek, RockBox, and Nauteek, this will require connecting the unit to the PC, and then running the software provided by the manufacturer, and saving the data to a file. For some Gps units, such as the Amod AGL3080, once you connect the Gps, you will simply copy the file off the Gps unit to your hard drive

Create a new visualSail Series

  • Start visual Sail
  • Click "New Series", select a file name and location and click "Save"

  • Click "New Boat" to add your first boat to the race.

  • Enter the name, number, select a color for the boat, and click Ok.

  • Click "Import File" to import your Gps Data

  • Repeat the process of adding boats and importing Gps files for each boat.

  • Click the "Race" tab, enter a name for the race and set the start and end times for the race
    (if you know them, if not, you can come back later and enter them)

  • Click the "Lake" tab. Enter the name of the lake and the timezone. You can now resize the racing area so
    that it includes desired landmarks. The red box indicates the boundaries of your Gps paths, so you
    cannot size the area smaller than the red box.

  • Click "Edit Course"

  • Click "New Mark", then enter a name for the first mark. Click and drag the mark on the map
    to the right to put it into position. If you need to zoom the area in or out, click the
    magifying glass, then click and drag the area you want to zoom in on. Clicking "Show Boats"
    will show the paths of the boats to aid mark positioning.

  • After positioning all of your marks, click the "Route" tab.
    Using the arrows, move the marks onto the route in the correct order.

  • Click the "Wind" tab. Select either constant wind direction or course wind direction and
    set the wind for the race.

  • Click Ok to finish the course, then Click Ok to start the race replay.

Watch your visualSail replay

  • To speed up, slow down and pause time, use the time control window.

  • Controlling the "View" Window

    • To Zoom in and out in the view window, right click, and move the mouse up and down

    • To look around from different angles, left click, and move the mouse

    • To Focus on a different boat, double click on the desired boat

    • To add and remove various indicators use the "view" menu

    • To Open additional "View" windows, click Window=>View

  • Controlling the "Statistics" Window

    • Add and remove statistics to the grid by checking/unchecking them in the Statistics Menu

    • Drill into a boat for statistics by course leg by clicking the "+"

    • Drill into a course leg for statistics by tack by clicking the "+" next to the leg