n3m0 the autonomous boat

A 3-D printed boat that uses an APM autopilot for autonomous operations. Designed for citizen scientists to make oceanographic measurements.

Similar projects worth following
This robot boat is designed to be 3-D printed in sections. It uses the ardupilot (APM) autopilot system to operate autonomously. It can carry oceanographic sensors such as temperature, salinity, or depth, to contribute to our understanding of the local waterways. Inexpensive to build and fun to run, you should make one!

For the last few years, I have been working with engineering students at Cal Maritime, operating autonomous boats to gather oceanographic data. The most successful boat to date has been Dumbo, a 1 meter long catamaran (built by students) that measures salinity, temperature, and dissolved oxygen in San Francisco bay. Here is a link to a video of Dumbo in action.

I designed n3m0to be a smaller, 3-D printed boat that can carry the same instruments as Dumbo and perform the same mission. The goal is for n3m0 to be easily assembled for students and "citizen scientists" to perform on-the-water measurements. It isn't a speed boat, but should be fast enough to beat the strong currents in the Carquinez Strait, while I hope for an hour or so of run-time (yet to be tested).

The hull shape is based on lines from a PT boat that I found online. I widened the aft sections for more volume and drew it up in Fusion 360.

The hull is printed in sections to fit most 3-D printer volume restrictions. And you can choose cool stripe patterns! Someone please build one with resistor color codes.

N3m0 uses the APM autopilot system and Rover firmware for fully autonomous operations. You can set up waypoints and the boat will go to them and take a measurement. N3m0 currently carries a ESP8266-based payload computer with a water temperature sensor.  The data can be retreived from the boat's web server.

I use Tower on my android phone for the groundstation.

N3m0's mechanical parts are standard model boat fare: steering servo, brushless motor, propeller shaft and prop.

N3m0's payload computer is based on a ESP8266 board and small OLED display.  

This computer listens to the telemetry data from the autopilot and takes measurements at each waypoint in the route.  The data is saved to a file and the payload computer runs a webserver so you can view and save the data.  The webserver can connect to your home wifi or serve as an access point if you are in the field.  The data is stored as a text csv file but you can also get a geojson format file, or an html file with a map display  (sample data).

Current status: N3m0 is working. As of July 2017 the boat has successfully operated autonomously and has gathered data with its temperature sensing payload computer.

Video of first autonomous operations (you can hear the Andropilot groundstation software announce the waypoints):


sample data presentation

