Which sensor is used in Unity Gyroscope.userAcceleration API - unity3d

Does anyone know if Unity's API Gyroscope.userAcceleration (https://docs.unity3d.com/ScriptReference/Gyroscope-userAcceleration.html) is using gyroscope sensor to work or accelerometer?

Edit my answer:
Gyroscope.userAcceleration uses the acceleration data from the gyroscope and the accelerometer sensor of your device. (refers to linear acceleration, not rotational)
So it seems the Gyroscope class performs some sort of sensor fusion.
AccelerometerInput uses the build in accelerometer sensor of your device.

I believe it must use the accelerometer, since gyroscope cannot measure accelleration (while accelerometer can be used to extract rotation to a certain degree), userAcceleration just takes out the constant part (gravity aka earth acceleration) out, so when the device is not being moved user acceleration is zero even if actual data from the accelerometer contains gravity

Related

How does Apple separate gravity from device acceleration in iPhone using accelerometer and gyroscope?

I know by combining accelerometer and gyroscope, we can access the gravity and device motion separately. But I need to know how does Xcode calculate it when I simply using devicemotion.gravity. Any algorithm available?

iPhone/iPad gyroscope

I never really understand the applications of the gyroscope on the iPhone/iPad, does it serve the similar function as the accelerometer but like an improvement to the accelerometer? What is the practical use of it?
"An accelerometer is a direct measurement of orientation, while a gyro is a measurement of the time rate of change of orientation." (1) By combing the output of the two sensors, called sensor fusion, one can determine the orientation of the device precisely and fast.
If you only use accelerometer with a low-pass filter, you still get a reasonable estimate for the orientation but it will lag.
Here is an excellent live demo of both (Google Tech Talk), starting at 21:50.
Gyroscope measures orientation, where accelerometer measures movement. Both have useful applications (gyroscope: Which direction am I driving towards? Accelerometer: Did I just shake my device?)
The accelerometer tells you the difference in the force being experienced by the device and the force it would experience if it were in free fall. So if the device is static, the accelerometer tells you which way up is. When it's being shaken around, you get a summation of up plus the direction of the shake. Hence the accelerometer can detect some rotation, but not around the gravity vector and only if the device is otherwise static.
The gyroscope tells you the velocity at which the device is being rotated. So you can integrate values coming from it to keep track of orientation. That works across all axes and irrespective of device movement.

How to get velocity from variable accelerometer(in simple linar motion)?

I want compute the current iphone motion velocity anytime based on accelerometer, the accelerometer is variable. Anyone can give any idea?
It's basically impossible. The only way is to integrate the acceleration, but that magnifies the inaccuracy of the iPhone's not very accurate accelerometer, and because you don't have an independent orientation sensor (the iPhone uses gravity to figure that out!), you can't distinguish lateral acceleration from tilting the phone.
How people do this in the real world is to measure velocity using something else like GPS, and use the accelerometer to interpolate.

Transform device orientation to world frame in objective c

I'd like to transform the yaw, pitch and roll of the iPhone from the body frame to the world frame, i.e. azimuth, pitch and roll. On Android this is easily done with the
SensorManager.remapCoordinateSystem(), SensorManager.getOrientation methods as detailed here: http://blog.mysticlakesoftware.com/2009/07/sensor-accelerometer-magnetics.html
Are similar methods available for the iPhone or can someone point me in the right direction how to do this transformation?
Thanks
The accelerometer is good enough to get gravity direction vector in device coordinate system. That is in case when device calms down.
The next step for full device orientation is to use CLLocationManager and get the true north vector in device coordinate system.
With the normalized true north vector and gravity vector you can easily get all other directions using the dot and cross vectors product.
The accelerometer (UIAccelerometer) will give you a vector from the device's accelerometer chip straight down. If you can assume that the device is being held fairly steady (i.e., that you're not reading acceleration from actual movement), then you can use simple trig (acos(), asin()) to determine the device's orientation.
If you're worried that the device might be moving, you can wait for several accelerometer readings in a row that are nearly the same. You can also filter out any vector with a length that's ± TOLERANCE (as you define it) from 1.0
In more general terms, the device has no way of knowing its orientation, other than by "feeling gravity", which is done via the accelerometer. The challenges you'll have center around the fact that the accelerometer feels all acceleration, of which gravity is only one possible source.
If you're targeting a device with a gyroscope (iPhone 4 at the time of writing), the CoreMotion framework's CMMotionManager can supply you with CMDeviceMotion updates. The framework does a good job of processing the raw sensor data and separating gravity and userAcceleration for you. You're interested in the gravity vector, which can define the pitch and roll with a little trig. To add yaw, (device rotation around the gravity vector) you'll also need to use the CoreLocation framework's CLLocationManager to get compass heading updates.

6DOF using accelerometer and gyroscope

Has any one developed 6DOF pose estimation using only the iPhone sensors, not video? Drift from the accelerometer and gyroscope are understood.
The gyroscope provides fairly reliable relative orientation rates. I've been able to develop with the gyroscope data.
However, I'm having more problems deriving translation from the accelerometer. Double integration of the acceleration leads to useless position data very quickly (less than half a second).
I have attempted to remove the bias with a calibration step, but the position is still poor. What's worse, is the bias isn't constant. It changes over time, and the noise drowse the signal.
I'm interested if anyone has been able to develop a 6DOF with only the accelerometer and gyroscope that works reliably for 5-10 seconds with little drift in both translation and orientation.
The gyro yaw using DeviceMotion has a drift when you first start updating, try not to take those samples and everyone will be happy.
I made a post about this: Get orientation device in the iPhone for Opengl Es, I having the same issue, I´m just trying to make a filter but it´s not working good, there is a book about these http://www.amazon.com/iOS-Sensor-Programming-Augmented-Location/dp/1449382657, but I didn´t read this book.