Autopilot for Ruddered Kayak

Hi, my first post since joining the forum.

I'm planning to build an autopilot to control the rudder on my kayak.

This is different from most autopilots discussed here which navigate to one or more GPS waypoints. Auto mode will use an electronic compass to maintain a selected heading. In manual mode the system will position the rudder according to input.

I have a lot to learn about Arduino (my only 'programing' experience is in VBA) and a lot of hardware selection to do.

I would appreciate advice anyone can give me based on the info I have provided below.

The hardware I think I will need is: - - A 12v - 5.5v transformer (the power source on the kayak is a 12v battery) - An Arduino - A 3 axis tilt compensated solid state compass with shield - A position interfaced linear actuator (to adjust the rudder angle) - A controller board for actuator if required - A switch to select auto/manual modes - Left & right course select switches each comprising a pedal, reed switch and simple XBee transmitter - An Xbee receiver with shield - An LED display (to display course and compass values)


Okay -

You are using a 12V battery - that supplies DIRECT CURRENT or more commonly DC. A transformer requires ALTERNATING CURRENT or more commonly AC.

The Arduino has, mounted on board, a device, commonly referred to as a 7805 which is a voltage regulator. I takes an input of greater than 7V DC and, by turning some of the supply current to heat, supplies 5V DC to the Arduino board. Whatever device you use to control the rudder would either need to operate on 12V DC or have a regulator in the circuit to supply the voltage required.

An important to piece of information would be how much TORQUE you need to control the rudder. Torque is the amount of force it takes to turn something. That translates into ho big an actuator would be required to move and hold the rudder position.

You could use XBee for the foot controls, but since you still have to run wireds to power the XBee module, why not just run wires from the controls and reduce the amount of power you need to power the 2 XBee units at the pedals and the Arduino? Every piece you add that uses electricity means you either have shorter battery life, or you need a bigger battery.

A very important consideration is making everything water tight. That may be the most important and most difficult part of the project.

Conformal coating with the lead wires attached will probably get you 98% of the way towards waterproofing. I agree with the last poster that use wired comms instead of the XBee, I like XBee's but in any situation where wires are easy I will use wired comms a lot less complexity and headaches.

You probably want to look in PID algorithms for controlling the rudder correction, I doubt you need a full-up Kalman filtering approaching with only one sensor and what I imagine is a pretty flat solution space.

Free advice and overpriced at that,


Sounds like a cool project!

