Currently designing an autonomous submersible for a university engineering project. Was considering using the Ardupilot Mega with a magnetometer and gps installed for navigation via dead reckoning with intermittent surfacing for position checks using the gps. Has this autopilot system ever been used in an underwater vehicle? Are there any possible reasons why this system wouldn't be suitable? The control systems will be set up in a similar manner to a manned submarine, with foreplanes for depth control and a crossplane for pitch and roll, but these should be somewhat analogous to the control surfaces of a UAV. It will also need to control the main ballast tank.
As no-one has responded I shall.
APM has never been used in an underwater vehicle although it has been used on water very successfully (see Harald Molle's epic blog of his adventures). The limitation is on guidance as the APM is inherently GPS based but I'm sure some dead reckoning will help out that (although I'm unsure how you will measure speed). As for control surfaces I'd assume the standard code would be pretty good although your PID values will have to be changed. As for ballast I would even know where to start but you have 4 spare PWM channels to deal with that so you should be ok.
I'm using low-frequency RC to control the sub for now before I get the autonomous systems working.
I am hoping to control the ballast tank over RC too. Basically I'm having a relay circuit for the tank empty/fill function that will require just a single square-wave pulse to activate both ways.
How would I go about assigning one of the RC receiver channels going into the APM to a simple two-position switch on the transmitter? Then all that would be required is a single pulse from the associated servo output on APM.
As long as the two way switch is a transmitted channel and not a selector for dual rate or something you should be able to just plug it in to a channel on the APM board.
As for outputing the square wave the PWM channels on the rear may not prove to be adequate so you may wish to use a spare digital pin to produce exactly the right output. You could have a simple boolean toggle to activiate the signal.
I've had a thought about navigation too. The HIL setup stuff may have something of use for dead reckoning and IMU based navigation.
Today I learned the difference between an IMU, an AHRS, and an INS.
The OpenPilot project project seems promising. http://wiki.openpilot.org/display/Doc/OpenPilot+INS
Personally, I think that the ArduIMU + compass is accurate enough to get the job done. Use of a differential pressure sensor in the nose can infer forward velocity, and a second pressure sensor can be used to read depth.
Thinking about the problem, I'm wondering if the refresh rate on the GPS can be slowed to a crawl with more IMU samples in between. If you were to set your destination at the surface while you had GPS, and then locked in your attitude, you may be able to get to your destination before the GPS refreshes and then surface for a saw tooth profile.
To start from scratch, http://diydrones.ning.com/forum/topics/how-to-extract-angular
Still trying to understand the difference between a Kalman filter and a DCM
Euler angles have gimbal lock but for a submersible that doesn't seem to be a huge problem. ArduIMU can be configured to ouput data in several formats. "output.ide"
The whole project seems pretty doable if you lower your accuracy standards far enough. If you plan on operating in shallow water a Doppler Velocity Logger is a popular way to go. Laser scanners are popular, but I don't know if the Kinect laser is close enough to visible light to cut through water very well.
Hello Gerry, good to hear there are other people attemping something similar with Ardupilot! Though I myself am using the ardupilot mega setup and imu shield. I am currently in the process of figuring out how everything works in the code, as well as getting my hardware sorted. Unfortunately, the current priority is designing components and systems so they can be manufactured or purchased (2m-long steel hull, crossplane servo linkages, ballast etc), then once all that is sorted I can get to coding.
I will keep researching this though, and keep you updated if I make any breakthroughs. I'll look more into the HIL setup and see if there's anything useful.
Is this project for the Robosub or SAUC-E competitions?
UAVs and AUVs seem to be very similar for sure.
I'm beginning to look to surface vehicles as a transitional development platform between bench testing and completely submerged operation. The hydrodynamics are different, including behavior in pitch & roll, but overall it seems like a close enough substitute to model the more basic challenges at significantly less hassle.
One of the distinctions between AUVs and UAVs that has come to my attention is the difference in encountered G-Forces. The accelerometer selected would ideally have it's sensitivity range matched to the peak forces expected in the application. For AUVs, this may be much less than a typical UAV mission.
I don't know what your specific mission requirements are but accurately tracking distance traveled for purposes of dead reckoning seems to be a huge challenge in the Robosub competition at least. Alternatives to DVLs don't look promising. Double integration of acceleration seems to be acceptable for some applications although I've heard the error accumulates rapidly as drift.
Optical Flow seems like a promising alternative, if only under very narrow circumstances, but water clarity and bottom composition would play factors in that approach.
I hope to have some progress to share eventually myself, although right now I'm bogged down in problems of a more mechanical nature.
The AUV designed in our lab is not for the competition that requires accurate tracking. Our goal is to design an AUV that has the ability working in the shallow water environments (wave effect should not be ingored) and finish the task by itself (such as surveying ,supervising ect.).
Of course, no matter where the AUV is used , the accurate the better. So I am looking for a good navigation method that fit for the 9dof IMU (three axis gero, acc and magnetometer). There is no GPS signal in the underwater environment, so I plan to use the three axis acc to detect and compenate the pitch and roll error, and three axis magnetometer to detect and compenate the yaw error, just as William and Paul do in http://code.google.com/p/gentlenav/downloads/detail?name=DCMDraft2....= .
However, due to the above paper uses the GPS signal to detect and compenate the yaw angle, and has little statement on how to use the magnetometer to detect and compenate the yaw angle, I must do this work myself. If you have any knowledge about this, could you give me some sugestion or informaton?
By the way, if the vehicle sails both under and above the water surface, the six dof motion model could be quite different due to the difference between hydrodynamic forces and aerodynamic forces. Double intergation of the accelermeter might yields good results in short time, however, for a long time navigation task, another complementary position signal might be needed to revise the positon error, just as the function of depth sensor.