SHOW:
|
|
- or go back to the newest paste.
| 1 | - | """he MIT License (MIT) |
| 1 | + | """The MIT License (MIT) |
| 2 | ||
| 3 | Copyright (c) 2014 Andrew Luo luo_andrew a|t yahoo.com | |
| 4 | ||
| 5 | Permission is hereby granted, free of charge, to any person obtaining a copy | |
| 6 | of this software and associated documentation files (the "Software"), to deal | |
| 7 | in the Software without restriction, including without limitation the rights | |
| 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| 9 | copies of the Software, and to permit persons to whom the Software is | |
| 10 | furnished to do so, subject to the following conditions: | |
| 11 | ||
| 12 | The above copyright notice and this permission notice shall be included in | |
| 13 | all copies or substantial portions of the Software. | |
| 14 | ||
| 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
| 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
| 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
| 21 | THE SOFTWARE.""" | |
| 22 | ||
| 23 | def navigate(): | |
| 24 | import _motion as motion | |
| 25 | from numpy import zeros, divide | |
| 26 | from math import cos | |
| 27 | from operator import add, sub | |
| 28 | from console import clear | |
| 29 | m = motion.MotionManager() | |
| 30 | m.stop() | |
| 31 | m.start() | |
| 32 | import time | |
| 33 | print "\nStarting motion update, please wait 10 seconds for the values to stabilize. During this time, please avoid touching the phone" | |
| 34 | """First we start updating, we allow a 5 second time out because there is a significant amount of drift initially present""" | |
| 35 | time.sleep(10) | |
| 36 | print "\nStarting calibration in 10 seconds. Please keep the device UTTERLY still in an position that you expect it to be most commonly in during the measurements later." | |
| 37 | time.sleep(6) | |
| 38 | print "\nCalibration starting in 5 seconds." | |
| 39 | time.sleep(5) | |
| 40 | print "\nCalibration starting..." | |
| 41 | caliacc = zeros(3) | |
| 42 | caliangle = zeros(3) | |
| 43 | cali=1 | |
| 44 | for u in xrange(300): | |
| 45 | caliacc = caliacc + m.user_acceleration | |
| 46 | caliangle = caliangle + m.rotation_rate | |
| 47 | zeroingacc= divide(caliacc, 300) | |
| 48 | zeroingang=divide(caliangle, 300) | |
| 49 | - | print zeroingacc |
| 49 | + | print "\nCalibration ended, you may start to move in 5 seconds." |
| 50 | time.sleep(5) | |
| 51 | - | print "\nCalibration ended, you may start to move." |
| 51 | + | |
| 52 | zeroingacc1=zeroingacc[1] | |
| 53 | zeroingacc2=zeroingacc[2] | |
| 54 | zeroingang0=zeroingang[0] | |
| 55 | zeroingang1=zeroingang[1] | |
| 56 | zeroingang2=zeroingang[2] | |
| 57 | speed0=0 | |
| 58 | speed1=0 | |
| 59 | speed2=0 | |
| 60 | angle0=0 | |
| 61 | angle1=0 | |
| 62 | angle2=0 | |
| 63 | movement0=0 | |
| 64 | movement1=0 | |
| 65 | movement2=0 | |
| 66 | time2=0.083 #You need to change this number to make it work on your device, just replace the while loop and timeit | |
| 67 | - | time2=0.083 #You need to change this number to make it work on your device, so just replace the while loop, and timeit |
| 67 | + | |
| 68 | """Apparently for small lists, direct assignment is twice as fast as map and lists! Very unexpected!""" | |
| 69 | while 1: | |
| 70 | cos0=cos(angle0) | |
| 71 | - | speed0 += (-zeroingacc0 + m.user_acceleration[0]) * time1 |
| 71 | + | |
| 72 | - | speed1 += (-zeroingacc1 + m.user_acceleration[1]) * time1 |
| 72 | + | |
| 73 | - | speed2 += (-zeroingacc2 + m.user_acceleration[2]) * time1 |
| 73 | + | speed0 += (-zeroingacc0 + m.user_acceleration[0]) * time1*cos0*cos2 |
| 74 | speed1 += (-zeroingacc1 + m.user_acceleration[1]) * time1*cos1*cos2 | |
| 75 | speed2 += (-zeroingacc2 + m.user_acceleration[2]) * time1*cos0*cos1 | |
| 76 | angle0 += (m.rotation_rate[0]-zeroingang0) * time2 | |
| 77 | angle1 += (m.rotation_rate[1]-zeroingang1)* time2 | |
| 78 | angle2 += (m.rotation_rate[2]-zeroingang2)* time2 | |
| 79 | movement0 = movement0+speed0*time2*cos0*cos2 | |
| 80 | movement1 = movement1+speed1*time2*cos1*cos2 | |
| 81 | movement2 = movement2+speed2*time2*cos0*cos1 | |
| 82 | #speed = map(lambda x, y: time*add(x, y), speed, map(sub, list(m.user_acceleration), zeroingacc)) | |
| 83 | #angle = map(add, angle, list(m.rotation_rate)) | |
| 84 | #movement = map(lambda x,y: time*add(x,y), movement, map(lambda l, o: l*o, map(cos, angle), speed)) | |
| 85 | print movement0, movement1, movement2 | |
| 86 | clear() | |
| 87 | navigate() |