I have a suggested simple addition... Am I correct that it takes more energy when you steer with a rudder than when you steer with the paddles? I was thinking you could add a couple of LEDs to indicate when the rudder is "working" (when it's off-center more than 1/2 degree, or so). That would give you a chance to pull in the correct direction before you fight against the rudder... if that's even an issue.

Or, maybe just 2 or 3 LEDs to indicate if you are on-course, and forget about motorizing the rudder? That would save the weight of the motor and the motor-battery (and simplify the project).

This is different from most autopilots discussed here which navigate to one or more GPS waypoints. Auto mode will use an electronic compass to maintain a selected heading.

I assume you realize that dead reckoning is a poor way to navigate? A fraction of a degree in direction can create a large error at a distance. Wind & currents mean that you are not traveling in the direction in-which you are pointed. And it's an open-loop system without feedback (without self-correction), so errors accumulate.

Hi all, thanks for your suggestions.

Thanks for the correction on transformer vs converter.

The linear actuator will be powered by 12v direct from the battery, via relays that the Arduino will control. I’m struggling with this as most relays I have seen also require a 12v signal voltage, and I’m not sure if an Arduino can provide this …

Very little torque (<1kg) will be required to move and hold the rudder as it will be pivoted above the center of pressure. On kayaks, most of the effort required to turn a rudder comes from the friction of the mechanical cable systems which I won’t have.

I’ll reconsider the XBee, but running cables to the pedal switches will be very difficult, it’s als abut a 3m run from where the Arduino will be and I wonder about voltage drop etc?

Steering with the paddle could be more energy efficient than turning a rudder, but it disrupts paddling rhythm.

The benefit of an autopilot (apart from satisfaction of making it), is that I can just paddle and the kayak will steer itself. I use my kayak for fishing so I spend a lot of time looking at the fishfinder, not the landmark I am heading toward. When I’m trolling on a nice day, I can just zone out and immerse myself in the rhythm of paddling.

Dead reckoning is a crude navigation method, but most marine autopilots are compass based and they work. I tend to head toward a particular landmark. The pedal switches allow me to make course adjustments as I go.

I think I will need some sort of PID. On a kayak it’s quite common to hold the rudder in an off-center position to correct cross track error. You never bother looking where your rudder is set, you simply adjust it till you are heading in the right direction.

I am hoping to apply the same rationale to my autopilot. I won’t need to monitor the position of the rudder, but to simply adjust the rudder proportionate to the deviation from intended course (within limit switches) at a set interval.

Conceptually something like …


adjustment = (course - heading) * (rudder range/360).

For a 60 degree rudder span if I am 90 deg off course then the rudder will move by 15 degrees and after a set interval check again. If the deviation is reduced, it will make a smaller adjustment.

It’s not quite that simple, a deviation can be measured in two directions and I need to ensure I always measure it the shortest way. Still working on the maths of that bit.

I’m hoping to have the LED display alternate between course (C###) and heading (H###).

Waterproofing will be critical - heatshrink and silicon grease go a long way on junctions. Everything will be inside the hull, hanging down off the underside of the deck. Leads will be marine grade and tinned. Pedal switches will be reed switches inside the hull triggered by magnets in the pedals. The electronics etc will be in an IP68 enclosure.

3m should not be a problem for wiring switches - little current so little voltage loss, and you still have to power the romote with XBee which would use more power (and more voltage drop) than just the switches - 2 switches means just 3 wires, power to the XBee would require at least 2, and going with switches and wiring them back would be a lot less complex. either approach would need some sort of water proof connector and the number of wires in the connector would be a small part of the cost. Powering the XBee board with another battery adds complexity, and another battery to maintain. Switches and cabling could be mounted permanent and just connected to the controller when being used.

What you seem to be looking for is a heading hold function on the rudder. You want to travel 238 degrees, wind and current are pushing you slightly off course so you hold a heading of 235 to follow a line to your destination.

Hi Mike,

I am doing the same thing. My wife and I are keen paddlers and would do 10 to 20 miles every weekend. Kayaks (particularly kayaks loaded up with gear) do tend to wander from side to side as you paddle. You can exert significant energy holding them on course using your paddle, or create drag with you rudder. Small, early course corrections are definitely the way to go. Of course the heading will change slightly with every stroke. The key will be to average over a few seconds and gradually bring the kayak back to course. I am approaching the problem a little differently;

When we paddle on the river we tend to follow the same path every time. When we go on longer distances, it is important to use a GPS so you can see your "Crosstrack Error" and not end up paddiling in massive curves. Most hand held GPS units will give you your course to steer back to the "Rhumbline" (the initial straight line between two waypoints). I am also integrating a digital compass. So I will have two modes; 1) Hold Heading, 2) Use GPS.

Rather than a linear actuator, I am using a large servo with bungee cord going to the rudder. This means that I can override the servo by just using my steering pedals normally. My plan is to put the mode and "Heading adjust" buttons on my paddle where I can activate them with my thumbs.

For harwdare I am planning to use some kind of micro, Hand held waterproof GPS with bluetooth comms, a battery with a solar cell to maintain charge, a large servo, a bluetooth rs232 module and teh ocean server compass.

My first task has been to find an efficient GPS parser in C to interpret the GPS stream.

Let me know how you go.


Check out the tinygps library:

Adding GPS sounds like a very cute upgrade. Even better if you are willing to take the trouble to give it your destination waypoint location so that it can take you to the spot, rather than just maintain approximately the direction you gave it.

I assume that the kayak will tend to yaw quite a bit while paddling and you are only looking to control the average course over tens of seconds. In that case you should be able to get away with a very low power actuator geared down to produce the required torque, since it should only need to move slowly.

Wouldn't GPS be necessary if you want to autopilot to a given location, since holding magnetic course wouldn't help correct for cross currents moving the kayak laterally from the original destination point?

I had a look at the tiny gps library. Thank’s for that, but not comprehensive enough and I think I’ll need more buffering.

You shouldn’t actually “need” GPS as you should always be able to see your destination unless you like paddling over the horizon. When we are paddling in the river, we stay pretty close to shore to keep out of the current. Therefore you are making regular course corrections. With the gps, we can put in lots of waypoints and have the autopilot steer for us.

Hi AusDroid,

I'm now looking at integrating GPS also. I just bought a GPS-Fishfinder for the kayak which has NMEA output, so it makes sense to use this rather than a buy an electronic compass.

NMEA includes autopilot (GPAPx) sentences that allow a GPS to steer a vessel towards a waypoint using the autopilot. I'm currently researching these NMEA sentences. However, what I have read so far suggests that I should be able to use the arduino to simply take navigation instructions from the GPS and relay them to the steering. This would make the autopilot system a lot simpler.

my two cents on the rudder,

i have made a large kayak sized rc boat with a trolling motor, i think i should have used a linear actuator, but i went with a large rc servo, There is a biggun from hitec with titanium gears, i cant remember the name now, but if you could hook a linkage to the rudder then it is easy to control with pwm,

