# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
importmatplotlib.pyplotasplt | |
importnumpyasnp | |
frommpl_toolkits.mplot3dimportAxes3D | |
importmatplotlib.animationasanimation | |
# ****************************************************** | |
# | |
# REAL DATA FROM SERVER (IMU) | |
# | |
# def gen_point(): | |
# return client.get_data() | |
# | |
# def update_line(num, data, line): | |
# try: | |
# x, y, z = gen_point() | |
# data[0].append(x) | |
# data[1].append(y) | |
# data[2].append(z) | |
# | |
# line.set_data([data[0][:num], data[1][:num]]) | |
# line.set_3d_properties(data[2][:num]) | |
# | |
# relimit(data) | |
# return [line] | |
# except socket.timeout: | |
# return [line] | |
# | |
# ****************************************************** | |
# ****************************************************** | |
# SIMULATED DATA | |
# ****************************************************** | |
importdataset | |
defupdate_line(num, data, line): | |
line.set_data(dataset.x[:num], dataset.y[:num]) | |
line.set_3d_properties(dataset.z[:num]) | |
defrelimit(data): | |
max_x=max(0.4, max([abs(i) foriindata[0]])) | |
max_y=max(0.4, max([abs(i) foriindata[1]])) | |
max_z=max(0.4, max([abs(i) foriindata[2]])) | |
x= [-max_x, max_x] | |
y= [-max_y, max_y] | |
z= [-max_z, max_z] | |
ax.set_xlim3d(x) | |
ax.set_ylim3d(y) | |
ax.set_zlim3d(z) | |
fig=plt.figure() | |
ax=fig.add_subplot(111, projection='3d') | |
# x = np.linspace(-10, 10, 2000) | |
# y = np.linspace(-10, 10, 2000) | |
# z = np.sin(x) * np.cos(y) | |
# theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) | |
# z = np.linspace(-2, 2, 100) | |
# r = z ** 2 + 1 | |
# x = r * np.sin(theta) | |
# y = r * np.cos(theta) | |
data= [[], [], []] | |
line, =ax.plot(data[0][0:1], data[1][0:1], data[2][0:1]) | |
# Setting the axes properties | |
ax.set_xlim3d([-4.0, 18.0]) | |
ax.set_ylim3d([-8.0, 10.0]) | |
ax.set_zlim3d([-1.0, 1.0]) | |
ax.set_xlabel('X') | |
ax.set_ylabel('Y') | |
ax.set_zlabel('Z') | |
ax.set_title('ALPS 3D simulation') | |
line_ani=animation.FuncAnimation(fig, update_line, fargs=(data, line), | |
interval=100, blit=False) | |
# ax.plot(x, y, z, label="Image") | |
# ax.legend() | |
plt.show() |
# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
importsocket | |
importjson | |
print("Initializing client") | |
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) | |
sock.settimeout(0.1) | |
host="raspberrypi.local" | |
sock.sendto("connect".encode(), (host, 8088)) | |
print("connected") | |
defget_data(): | |
data=json.loads(sock.recv(1024).decode()) | |
print(data) | |
returndata |
# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
fromnumpyimportlinspace | |
fromnumpy.randomimportrand | |
# First segment | |
x1= (linspace(0, 10, num=130) + (rand(130) -0.5) *0.1).tolist() | |
y1= (linspace(0, 0, num=130) + (rand(130) -0.5) *0.1).tolist() | |
# Second | |
x2= (linspace(10, 10, num=40) + (rand(40) -0.5) *0.1).tolist() | |
y2= (linspace(0, -4, num=40) + (rand(40) -0.5) *0.1).tolist() | |
# Third | |
x3= (linspace(10, 16, num=50) + (rand(50) -0.5) *0.1).tolist() | |
y3= (linspace(-4, -4, num=50) + (rand(50) -0.5) *0.1).tolist() | |
x=x1+x2+x3 | |
y=y1+y2+y3 | |
z= (linspace(0, 0, num=220) + (rand(220) -0.5) *0.05).tolist() |
# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
#!/usr/bin/python | |
importsmbus | |
importmath | |
fromnumpyimportarray | |
# Register | |
power_mgmt_1=0x6b | |
power_mgmt_2=0x6c | |
defread_byte(reg): | |
returnbus.read_byte_data(address, reg) | |
defread_word(reg): | |
h=bus.read_byte_data(address, reg) | |
l=bus.read_byte_data(address, reg+1) | |
value= (h<<8) +l | |
returnvalue | |
defread_word_2c(reg): | |
val=read_word(reg) | |
if (val>=0x8000): | |
return-((65535-val) +1) | |
else: | |
returnval | |
defdist(a, b): | |
returnmath.sqrt((a*a) + (b*b)) | |
defget_y_rotation(x, y, z): | |
radians=math.atan2(x, dist(y, z)) | |
return-math.degrees(radians) | |
defget_x_rotation(x, y, z): | |
radians=math.atan2(y, dist(x, z)) | |
returnmath.degrees(radians) | |
bus=smbus.SMBus(1) # bus = smbus.SMBus(0) fuer Revision 1 | |
address=0x68# via i2cdetect | |
# Aktivieren, um das Modul ansprechen zu koennen | |
bus.write_byte_data(address, power_mgmt_1, 0) | |
# print "Gyroskop" | |
# print "--------" | |
# | |
# gyroskop_xout = read_word_2c(0x43) | |
# gyroskop_yout = read_word_2c(0x45) | |
# gyroskop_zout = read_word_2c(0x47) | |
# | |
# print "gyroskop_xout: ", ("%5d" % gyroskop_xout), " skaliert: ", (gyroskop_xout / 131) | |
# print "gyroskop_yout: ", ("%5d" % gyroskop_yout), " skaliert: ", (gyroskop_yout / 131) | |
# print "gyroskop_zout: ", ("%5d" % gyroskop_zout), " skaliert: ", (gyroskop_zout / 131) | |
# | |
# print "Beschleunigungssensor" | |
# print "---------------------" | |
# | |
# beschleunigung_xout = read_word_2c(0x3b) | |
# beschleunigung_yout = read_word_2c(0x3d) | |
# beschleunigung_zout = read_word_2c(0x3f) | |
# | |
# beschleunigung_xout_skaliert = beschleunigung_xout / 16384.0 | |
# beschleunigung_yout_skaliert = beschleunigung_yout / 16384.0 | |
# beschleunigung_zout_skaliert = beschleunigung_zout / 16384.0 | |
# | |
# print "beschleunigung_xout: ", ("%6d" % beschleunigung_xout), " skaliert: ", beschleunigung_xout_skaliert | |
# print "beschleunigung_yout: ", ("%6d" % beschleunigung_yout), " skaliert: ", beschleunigung_yout_skaliert | |
# print "beschleunigung_zout: ", ("%6d" % beschleunigung_zout), " skaliert: ", beschleunigung_zout_skaliert | |
# | |
# print "X Rotation: " , get_x_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert) | |
# print "Y Rotation: " , get_y_rotation(beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, beschleunigung_zout_skaliert) | |
defget_gyro_raw(): | |
gyroskop_xout=read_word_2c(0x43) | |
gyroskop_yout=read_word_2c(0x45) | |
gyroskop_zout=read_word_2c(0x47) | |
_tuple= ((gyroskop_xout/131), | |
(gyroskop_yout/131), | |
(gyroskop_zout/131) | |
) | |
returnarray(_tuple) | |
defcalibrate(): | |
globaloffset | |
s=array((0.0, 0.0, 0.0)) | |
foriinrange(2000): | |
s+=array(get_acceleration_raw()) | |
offset=s/2000.0 | |
print("offset:", offset) | |
defget_acceleration_raw(): | |
beschleunigung_xout=read_word_2c(0x3b) | |
beschleunigung_yout=read_word_2c(0x3d) | |
beschleunigung_zout=read_word_2c(0x3f) | |
beschleunigung_xout_skaliert=beschleunigung_xout/16384.0 | |
beschleunigung_yout_skaliert=beschleunigung_yout/16384.0 | |
beschleunigung_zout_skaliert=beschleunigung_zout/16384.0 | |
a= (beschleunigung_xout_skaliert, beschleunigung_yout_skaliert, | |
beschleunigung_zout_skaliert) | |
returna | |
defget_acceleration(): | |
globaloffset | |
a_raw=array(get_acceleration_raw()) | |
a=9.81* (a_raw-offset) | |
returntuple(a.tolist()) |
Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
software and associated documentation files (the "Software"), to deal in the Software | |
without restriction, including without limitation the rights to use, copy, modify, merge, | |
publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
to whom the Software is furnished to do so, subject to the following conditions: | |
The above copyright notice and this permission notice shall be included in all copies | |
or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
importnumpy | |
importgyro | |
fromthreadingimportThread | |
fromtimeimportsleep | |
interval=0.01 | |
classLPS(Thread): | |
def__init__(self): | |
super().__init__() | |
gyro.calibrate() | |
self.pos=numpy.array((0, 0, 0)) | |
# self.vel = numpy.array(0, 0, 0) | |
# self.acc = numpy.array(0, 0, 0) | |
defrun(self): | |
#a = numpy.array(gyro.get_acceleration()) | |
#sleep(interval) | |
whileTrue: | |
a=numpy.array(gyro.get_acceleration()) | |
self.pos=self.pos+a* (interval**2) | |
sleep(interval) | |
defget_pos(self): returnself.pos.tolist() |
# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
fromPyQt5.QtWidgetsimport* | |
fromsysimportargv | |
classApplication(QWidget): | |
def__init__(self): | |
super().__init__() | |
self.__initialize_window__() | |
self.__initialize_components__() | |
def__initialize_window__(self): | |
self.resize(250, 150) | |
self.move(300, 300) | |
self.setWindowTitle('Simple') | |
self.show() | |
print("shown") | |
def__initialize_components__(self): | |
self.text=QTextEdit("Ciao", self) | |
self.text.show() | |
defrun(self): | |
self.app.exec() | |
app=QApplication(argv) | |
w=Application() | |
exit(app.exec_()) |
# Copyright 2018 Uranus Explorers Team: Lorenzo Mureu, Andrea Foschiatti, Matteo Stoppa, Juan Carlos Vega Oliver | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy of this | |
# software and associated documentation files (the "Software"), to deal in the Software | |
# without restriction, including without limitation the rights to use, copy, modify, merge, | |
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons | |
# to whom the Software is furnished to do so, subject to the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be included in all copies | |
# or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | |
# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE | |
# FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
importsocket | |
importjson | |
fromtimeimportsleep, time | |
importthreading | |
importlps | |
importgyro | |
interval=1# 100 ms | |
lps_thread=lps.LPS() | |
#gyro.calibrate() | |
defclient_thread(addr): | |
globallps_thread | |
whileTrue: | |
data=lps_thread.get_pos() | |
#data = {"acceleration": gyro.get_acceleration(), "time": time()} | |
sock.sendto(json.dumps(data).encode(), addr) | |
sleep(interval) | |
conn.close() | |
print("Initializing server") | |
sock=socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) | |
sock.bind(("", 8088)) | |
# sock.listen(10) | |
print("Server started") | |
# now keep talking with the client | |
while1: | |
# wait to accept a connection - blocking call | |
_data, addr=sock.recvfrom(4096) | |
print('Connected with '+addr[0] +':'+str(addr[1])) | |
threading.Thread(target=client_thread, args=(addr,)).start() | |
lps_thread.start() | |
s.close() |
SpaceApps is a NASA incubator innovation program.