I've been looking around, and I've seen some awesome looking GPS modules for Arduino. This is an abstract project idea, and I just need to know if it's possible before I go further. I should mention, that I'm not actually the person who came up with this idea, the credit for that would go to my friend, who is really the driving force behind the project. He knows much more about GPS and DGPS than I do, but I'll try to explain the basic concept as I happen to understand it. What he wants to do is set up two identical GPS receivers on a ship, set apart from each other at some distance. The two GPS units would basically help to triangulate the position of the ship. From what I understand, they would send a known wavelength back and forth to each other, so that they could determine their positions relative to one another, and this would form the "base of the triangle." They would also be connected to the same satellite, and the distance between each GPS and the satellite would form the "sides of the triangle." By taking a tone of measurements using multiple satellites we (apparently) could somehow figure out the direction the ship is pointing in. That's the lofty goal. I'm wondering if this is possible with ANY of the GPS modules available for Arduino would be capable of doing this. My friend has tried it before using two LS2003 GPS units, but he said it didn't work because "the GPS unit would not provide me with raw data." When I inquired as to what he meant, he said "It does extra processing, and spits out lat and long. I need satellite information, and timing information [which I can use for telemetry]"
I'm just wondering if this is possible. If not, no big deal. If you have any questions, I'll pass them onto Jamie, he knows much more about this than I do, both from a technical, and a physical/mathematical perspective. If you've done this before, or something similar, and could provide me with the model of GPS which might work best for this sort of application, I'd appreciate it. Thanks.
I just built a GPS based on a Ublox 6M receiver. One of the functions that I used provides vehicle heading and speed just by calling a TinyGPS function. Does not require multiple GPS units. It does not tell which way the vehicle is pointing, just the heading which one could assume is the way the vehicle is pointing.
Sorry. I'll post here again tomorrow after speaking to him.
Forgetting the explanation all together, is there any way to get heading from two GPS units using Arduino? At all? I mean, is it even possible?
I just built a GPS based on a Ublox 6M receiver. One of the functions that I used provides vehicle heading and speed just by calling a TinyGPS function. Does not require multiple GPS units. It does not tell which way the vehicle is pointing, just the heading which one could assume is the way the vehicle is pointing.
Unfortunately he needs heading. Course over ground (which I believe is what you're talking about) isn't always the same as heading, and it's important to distinguish the two when working with ships, because they tend to drift in directions they aren't actually facing.
Actually, Piksi IS cheap. Incredibly cheap. He's considering using the system I'm trying to describe as an alternative to buying $15000 RTK units. Nine hundred dollars is nothing in this context. The problem is that Piksi isn't out yet, and he's uncertain as to when or if they ever will come out. Personally, I thought their kickstarter campaign was incredibly successful, and I totally believe that they'll successfully launch in February. He's got a kit pre-ordered, but he doesn't hold out much hope. The other problem is that "Piksi is using X-bee, and [he'd] rather be able to use the existing Trimble infrastructure." That said, he did pre-order a kit, and when it gets here, we will try it, and I expect it to work. I was just wondering if there was anything currently existing that could accomplish the same thing.
I was just wondering if there was anything currently existing that could accomplish the same thing.
A very large number of us have been wondering the same thing, for quite a while, and the answer is no. That is the reason that the Piksi project has been able to raise the funding.
Used on a ship/vehicle in motion you can do with ONE inexensive GPS.
Most of them spits out NMEA info every second (often default at 9600 baud) e.g. like this:
its easy to select the info you need from this GPS output. Like exact time, position, speed,
With TWO of theese, of course, it easy to calculate their relative position based on info from both.
Drawback is that theese inexp. units cannot do better than within aprox. 3m. You need additional info from a fixed ground reference station to do differential. And even a GPS listening at BOTH frequencies to get better accuracy (centimeters)
If I wanted to find the direction my vessel was pointed, I'd probably use a single GPS receiver and an AHRS (3-axis accelerometer and 3-axis magnetometer). The GPS would do nothing more than compensate for magnetic declination (and report sideways drift), and the accelerometer would do nothing more than tilt-compensate the magnetometers. Basically, a compass for the digital age. Absent a large magnetic field that would confuse the magnetometers, I'm not sure why GPS is even being considered for this.
tylernt:
If I wanted to find the direction my vessel was pointed, I'd probably use a single GPS receiver and an AHRS (3-axis accelerometer and 3-axis magnetometer). The GPS would do nothing more than compensate for magnetic declination (and report sideways drift), and the accelerometer would do nothing more than tilt-compensate the magnetometers. Basically, a compass for the digital age. Absent a large magnetic field that would confuse the magnetometers, I'm not sure why GPS is even being considered for this.
A magnetometer is non-viable on a ship from what I've been told, just so we're clear.
tylernt:
If I wanted to find the direction my vessel was pointed, I'd probably use a single GPS receiver and an AHRS (3-axis accelerometer and 3-axis magnetometer). The GPS would do nothing more than compensate for magnetic declination (and report sideways drift), and the accelerometer would do nothing more than tilt-compensate the magnetometers. Basically, a compass for the digital age. Absent a large magnetic field that would confuse the magnetometers, I'm not sure why GPS is even being considered for this.
A magnetometer is non-viable on a ship from what I've been told, just so we're clear.
roybrus:
A magnetometer is non-viable on a ship from what I've been told, just so we're clear.
Gotcha. I know that even old-school compasses work fine on sailboats, but I suppose they have nonferrous hulls.
Still, once you get into steel-hulled ships, those are generally pretty big so there should be plenty of separation from bow to stern for two GPS receivers. The more separation, the smaller the error. Hang the receivers out on poles if you must.
Again, I think we need hard numbers on the length of the ship (50'? 500'?) and the desired precision of the heading (+/-1°? +/-10°?).
This 2 GPS heading determination is traditionally used for marine vessel heading determining for autopilot. GPS heading is derived from speed, without movement heading cannot be determined with GPS.
Position finder device such as NAVIN’s miniHomer uses MEMS magnetometer for heading determination when not in motion, switch to GPS speed derived heading when speed above some threshold, due to MEMS magnetometer is affected by surrounding magnetic environment, gives out wrong heading if used in car…etc.
Commercial product for 2 GPS Heading are like these:
There is dirt cheap plug-and-play NS-RAW carrier phase raw measurement output GPS module still available on Indiegogo NavSpark campaign, 2 boards with internal active antenna for just $50 that you can try, http://bit.ly/1dBpits
Google “GPS heading determination” will turn up much information on this. Have fun!
I don't see why it's not possible with 2 GPS that spit out lat/long.
If you enter into www.maps.google.com for example, 42.0, -73.0 and 42.0, -73.00005 it will tell you they're 7 feet apart.
42.0, -73.0 and 42.0, -73.0001 are reported as 10 feet apart.
I used a GPS module recently that reported out as 4222.12345, which I translated out as 42.2212345 and then cut down to 5 decimal points worth. I'm pretty sure Arduino can be programmed to find the distance and direction (i.e. heading) between 2 points like that, just a great circle distance calculation when it comes down to it. Example: http://www.movable-type.co.uk/scripts/latlong.html
For example, entering into the above wbsite
42.0, -73.0 and 42.0, -73.00001 yields 270 degrees, and
42.0, -73.00001 and 42.0, -73.0 yields 90 degrees.
with a distance of 0.0008263 km (2.7 feet)
CrossRoads:
4222.12345, which I translated out as 42.2212345
That isn't how you convert the DDMM.mmmm format. FYI, NeoGPS converts and retains the full precision of that format, has methods for high-resolution distance and bearing that you mentioned, and is smaller and faster than all other libraries...
Thank you both for your comment. The way suggested sounds pretty simple and doable
even for a guy like myself without much technical knowledge. As I did a little google myself, I found gps compass a bit more fancy and complex, saying I nees 2 gps capable of receiving raw data not just navigational info to know phase differential of carrier wave etc as well as math seems more complex too. Maybe because of precision and reliability issues. Assuming 2 gps antennas are 2 feet apart, even 10cm movement of 1 coordinates means roughly 10 degree difference. Will look into more. Thank you again.
"That isn't how you convert the DDMM.mmmm format."
Doesn't matter, that's how my customer wanted it formatted.
I didn't use any library, just sent the command to request position data, parsed it, and texted it out.
Odd thing tho - the data I get back from the GPS when entered into maps.google is always about 20 miles off to the southeast. I think the GPS returns incorrect data, or having limited visibility out my living room window it's not catching enough satellites.
For example, I am here (final parsed data)
42.367079, -71.529136
Yet the GPS data comes back as here:
42.22026, -71.31751 (parsed data)
Raw data is 4222.026xxx and -7131.751xxx that I move over, so it's not my parsing that's making it wrong. It's coming in wrong. This is even after hours of being locked on.
maps.google won't take the 4222.026, -7131.751 format.
Hmm, just tried something,entered 42 22.026, -71 31.751 and it does put me it the right place! Glad I mentioned this and you mentioned the format. I'll pass that on and see if they want the data formatted a little differently. Or maybe they just handle it in their text receiving/processing software, and the space hoses things up in the text.