The project objective is something like this:
We would have a locomotive robot having on-board GPS on it.
Now using that GPS we want to track the position of robot and trace it on android cellphone.
(as they provide best interface with Google services)
Not only that
We even want to control the robot from android cellphone.
Is it possible to send control signal from android cellphone to that robot so that robot can make a move according to control signal.
How can we make a connection between android cellphone and on-board GPS of robot.
(We are somewhat newbie to robotics)
Any better ideas, suggestions are most welcome.
Check out Dension Wirc module:
WiRC module by Dension
It works for RC controlled platforms by sending a pulse width modulated train, allowing you to control servos and electronic speed controllers. There are 8 channels. I'm using it to control 2 tracks and a pan/tilt turret, it works great. I emailed the support team, and they sent me an iPhone project, which got me running in a matter of hours. The WiRC kit comes with a camera, so I can drive my robot remotely via wifi.
In terms of GPS, I did a test on iPhone, under clear sky, and the GPS signal drifts badly. The accuracy is indeed somewhere between 30-50 feet, it is not enough to track position of a small robot precisely. I will post a screenshot of my experiment.
Check out this screenshot: I'm walking along the white paths on the map with the phone in my shirt pocket. Every second it places a pin on the map. You can see how badly the red pins deviate from the white path. This is 30-50 feet off path. For a 2 feet long robot, this is a major trouble. If it tries to correct it's path with such resolution of GPS, it is likely to become very confused.
I've seen a differential drive equation on wikipedia (a motor with slit encoders), counting the number of slits that passed past encoder in a certain interval of time. This may help correct the GPS, but requires additional hardware
I am working on something same like this
I am trying to make an autonomous robot capable of moving itself based on some extensive robotics algorithms but certainly you don't need that.
But I think it will be better for you to mount the Android phone on the Robot and then control it with your laptop via WiFi or any other medium.
Mounting an android phone will have many advantages like:
Having a nice GPS and where there is no need to do extra work to integrate it with other hardware and software.
And you can have other hardware like accelerometer, proximity sensor, gravity sensor etc. which can be useful in many ways.
Now there is a lot of data for making Robots based on Android. Here is the Cellbots
they work on making robots from android and control them remotely from laptops or Android.
Related
I'm trying to calculate the distance between and android device and the HC-05 bluetooth module (connected to an arduino module: the MEGA 2560), using an android app created using appinventor.
For example I'd like to know if the devices are 4 meters from each other so I can turn on an alarm.
After doing some research it seems that is almost imposible to do, it seems that the most that can be done is estimate that distance constantly sensing the RSSI indicator.
Is this possible? if not ,what could I use?
Are the elements of my project (HC05,arduino, appinventor) the ones I should be using?
Is this the only way?
If the two points are within line of sight, then you can use a laser based rangefinder system, or something that uses "Time of flight" using a sound wave or a light wave. Here's one that I found with a quick google: http://hackaday.com/2014/07/01/pew-pew-an-arduino-based-laser-rangefinder/
We run into an issue with omni-directionality though,
If they don't have line of sight, you're going to have to think about how the signal is attenuated with whatever is in the way, because the difference in attenuation between a brick wall, and a gypsum(drywall) wall is great.
I want to create application which will navigate user at the shopping mall. So, I'll create a mall's map and I need somehow to track changes of user's location. Because of navigation in building, GPS is not a solution (low signal). So, I assume there is a way to track location changing (1-2 meters) with another module (maybe accelerometer?). Any ideas?
Thanks
Update: I cannot use any additional devices such as iBeacons or so. I only can use device on which app is running. No access to wi-fi routers or so.
Example: I'm standing near Apple store(point A), and now I'm going to Samsung store(point B). The app should react that I started to move from point A, and know how much meters(accuracy may be not ideal) I walk from point A and in what side I'm going (east, west, south, north).
iBeacons have bean invented for your task, they are low energy blue tooth devices which emits an unique ID, and If I remeber correctly, also the distance to that beacon.
iBeacons have been invented by or for Apple. So you have to search for an alternative which works on Android.
ibeacons are mounted at the walls of the shop.
Update:
Things you can do:
Count foot steps using accelrometer, like apple does in an API.
Theoretically you could use the built in compass, but practically it has to calibrated each time it is used (this is anoying, and useres will not do it).
You can get to decimeter accuracy using magnet field analysis of the shop and the 3-d magnetic sensor of the smartphone. This works in research (indoor navigation using magnetic fields) But you have to create a magnetic map of each shop to make it work.
for WLAN:
You need at least 3 different wlan routers in the shop. Usually they will only have one.
1-2 m accuracy you will not get with wlan.
(On ios it is not possible to read the wlan device ids nearby, hopefully you can do that in android)
iBeacons or similar devices mounted in the shop at strategic placesw,
are the only feasible technology which you will get to work.
There is an open source Android app for tracking location without GPS. It uses TYPE_STEP_DETECTOR sensor available from API level 19.
You can download it from Google Play and source code is available on GitHub.
The app is not very accurate because it uses average step length. It can be improved if we allow user to specify or calculate automatically his personal step length.
I want to calculate distance Bluetooth Paired device from android mobile. I am new in Android Bluetooth Concept can any one suggest me it's possible or not possible in android sdk.if it's possible post any code or tutorial link!
The Bluetooth signal strength distance relation depends on the devices (built-in Bluetooth device, antenna, actual orientation of device), current way the persons hold their devices, objects in-between... You could measure this for a pair of devices for a given situation and use these information.
A larger and more general solution would incorporate an external Bluetooth network. Bluetooth triangulation is the basic concept, that will help. The link will give an insight on certainties that are achievable with such a setup. Take is as an upper limit, a device to device approach will be worse.
The EE Stack Exchange site has a more complete answer which includes a mention of Apple using 802.11v for determining if Apple Watch is close to a MacBook.
Bluetooth uses radio, and radio travels at the speed of light. A 1cm round trip will take less than 100ps. Timing something that short will be tricky, probably you'll want a 10GHz clock, though there are other options. But even then, Bluetooth isn't designed to instantly echo the radio message. If you receive, process and re-transmit the message, then the processing delay will be much longer than the time of flight, and will vary randomly by at least the period of the clock used with the Bluetooth chip.
You can't. Maybe, you can get approximate value from signal indicator but it's too much subject because of envirounment - is there something between connected devices, some reflection surfaces, etc.
There is a way you can research, is coding a response time. just calculate the bluethooth response time in nano secs, physically measure the distance between the devices and make a tree rule... is the same concept of GPS. This is a Laboratory work. I have a project that i have to develop it, in schedule i will taking it in a month.
OFC, its possible. It just requires ultra precise app, build to calculate "pings" between the two objects - kinda like ekko-location or laser distance measurement - its about how much time a specific signal travels back and forth.
I am developing a project that is intended to use the GPS capabilities of an Android phone and a nearby station to compute positioning to a much more precise degree (cm), using RTK DGPS technology.
So far, I haven't been able to see anyone saying they actually managed to perform a similar task (apart from #GPSmaster, who doesn't explain how), and the APK doesn't seem to offer any information from the GPS chip other than location and NMEA message updates. I need, if possible, pseudo-ranges and carrier phases.
I was wondering if:
It would be possible to look for lower level hooks on my phone using native code, or other lower level snooping;
It would be possible to send RTCM corrections to the GPS chip present on one of these devices;
Any ideas?
Generally speaking DGPS is a technique that improves real position accuracy by canceling out most of the atmospheric effects on the GPS signal. In a typical direct GPS measurement there is about a random error in the ranges computed to the satellites due to atmospheric effects. This is why a GPS receiver that is left collecting data in a fixed location will seem to wander with in an error ellipse. For two receiver stations in the same area the atmospheric effects are almost identical and they will wander in parallel within their similarly sized and oriented error ellipses. If one of the two receivers is at a know location then the differences in their apparent GPS locations can be taken and plotted from the true location of the known station to find the true location of the unknown station.
Back in the day (circa 1992) when we had to accomplish DGPS by "post processing" we used to take the raw NEMA data collected at the two stations match up the times, compute the baseline vector and apply it to the known point to find the unknown point. I think the NEMA data we were using was only recorded to the nearest 10 sec. The math isn't really that hard.
I suspect that NEMA GPS messages [http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html ] from a tablet at a known point (with a clear sky view) could probably be sent over an internet socket to a smart phone (also with a clear sky view), which could then compute the difference and achieve a sub-meter relative location over a distance of few km, even if the assumed Internet transit times were ignored. This technique would probably still work even if the tablet and smart phone were both applying broadcast DGPS adjustments.
With the andvent of Android 7.1, the raw data from GPS chips will be available to developers. (http://gpsworld.com/google-to-provide-raw-gnss-measurements/)
Others seem to have done something similar to what you wish to accomplish (http://gpsworld.com/innovation-precise-positioning-using-raw-gps-measurements-from-android-smartphones/)
No, it is not practical to get any lower level access to the GPS device by an Android application. This has several reasons:
The application has no other means of accessing the GPS device as through the Java based API. Native code is forbidden to use most devices and usually needs a Java wrapper to tunnel through the sandbox for Android sensor devices. This makes up the main security concept.
If native code would have access to the GPS device on a lower level, it would have to cope with several different manufacturers protocols now not abstracted by the API. Best chances are to get access to custom NMEA codes, which may still have device dependent caveats.
Even if lower level access would be possible, one loses the integrated merging of other location sources like WLAN and cellphone carrier, that are presumably merged in native code below the Java API but above the NMEA protocol.
You can use DGPS corrections in Europe via custom application for SISnet receiving correction signals from EGNOS augmentation satellites(http://egnos-portal.gsa.europa.eu/news/egnos-gets-invite-your-smartphone-11). It does however need a subscription (which isn't really open to public yet) to SISnet to obtain username and password for connection to their servers. There's some of SDK published which you may find useful. Just remember that you are limited to C/A signals only (pseudoranges) and you CANNOT get phase data (L1/L2) from those cheap chips inside smartphones.You'd need a precision GNSS receiver such as Trimble BD910 (http://www.trimble.com/gnss-inertial/bd910.aspx?dtID=overview) to be able to access L1 carrier phase signal for GPS & GLONASS. There are however cheaper chips that support SBAS but none are yet installed natively in phones.
Umm. Your android probably has such a crap GPS antenna that achieving cm accuracy is impossible. Maybe if you average the position for days.. usually DGPS support is not published and not many chipsets support it. Last time I saw DGPS implemented it involved hacking the actual GPS chip firmware to add support. Even getting A-GPS to work on a random chipset is iffy since they might not support a documented way of feeding the assistance data.
It should be related with the hardware implementation , rather than the software implementation.
In the reality, GPS is usually accompanied with Wi-Fi or 3G to assist in searching the current position.
RTCM correction can be sent to your android phone using NTRIP 'provider'. Then you need to apply it to your raw GPS in your android.
I'm making an application that works as a compass..
I'm using the accelerometer and the magnetic field sensors to compute the azimuth angle through, sensor.getOrientation().
I'm searching for something that can improve the magnetic field sensor accuracy, since I'm getting it state of accuracy as UNRELIABLE!
Any one knows anything about this?I'm looking for something that can be either hardcoded or for instance just physically moving the phone until it gets calibrated!
This is not a final answer (I don't know anything for sure), but my understanding from online posts is that waving the phone around in a figure of 8 a few times while the compass is in use is supposed to trigger automatic recalibration. This is what the google maps app suggests, for example. I don't know whether this is dependent on application functionality (something in maps that detects the waving by accelerometer and triggers a recalibration), or something in the android stack, or something specific to per-phone implementations. Try it and see!
Eg discussion: http://androidforums.com/epic-4g-support-troubleshooting/217317-cant-get-compass-calibrate.html
This reference appears to suggest this per-axis / figure-8 rotation process is built-in functionality: http://m.eclipsim.com/gpsstatus/
And here another article that claims this is built-in functionality, and that you don't even need to be running a compass-consuming app for the recalibration to work: http://www.ichimusai.org/2009/06/20/how-to-calibrate-the-htc-magic-compass/
Just a few points
The figure 8 motion works sometimes and not others, I have no idea why, they really need to have some kind of code based way to check if the 8 motion worked (Assuming that the physical motion is actually required)
They also need a way to detect that calibration is required, I looked at the code for the accuracy output (the unreliable constant) and once they send it to you they will not send it again, so for instance if you calibrate but then come within a strong magnetic field it will not resend (not sure why they did that)
One not completely reliable way to detect ongoing issues is that you can also use the magnetic sensor output and do something like field=sqrt(x*x+y*y+z*z) and check that field falls between say 25 and 65 and then ask the user to calibrate if it does not.
The bottom line after testing 18 phones is that I would never depend on a Android based compass with the current crop of phones, accuracy would always be in question.
I have also found even if you are lucky and have a fairly reliable phone you can never be sure that it's calibrated without checking it against a real compass, which kind of defeats the purpose.
NOTE: On a lot of the mis-behaving phones we have found that the sensor writes a calibration file and a tmp file with the same name. If you delete those files and re-boot the phones the calibration file is recreated with zero'd values and the cold start and general calibration problems resolve themselves.
The bad news is that they are stored in /data/misc and require root privileges to get at (thanks Google & Sensor mfg!) so even though I suspect this would solve a lot of problems for a lot of developers it just is not viable from a marketplace app perspective.
I am developing for Android. I'm using Titanium Alloy as development tool with the Titanium Geolocation module.
I have only tested 2 devices [Galaxy Note and S4] against a commercial magnetic compass. Following a calibration process [tilt along the 3 axis] and using 2 different compass apps and the app I'm working on, the Android compass seems accurate enough for basic use ... correlation was good enough for my purpose anyway. I also found the device compass reading to be very sensitive to other magnetic and electrical field interference ... initial mistake I made was to use the compass feature whilst device was in a device protector with a magnetic closure facility [quite common on tabs] ... this interference is particularly strong. I thus need to suggest to users of my app to remove device protectors, keep device free of other electronics and then do standard calibration before initializing the app.
Another option is:
Go To sensors menu: #*0#*
Then if you see a red line in Magnetic Sensor section and a Need for Calibration you should recalibrate your compass.
How;
According those guys;
Turn the Samsung Galaxy Mini S5 around all of its axes until the red
line in the black circle changes color from red to blue. You can also
run through a motion that follows the shape of an 8. It may be that
several attempts are needed to calibrate the compass...