title: Calculating distance using Linear acceleration android
body: <blockquote>
    <p><strong>Possible Duplicate:</strong><br>
    <a href="https://stackoverflow.com/questions/7829097/android-accelerometer-accuracy-inertial-navigation">Android accelerometer accuracy (Inertial navigation)</a>  </p>
  </blockquote>
  
  
  
  <p>I am using the following code to calculate the distance. <code>tnew</code> and <code>anew</code> are <code>arraylists</code> containing <strong>timestamps</strong> and <strong>accelerations</strong> respectively. </p>
  
  <pre><code> double distance=0;
   double init_vel=0;
  long time_prev=tnew.next();
     while(anew.hasNext())
     {
      float temp_acc=anew.next();
      long temp_time=tnew.next();
  
      interval=(temp_time-time_prev)/1000f;   //milliseconds to seconds
      double fin_vel=init_vel+(temp_acc*interval);
      distance+=(init_vel*interval)+0.5f*temp_acc*interval*interval;
  
      init_vel=fin_vel;
      time_prev=temp_time;
     }
  </code></pre>
  
  <p><br>
  Is there any logical mistake in the code? Because I am getting values much smaller than the actual length.
  <br><br>
  Output of <code>LogCat</code> : <br></p>
  
  <pre><code>--------- beginning of /dev/log/system
  
  --------- beginning of /dev/log/main
  
  V/PhonetapeActivity( 8842): Sensor Listener Registered
  
  V/PhonetapeActivity( 8842): Sensor Unregistered
  
  V/PhonetapeActivity( 8842): No. of Iterations : 49
  
  V/PhonetapeActivity( 8842): Value of acceleration : 3.5762787E-7
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665585965
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.15275347
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586017
  
  V/PhonetapeActivity( 8842): Value of acceleration : 0.15585232
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586077
  
  V/PhonetapeActivity( 8842): Value of acceleration : 1.075269
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586138
  
  V/PhonetapeActivity( 8842): Value of acceleration : 3.6529458
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586199
  
  V/PhonetapeActivity( 8842): Value of acceleration : 9.645137
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586257
  
  V/PhonetapeActivity( 8842): Value of acceleration : 17.022213
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586316
  
  V/PhonetapeActivity( 8842): Value of acceleration : 9.721476
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586376
  
  V/PhonetapeActivity( 8842): Value of acceleration : -18.729362
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586437
  
  V/PhonetapeActivity( 8842): Value of acceleration : -22.868385
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586497
  
  V/PhonetapeActivity( 8842): Value of acceleration : -16.777517
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586557
  
  V/PhonetapeActivity( 8842): Value of acceleration : -7.0492268
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586617
  
  V/PhonetapeActivity( 8842): Value of acceleration : -3.860828
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586677
  
  V/PhonetapeActivity( 8842): Value of acceleration : 1.7244682
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586737
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.0734243
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586797
  
  V/PhonetapeActivity( 8842): Value of acceleration : 6.4193974
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586857
  
  V/PhonetapeActivity( 8842): Value of acceleration : 2.739545
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586917
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.559997
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665586977
  
  V/PhonetapeActivity( 8842): Value of acceleration : 4.2290807
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587037
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.0012918
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587097
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.9317436
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587157
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.20226
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587217
  
  V/PhonetapeActivity( 8842): Value of acceleration : 7.1381693
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587276
  
  V/PhonetapeActivity( 8842): Value of acceleration : 7.6460614
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587337
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.566694
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587396
  
  V/PhonetapeActivity( 8842): Value of acceleration : 3.355657
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587457
  
  V/PhonetapeActivity( 8842): Value of acceleration : 1.8876343
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587517
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.8815446
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587577
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.9595623
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587646
  
  V/PhonetapeActivity( 8842): Value of acceleration : -4.233544
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587697
  
  V/PhonetapeActivity( 8842): Value of acceleration : -1.9580669
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587765
  
  V/PhonetapeActivity( 8842): Value of acceleration : -1.4569702
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587822
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.6058636
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587876
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.21207428
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587937
  
  V/PhonetapeActivity( 8842): Value of acceleration : 0.5068469
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665587997
  
  V/PhonetapeActivity( 8842): Value of acceleration : 5.614555
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588057
  
  V/PhonetapeActivity( 8842): Value of acceleration : -4.5297813
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588122
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.29250193
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588178
  
  V/PhonetapeActivity( 8842): Value of acceleration : -2.4922757
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588237
  
  V/PhonetapeActivity( 8842): Value of acceleration : -1.7652755
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588297
  
  V/PhonetapeActivity( 8842): Value of acceleration : -2.3279366
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588357
  
  V/PhonetapeActivity( 8842): Value of acceleration : -1.8127642
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588419
  
  V/PhonetapeActivity( 8842): Value of acceleration : -1.956768
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588477
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.8337221
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588537
  
  V/PhonetapeActivity( 8842): Value of acceleration : -0.24841261
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588601
  
  V/PhonetapeActivity( 8842): Value of acceleration : 0.23997736
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588657
  
  V/PhonetapeActivity( 8842): Value of acceleration : 0.14441395
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588723
  
  V/PhonetapeActivity( 8842): Value of acceleration : 0.23150349
  
  V/PhonetapeActivity( 8842): Value of timestamp(milli) : 1350665588777
  
  V/PhonetapeActivity( 8842):  1st while loop ended
  
  V/PhonetapeActivity( 8842): 2nd while loop ended
  
  V/PhonetapeActivity( 8842): Avg value : 0.4006781578063965
  
  V/PhonetapeActivity( 8842): Max Value : 17.022213
  
  V/PhonetapeActivity( 8842): Min Value : -22.868385
  
  V/PhonetapeActivity( 8842): Standard Deviation : -0.0031174493
  
  V/PhonetapeActivity( 8842): 3rd while loop started
  
  V/PhonetapeActivity( 8842): startpos=3 endpos=8
  
  V/PhonetapeActivity( 8842): acceleration=0.1558523178100586 interval=0.061000000685453415
  
  V/PhonetapeActivity( 8842): distance=5.799264876044276E-4
  
  V/PhonetapeActivity( 8842): next init velocity=0.009506991493243078
  
  V/PhonetapeActivity( 8842): acceleration=1.0752689838409424 interval=0.061000000685453415
  
  V/PhonetapeActivity( 8842): distance=0.005160928954000712
  
  V/PhonetapeActivity( 8842): next init velocity=0.07509840024458736
  
  V/PhonetapeActivity( 8842): acceleration=3.6529457569122314 interval=0.057999998331069946
  
  V/PhonetapeActivity( 8842): distance=0.021805144861910285
  
  V/PhonetapeActivity( 8842): next init velocity=0.2869692480489858
  
  V/PhonetapeActivity( 8842): acceleration=9.645136833190918 interval=0.05900000035762787
  
  V/PhonetapeActivity( 8842): distance=0.07231105232279186
  
  V/PhonetapeActivity( 8842): next init velocity=0.8560323246566197
  
  V/PhonetapeActivity( 8842): acceleration=17.022212982177734 interval=0.05999999865889549
  
  V/PhonetapeActivity( 8842): distance=0.18495295465057213
  
  V/PhonetapeActivity( 8842): next init velocity=1.8773650807587172
  
  V/PhonetapeActivity( 8842): 3rd while loop ended
  
  V/PhonetapeActivity( 8842): final distance=0.18495295465057213
  
  V/PhonetapeActivity( 8842): values of acceleration, timestamp, distance, start_time and calibrating reset
  </code></pre>
  
  <p><br>
  If you observe the logcat, first it iterates through 49 values of acceleration and their respective time stamps in milliseconds. Then there is a avg, sum, max, min etc. <bR>
  Then if you see there is a <code>startpos=3</code> and <code>endpos=8</code>. This is the iteration number range, I am using to calculate the distance .i.e I am using the values of acceleration and timestamp only from iteration 3 to 8. <br>This is because, I detect the start of distance calculation from a <strong>rise in acceleration</strong> to a <strong>sudden change</strong> in the opposite direction. You can see that the values from 3-8 fit into the logic. From 3 there is a considerable rise in acceleration and after 8 there is a sudden decrease.</p>