HyperText Markup Language (HTML) - 4.48 kB - 07/22/2017 at 00:32


  • 1 × See instructions, step 1 for parts list This section does not allow pictures :(

  • Sacramento River Delta

    Mike Holden10/21/2017 at 19:31 0 comments

    Took n3m0 out to Sherman Island near Rio Vista, CA.

    Seems totally water-tight!

  • Payload computer details

    Mike Holden08/10/2017 at 19:14 0 comments

    I put the current code for the payload computer on github.

    Here's the hookup diagram.  Don't forget the pull up resistor for the temperature sensor!

  • Temperature measurements

    Mike Holden08/09/2017 at 01:50 0 comments

    I did another test run at Heather Farm in Walnut Creek.

    Here's links to the data files the boat made:

    (temp on a map)  (csv file) (geojson format)

    I still would like the boat to automatically upload the data but it's very easy to access right now.

    Things to fix:

    • Leaks!  I think the hull doesn't leak with 2 coats of epoxy, but the hatch seals and the hatch itself are not fully waterproof.  Before I go out into salt water I need more waterproofness.
    • Sometimes when the motor comes on it auto mode the ESC is out of sync.  Since it's a sensorless brushless motor if the motor does not go the right speed it just vibrates.  There are throttle time constants that I will try to adjust.
    • The boat leans a lot when turning, and sometimes catches a rail and goes straight.  Only when going fast, and if the bow is up enough it is fine.  I wonder if a shorter rudder would help or if it's just the v-hull.  Maybe I'll print a shorter rudder.  I can shift the center of gravity by moving components aft too.

  • Test run with temperature sensor!

    Mike Holden07/22/2017 at 00:10 0 comments

    This week the boat went back to the pond and actually made some oceanographic observations (took temperature measurements).

    When the boat reaches a waypoint, the payload computer saves position, time, and temperature.  From the payload computer web server you can download the data.

    I spent quite a lot of time looking into the best way to format the data.  I still would like to be able to automatically upload data to a common location and share it on social media, but for now we just have the local web server on the boat.

    But the interface is pretty good I think.  There is a basic web page that shows the files on the payload computer, and you can download them as a csv file or it will create a html page that uses leafletjs to display the measurements.  A geojson data file is also created for more mapping options.  The web page also lets you enter your wifi credentials, and if no wifi service is found the boat will create an access point and you can connect your phone/laptop/tablet to that.

  • Payload bench testing

    Mike Holden07/01/2017 at 23:28 0 comments

    I want to include a nominal payload in the project so everyone who builds one can do some basic scientific data gathering with n3m0. I decided on just temperature sensing but it would be easy to add more sensors. My hope is that if you bring the boat back to your wifi it will upload data and social media for you...

    I'm using an ESP8266 NodeMCU board as the payload computer, a small OLED display, and a DS18b20 temperature sensor. I hooked the serial port up to the pixhawk autopilot so I can get a data feed.

    I've got the data saving as a csv file in the payload computer, and a basic web server to manage the files and download them.

    I want to also be able to archive the data as a github gist in geojson or leafletjs form, and send a tweet with the link, but am still working towards that. Here is a test generated by hand (screenshot below)

    Here's a picture of the hand-wired board (3d printed enclosure will come eventually!).

    I'll update the description and build instructions once I've tested it on the water.

  • RC control

    Mike Holden06/17/2017 at 19:23 0 comments

    Here's a video of the boat driven in RC mode to show how fast it goes.

  • First autonomous operations

    Mike Holden06/17/2017 at 18:37 0 comments

    Went to Heather Farm park to test the boat. June 15, 2017

    First time with a new motor/esc/shaft coupling: working good!

    Autonomous mode had major oscillations so I tuned the feedback gains using trial-and-error. Reference to gain information.

    • Previous tests had violent yaw oscillations so I started off with STEER2SRV_D = 0 as the boat doesn't seem to need rate feedback in steering. Still slow oscillations but not violent.
    • I reduced STEER2SRV_P with little change, still slow oscillations.
    • I doubled STEER2SRV_TCONST from 0.75 to 1.5 and this made it way worse! I changed it to 0.4 and it worked nicely to go between two waypoints. The link here said increasing it would reduce weaving but my theory is it added more lag for more weaving, so lower was better.

    Here is a video of it going between waypoints. I am using Andropilot for telemetry on the same phone I was filming from, so you can hear the app announcing the waypoints.

View all 7 project logs

  • 1
    Parts List

    I wanted a parts list with pictures, so it's here.

    the 6 hull pieces, 3d printed.get the stl files
    5 top piecesstl files
    inside 3d printed pieces (bulkhead, antenna shelf, autopilot shelf, battery mount)stl files
    Motor.  This one works well.  D2830 1000kV with 3.17 (1/8”) shaftebay17.50
    Prop shaft – motor coupler.  3.17mm to 3.17mm or whatever your parts are.ebay6.50
    Speed Control. Waterproof, brushless ESC, 45Aebay24.00
    Prop shaft & tube 1/8 shaft.  I ended up using K&S tubing for the tube because the dumas one was too short.dumas 26049.00
    Propeller 1/8 inch shaft, 1.75 inch diameter.dumas 30031.40
    Standard servo for steering.   I had a JR DS811 handy but they are out of production.Horizon hobby10.00
    5000 mAh 3 cell lipo battery (11.1V)Tenergy or similar50.00
    Pixhawk PX4 autopilot set. You need: • Pixhawk • Power module • Gps/compass • 915 MHz modems Other stuff is optional.ebay (shop around, there are many suppliers)180.00
    Radio Transmitter and receiver.  Many options but I like my Flysky fs-i6s with fs-IA10B receiver, with tablet holder.80.00
  • 2
    Print the pieces for the hull.

    I used PLA for the first hull, it's plenty strong but I worry when I have to leave it in my car on a hot day.

    I will try ABS or PETG for the next boat. If you try this please let me know how it works.

    Files are in a link off to the left on the main project page.

    • There are 6 hull pieces (one was uploaded twice to try to fix manifold issues). I used 10% infill, do your best with the settings to make the layers stick together very well and be water-tight. The pieces should not need supports if you print them nose-up.
    • There are 5 Hatch pieces. I printed these upside-down. You need support for the overhangs if you do this.
    • There are several interior pieces too:
      • a battery holder (in 2 pieces to print flat easier)
      • a motor mount bulkhead
      • shelves to hold the pixhawk and antennas.
    • There is also the rudder to print, and the rudder arm (print the arm in abs if possible, my PLA version cracked but held up okay after I epoxied it together again, but the ABS version is looking good). The rudder shaft is brass rod, and a short 4-40 screw and nut are needed to finish the rudder arm.
  • 3
    Glue the hull together.

    Glue the hull together. I used 5 minute epoxy. Tape it together as you go. You can stand the stern piece on the transom and glue them in a stack, or you can glue them with the hull upside-down on a flat surface (the hatch lip is a planar surface). Make sure the boat is straight!

    Glue the hatch together too on a flat surface.

    Put the hatch seal on and hatch latches. I've used hooks on the hull and rubber-bands for hatch hold-down but maybe you can come up with a better arrangement?

    Before installing any hardware, put the hatch on the hull, seal the prop/rudder holes with tape or hot glue, and dunk the boat underwater. Fix any leaks now! I had to put a coat of epoxy on the hull to keep water from seeping through the 3-D printed layers, it was slightly porous

    If you mount your antennas like I did, print and glue the antenna covers on the hatch. Otherwise, glue a scrap of plastic over the holes to keep the water out.

View all 11 instructions

Enjoy this project?



Carter wrote 03/22/2021 at 05:49 point

I know this project is probably long retired, but I have a question regarding the prop shaft. What diameter of K&S tubing did you use? Thanks, and great project. 

  Are you sure? yes | no

Nicolas Brown wrote 08/18/2019 at 19:39 point

Hi Mike, the dropbox link to the stl files is not active anymore. Is there anyway you could send me the files?

  Are you sure? yes | no

Michael wrote 08/02/2017 at 02:27 point

Your hull design is a "planing" hull and is meant to lift itself out of the water at high speed. Your boat's speed is much too slow and the inefficiency of the hull design exhibits itself in the huge wake it's creating. A more efficient design would have the bottom of the aft hull at or above the waterline -- like a sailboat.

Google "Carlson Design hulls.exe" for a simple hull design program (Win32). Fun to play with, at any rate.

  Are you sure? yes | no

Mike Holden wrote 08/07/2017 at 19:02 point

I did want a planing hull for this boat.  I've been testing it at slow speeds but hope to run it faster eventually so it can get to (relatively) far away waypoints.  Here's a video of it going faster under manual RC control:

  Are you sure? yes | no

Arya wrote 08/01/2017 at 01:16 point

That's a lovely boat! Looks like a great thing to 3D-print this week =)

  Are you sure? yes | no

Mike Holden wrote 08/07/2017 at 18:59 point

Thanks, let me know how it goes and feel free to ask questions if the instructions are confusing!

  Are you sure? yes | no

Kevin Klemens wrote 06/22/2017 at 01:30 point

Great, got them thanks! I was going to try printing in ABS and do a skid steer configuration with guarded thrusters instead of a rudder, I'll let you know how it turns out.

  Are you sure? yes | no

Kevin Klemens wrote 07/05/2017 at 17:55 point

FYI, I started up a thread on the BlueRobotics forums if you have anything to add.

  Are you sure? yes | no

Kevin Klemens wrote 06/20/2017 at 18:51 point


Awesome project! I'm looking forward to the files so I can print up my own. hulls have always been a problem for USVs, but this looks to be a good size for an ArduPilot based one. I've built two on child-sized kayaks, but those are always a pain to move around and store.

  Are you sure? yes | no

Mike Holden wrote 06/21/2017 at 16:08 point

Thanks!  There's a dropbox link somewhere to the left side with the stl files.  I'll be working on this today, I plan to replace the dropbox link with a github repository soon.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates