Go Down

Topic: ArduSailor autonomous sailboat (Read 5091 times) previous topic - next topic

kolosy

May 21, 2014, 05:03 am Last Edit: May 21, 2014, 03:13 pm by kolosy Reason: 1
So I've spent a bit of time over the past few months trying to rig up an arduino to a cheap RC sail boat. A major reason I've gone after a sailboat over other drones is that its power consumption isn't proportional to the distance travelled, meaning that eventually, I could strap a solar panel to it, and have it go for a substantial period of time.
So - this is take one.

I'm using a $100 RC sailboat ("shunbo monsoon"). It came with a steering servo and a winch servo, and that's about it. I've hooked it up to a custom board that splices together a Sparkfun Arduino ProMini, an Invensense mpu9150 for the ahrs part, a Venus 638 gps chip and a simple MOSFET control circuit to only power the servos when they are in use. All of this is running off a 3-cell 11.1V 1500mAh LiPo battery.

The code and schematics are here:
https://github.com/kolosy/ArduSailor

Sunday was the first day out, and of course it was quite a disaster. A crappy hatch meant that when the boat heeled hard, it would take on water, which eventually sunk it. Luckily we had a fishing line tied to the backstay, so we rescued it. The brains were in an Otterbox dry box so they were fine, and surprisingly, the servos survived fine too (that said, i've bought waterproof replacements already)

When I got home, I realized that the axes of my compass were rotated by 90*, which explained why the boat kept wanting to go into the channel bank!

Anyway, wanted to get this out here, to share and get any feedback you guys may have. I expect to keep updating this as the project progresses. Here's a quick video of it in action:
https://www.youtube.com/watch?v=OtQgwmWxg0s

Northof49

That's a cool project.  I hope you can get it working really well.

zoomkat

Quote
and a simple MOSFET control circuit to only power the servos when they are in use.


Depending how you made your circuit, that may result in servo issues.
Google forum search: Use Google Search box in upper right side of this page.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

kolosy

How so? The servos work off a separate 6v rail, and system voltage is 3.3. The mosfets are n channels on the ground leg of the servos.

zoomkat

Quote
The mosfets are n channels on the ground leg of the servos.


Blocking the current flow path on the ground lead may force voltage/current to flow back thru the servo control wire back thru the arduino to the common ground between the arduino and servo power supply. If the servo starts to heat up or behave erratically, this might be the reason. I haven't tried it, but a p-MOSFET on the servo power supply might be another choice.
Google forum search: Use Google Search box in upper right side of this page.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

kolosy

Hm. Well - I have Schottky diodes in place to prevent that, so it should be ok?

kolosy

Update:
I've continued working on this over the past year and a half, and have made some solid progress.

Hardware:
The original version posted here used an arduino micro soldered onto a daughter board that had the sensors + servo board. That didn't last long, as I ran out of code space, and inputs. I've moved to a fully-custom board by taking the Arduino Mega reference design, and adding my sensors and servos to it. I also stripped out the power management it had and replaced it with my own. It now has two SMPSs to provide a +6V rail for the servos and a +3.3V rail for everything else. It also gave me access to dedicated hardware serial ports for comms and GPS

Software:
A lot of tuning happened here. It still has a ways to go:



It can finally make it down a multi-waypoint track, but as you can see, it does get lost quite a bit. The main remaining issue is crossing the wind (tacking, or staying out of irons to use sailing terms). The wind was blowing from the west this day, and you can see long stalls any time the boat got close to pointing that way.

Debugging is difficult because the boat does need to be in water, and outdoors (because of the GPS), which becomes very weather dependent. I also don't typically bring programming equipment out because I don't want to open the waterproof electronics case while near water. That's probably the single biggest reason it's taken this long to make serious progress.

That said - it's still alive!

I'm keeping everything on Github, so feel free to look / use:
https://github.com/kolosy/ArduSailor

goodinventor

Nice work. I see you have put much effort and dedication into it. Keep up the good work!

zoomkat

#8
Jan 05, 2016, 06:02 am Last Edit: Jan 05, 2016, 06:04 am by zoomkat
You might look at the ardupilot projects as they have navigation setups.

http://rover.ardupilot.com/

http://ardupilot.com/
Google forum search: Use Google Search box in upper right side of this page.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

kolosy

yeah, i've seen those. i'll definitely have a look, but my issue right now isn't navigation directly, it's a form of obstacle avoidance.

florian_markert

aren't standart servos 5V? if you are using 5V ones with 6v you should intigrate a 5V regulator (which is also in every arduino) ,otherwise it will might shorten the servo livetime

DuaneDegn

aren't standart servos 5V? if you are using 5V ones with 6v you should intigrate a 5V regulator (which is also in every arduino) ,otherwise it will might shorten the servo livetime
The "normal" servo voltage range is 4.8V to 6V. It should be fine to run most servos with a 6V supply.

kolosy

#12
Apr 05, 2017, 06:24 am Last Edit: Apr 05, 2017, 06:29 am by kolosy
Another update - I'm still doing this!

I had spent the summer tweaking the boat and the algorithms, until I was sure I was close to something better in August. Then, as I was making sure everything was working correctly, I turned the board on moments before taking the boat out to watch the circuit catch fire and release the magic blue smoke (see attachment). The post mortem showed that a stalled winch servo overloaded the 6V buck regulator and blew it up. So much for the rest of 2016.

I spent the remainder of the winter building a new circuit, a new boat (I had entombed the internals of the previous in polyurethane foam) and a new algorithm. The new circuit added the new InvenSense MPU 9250, an MPPT solar charger for the LiPo and some general cleanup (including a fuse on the 6V reg).

On the algo side, I ripped out the nonsense that was in there, and dropped in the lovely Arduino PID library for steering control. Maiden voyage this weekend went poorly I thought at first (the boat was zigzagging all over the place), until I realized that I was tuning P and I, but not D (don't ask). Unfortunately I realized that after I left the lake, so I'm hoping that next weekend will be the day it all *just works*!

We'll see how it goes.

jremington

Keep at it! I'm working on a similar project, using the Megatech Nirvana II as the basic platform.

So far, I've got the BNO055 IMU steering and GPS waypoint navigation working perfectly on a simple twin screw electrically powered model, and can set any powered course I like.

Next step is to come up with wind speed and direction indicators, so I've downloaded your Github material and will take a look at what you did. 

Thanks for posting!

kolosy

Thanks! I've thought about wind speed, and really, I don't think it's necessary. On a real sail boat, your response to variable wind would be the tension on the backstay, the amount of sail area (through reefing) and potentially the jib sheet car positioning. None of those are available on an RC sailboat. Your only other option is to spill air from your sail by overtrimming, which you could do in response to just the heeling (roll angle) of the boat.

Go Up