So…at this stage I have used a large servo for the rudder. I am connecting this to the rudder with Bungie cord as I have found that it puts less load on the servo and averages out the higher frequency feedback. I have an “Ocean Server” compass and am using a hand held Garmin GPS.

I am using the $GPRMB NMEA sentance from the GPS as the input to the system. This is how it all works (or will hopefully).

  1. You use your GPS to create the waypoints or routes. This can be done on the GPS or in a variety of software that then downloads the points and routes to the GPS.

  2. The GPS then calculates the bearing to the next waypoint and outputs the data via $GPRMB

  3. The micro then compares the desired course with the actual course and calculates the rudder correction.

At this stage, I have everything connected and will attach some photos in the next few days.

My biggest problem is comming up with a good algorithm to calculate the error. The problem I have is that if desired course is say 10 deg and the actual course is 5 deg, then that is a 5 deg error… But if the desired course is 5 deg and the actual course is 355 deg, that is a bigger error (5 - 355 = -350). I know there will be a simple fix, but I haven’t had time to think.


Negative. A course correction from 355-5 is only 10 degrees. There is no negative. There is 0-359 degrees. 0 == 360.

yeah…think about it.

You are generating an error for the P in a PID controller.

Direction, + / - is arbitrary. Generally, error is target - Actual. Soo…

Assume Target course is 15 deg, if actual is 10 deg, error is 10 - 5 = 5. Rudder is moved right to steer canoe right (clockwise)

If target is 15 and actual is 20, error is 15 - 20 = -5 (negative) , Rudder is moved in opposite direction (left) to steer canoe left (counter clockwise).

Assume target is 10 and actual is 355, error = 10 - 355 = -345 (which is correct) steer canoe through 345 degrees counter clockwise back to 10 degrees. However, we would want to steer clockwise 15 degrees instead.

in this case, we would say…if (error < -180) then error = error + 360. I would guess that if (error > 180) then error = error -360, but I haven’t had a chance to get my head around it.

Understand now?


Did you get this going? How did it work out?

I'm about to attempt a similar project, not for a kayak but a small rowing skiff. Like you I don't want a gps based system as I have been a commercial fisherman for many years and adjusting for set and drift when using an autopilot was just part of my daily navigation routine. And yes, the direction the boat is pointing isn't necessarily the way you're going most of the time.

My main question is that wouldn't you need a rudder angle sensor so the system knows how far to adjust the rudder? Or is that controlled using the servo system?

I only came across this because of @dogboy2516's post.

I had a 10m sailing boat with an autopilot which worked very well. When I was motoring I hardly ever did manual steering. I suspect that was the experience with your fishing boat as well.

Now I have a narrowboat on the English canals and I can't imagine that it would be possible to make an autopilot that would be useful - they just couldn't deal with the need to maintain a course +/- 1 metre or better or deal with the sharp twists and turns in narrow canals and rivers. Another problem is that in some circumstances you can't correct an error as you might wish - for example if the stern is too close to the bank (a common problem) and the boat simply has no room to steer away from the bank.

The kayak / rowing skiff presents an interesting variant because, being smaller, they have more room for error in a given watercourse. On the other hand they have very little "inertia" (word used loosely) so they can change direction by 30degrees or more in a few seconds. And the problem is that you don't actually want to correct right back to the "proper" course (because that just wastes time); the correction you actually want is to aim for your destination from your new position - unless the error as left you with an obstacle between you and your destination (which no autopilot will understand).

In short, I would be very surprised if the earlier projects were successful - but it would be interesting to hear from the authors.


Dear All,

In 2015, April, I started my Autopilot project, based on Arduino.

The goal is:

Make a track in Google Earth with several points (way-points), convert that track to my GPS and navigate under that line showed by GPS without manual intervention in my boat powered by a manual outboard motor.

The project is in a very well advanced stage.

Unfortunately, this summer was very windy and had not chance to make enough tests on lake.

To operate the rudder, I also use a linear actuator managed by a relay panel connected to an Arduino UNO with my algorithm. Off course I also use an electronic compass.

Please feel free to contact me for exchange ideas.

If you want to see my project evolution, please search rabadakpilot on YouTube.

Happy New Year 2016 with new projects.

I have a basic question. I am new to servos and linear actuators. But, I am wondering if a servo (say for controlling a rudder) needs constant adjustments to maintain the rudder position (I.E. will it slip the current position without power applied)? It looks like a linear actuator would maintain the position without applying power. However, that means with a linear actuator you would not be able to have manual control (you would be fighting the actuator to no avail.) Is this correct assumptions?