-
Notifications
You must be signed in to change notification settings - Fork 0
/
recovery_system.py
153 lines (122 loc) · 4.52 KB
/
recovery_system.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Process Starts after x minutes of flight
# With GGA Output
# If (int(GPS Altitude) == Previous State)
# if (Timer == 20 seconds)
# Stop other functions();
# Start Sending Data Through XBee();
# break from loops
# else
# continue;
# Else
# Previous State = GPS Altitude % 10
# Reset Timer
# With RMC Output
# If (Velocity == 0)
# Stop other functions
# Start Sending Data Through XBee
# break from loop
# Else
# continue checking
#Reporting GPS to Terminal
# Import gpsd Library, Install From: https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/setting-everything-up
import gps
# Import Xbee Python Library, Install From: https://xbplib.readthedocs.io/en/latest/getting_started_with_xbee_python_library.html
from digi.xbee.devices import XBeeDevice
# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
keepLooping = True
while keepLooping:
try:
report = session.next()
# Wait for a 'TPV' report and display the current time
if report['class'] == 'TPV':
if hasattr(report, 'speed'):
print(report.speed)
if hasattr(report, 'lon'):
print(report.lon)
if hasattr(report, 'lat'):
print(report.lat)
if hasattr(report, 'alt'):
print(report.alt)
except KeyError:
pass
except KeyboardInterrupt:
quit()
except StopIteration:
session = None
print("GPSD has terminated")
# XBee Device : DigiMeshDevice
# send_data_64(XBee64BitAddress, String or Bytearray, Integer)
## transceiver code:
# Instantiate tranceiver Xbee device object
# Replace COM1 with XBee Device Port, usually starts with /dev/tty
device = XBeeDevice("COM1", 9600)
device.open()
# Instantiate a remote XBee device object.
remote_device = RemoteXBeeDevice(device, XBee64BitAddress.from_hex_string("0013A20040XXXXXX"))
device.send_data_64(remote_device, "DATA")
## receiver code:
# Instantiate receiver Xbee device object
# Replace COM1 with XBee Device Port, usually starts with /dev/tty
device = XBeeDevice("COM1", 9600)
device.open()
# Instantiate a remote XBee device object.
remote_device = RemoteXBeeDevice(device, XBee64BitAddress.from_hex_string("0013A20040XXXXXX"))
data_variable = device.read_data(remote_device)
# Take data and parse down to different variable for each attribute.
# Drone Code
#
#
import gps
# Import Xbee Python Library, Install From: https://xbplib.readthedocs.io/en/latest/getting_started_with_xbee_python_library.html
from digi.xbee.devices import XBeeDevice
# Listen on port 2947 (gpsd) of localhost
session = gps.gps("localhost", "2947")
session.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE)
keepLooping = True
device = XBeeDevice("COM1", 9600)
device.open()
remote_device = RemoteXBeeDevice(device, XBee64BitAddress.from_hex_string("0013A20040XXXXXX"))
while keepLooping:
try:
report = session.next()
# Wait for a 'TPV' report and display the current drone's info
if report['class'] == 'TPV':
# checks if each attribute is available and records data in a variable
if hasattr(report, 'speed'):
velocity = report.speed
print(report.speed)
if hasattr(report, 'lon'):
longitude = report.lon
print(report.lon)
if hasattr(report, 'lat'):
latitude = report.lat
print(report.lat)
if hasattr(report, 'alt'):
altitude = report.alt
print(report.alt)
# Sends data as a string over to receiver xbee
device.send_data_64(remote_device, longitude + "," + latitude + "," + altitude + "," + velocity)
except KeyError:
pass
except StopIteration:
session = None
print("GPSD has terminated")
# Receiver Code
#
#
# Instantiate receiver Xbee device object
# Replace COM1 with XBee Device Port, usually starts with /dev/tty
device = XBeeDevice("COM1", 9600)
device.open()
# Instantiate a remote XBee device object.
remote_device = RemoteXBeeDevice(device, XBee64BitAddress.from_hex_string("0013A20040XXXXXX"))
data_variable = device.read_data(remote_device)
# Take data and parse down to different variable for each attribute.
attributes = data_variable.split(",")
longitude = float(attributes[0])
latitude = float(attributes[1])
altitude = float(attributes[2])
velocity = float(attributes[3])
# Datalogging can be done here