udp_niclabox_server_debug.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 
3 import queue
4 import socket
5 import socketserver
6 from threading import Thread
7 import time
8 import struct
9 import numpy as np
10 
11 
12 import matplotlib.pyplot as plt
13 import matplotlib.animation as animation
14 import wave
15 
16 import cv2
17 from PIL import Image
18 import struct
19 
20 
21 IMAGE_TYPE = 0b00
22 AUDIO_TYPE = 0b01
23 RANGE_TYPE = 0b10
24 IMU_TYPE = 0b11
25 
26 
27 class UDPHandler(socketserver.BaseRequestHandler):
28  def handle(self):
29 
30  # with udp, self.request is a pair (data, socket)
31  packet = self.request[0]
32  # socket = self.request[1]
33 
34  print("LEN RECV: ", len(packet))
35 
36  # print(np.frombuffer(packet, dtype="uint8"))
37 
38  # size_packet = int.from_bytes(packet[:4], "big")
39 
40  # if size_packet == len(packet[4:]):
41 
42  # timestamp = time.time() #int.from_bytes(packet[4:8], "big")
43  # data_type = packet[8]
44  # data = packet[9:]
45 
46  # if data_type == RANGE_TYPE:
47  # if self.server.enable_range:
48  # self.server.range_buffer.put_nowait((timestamp, data))
49  # else:
50  # pass
51 
52  # elif data_type == IMAGE_TYPE:
53  # if self.server.enable_image:
54  # self.server.image_buffer.put_nowait((timestamp, data))
55  # else:
56  # pass
57 
58  # elif data_type == AUDIO_TYPE:
59  # if self.server.enable_audio:
60  # self.server.audio_buffer.put_nowait((timestamp, data))
61  # else:
62  # pass
63 
64  # elif data_type == IMU_TYPE:
65  # if self.server.enable_imu:
66  # self.server.imu_buffer.put_nowait((timestamp, data))
67  # else:
68  # pass
69 
70  # else:
71  # print("Warning: received packet of length {}, but expected length was {}!".format(len(packet[4:]), size_packet))
72 
73 
74 class NiclaReceiverUDP(socketserver.UDPServer):
75 
76  def __init__(
77  self,
78  server_ip,
79  server_port,
80  enable_range=False,
81  enable_image=False,
82  enable_audio=False,
83  enable_imu=False,
84  ):
85 
86  super().__init__((server_ip, server_port), UDPHandler)
87 
88  self.enable_range = enable_range
89  self.enable_image = enable_image
90  self.enable_audio = enable_audio
91  self.enable_imu = enable_imu
92 
93  if self.enable_range:
94  self.range_buffer = queue.Queue(maxsize=10)
95  if self.enable_image:
96  self.image_buffer = queue.Queue(maxsize=10)
97  if self.enable_audio:
98  self.audio_buffer = queue.Queue(maxsize=10)
99  if self.enable_imu:
100  self.imu_buffer = queue.Queue(maxsize=10)
101 
102  self.server_thread = None
103 
104  def serve(self):
105  self.server_thread = Thread(target=self.serve_forever)
106  self.server_thread.start()
107 
108  def stop_serve(self):
109  print("stopping")
110  self.shutdown()
111  self.server_thread.join()
112  self.server_close()
113 
114  def get_range(self):
115 
116  if not self.range_buffer.empty():
117  return self.range_buffer.get_nowait()
118  else:
119  return None
120 
121  def get_image(self):
122  if not self.image_buffer.empty():
123  return self.image_buffer.get_nowait()
124  else:
125  return None
126 
127  def get_audio(self):
128  if not self.audio_buffer.empty():
129  return self.audio_buffer.get_nowait()
130  else:
131  return None
132 
133  def get_imu(self):
134  if not self.imu_buffer.empty():
135  return self.imu_buffer.get_nowait()
136  else:
137  return None
138 
139 
140 if __name__ == "__main__":
141  # 192.168.1.103 10.240.23.49
142 
143  nicla_receiver_server = NiclaReceiverUDP(
144  "10.42.0.1",
145  8002,
146  enable_range=False,
147  enable_image=False,
148  enable_audio=True,
149  enable_imu=False,
150  )
151 
152  try:
153  nicla_receiver_server.serve()
154  except Exception as e:
155  print(e)
156 
157  while True:
158  pass
159  # print("Server running!")
160 
161  nicla_receiver_server.stop()
162 
163 
164 
165 
166 # import time
167 # import socket
168 # import numpy as np
169 # import cv2
170 # from pydub import AudioSegment
171 
172 # IMAGE_TYPE = 0b00
173 # AUDIO_TYPE = 0b01
174 # DISTANCE_TYPE = 0b10
175 # IMU_TYPE = 0b11
176 
177 # FLAG = 1
178 # accumulated_audio_data = []
179 
180 
181 # # server address and port (the address of the machine running this code, any available port)
182 # ip = "10.240.23.87"
183 # port = 8002
184 
185 # # set maximum packet size
186 # packet_size = 65540
187 
188 # # image window init
189 # cv2.namedWindow("niclabox", cv2.WINDOW_NORMAL)
190 
191 # # server socket init
192 # server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
193 # server.bind((ip, port))
194 # print("Waiting for niclabox to stream on", ip, ":", port)
195 
196 # def receive_and_ros():
197 # global FLAG
198 
199 # packet, client_address = server.recvfrom(packet_size)
200 
201 # data_type = packet[0]
202 # packet = packet[1:]
203 
204 # # if len(packet) < 100: # a small packet is the distance
205 # if data_type == DISTANCE_TYPE:
206 # distance = packet
207 # distance = int.from_bytes(distance, "big")
208 
209 # # Print distance in terminal
210 # print("Distance (mm): ", distance)
211 
212 # elif data_type == IMAGE_TYPE:
213 # picture = packet
214 
215 # # Show image with numpy OpenCV
216 # image = cv2.imdecode(np.frombuffer(picture, np.uint8), cv2.IMREAD_COLOR)
217 # cv2.namedWindow("niclabox", cv2.WINDOW_NORMAL)
218 # cv2.imshow("niclabox", image)
219 # if cv2.waitKey(1) == ord('q'): # Press Q to exit
220 # exit(0)
221 
222 # # uncomment to output to a file without using numpy and OpenCV
223 # # distance_file = open("distance.txt", "w")
224 # # distance_file.write(str(distance))
225 # # distance_file.close()
226 # # picture_file = open("picture.jpg", "wb")
227 # # picture_file.write(picture)
228 # # picture_file.close()
229 # elif data_type == AUDIO_TYPE:
230 
231 # if FLAG == 1:
232 # # Convert PCM data to numpy array
233 # # pcm_data = np.array(packet, dtype=np.int16)
234 # pcm_data = np.frombuffer(packet, dtype=np.int16)
235 # accumulated_audio_data.append(pcm_data)
236 
237 # if len(accumulated_audio_data) > 100:
238 # FLAG = 2
239 
240 # elif FLAG == 2:
241 # pcm_data = np.concatenate(accumulated_audio_data)
242 
243 # # Create an AudioSegment from the PCM data
244 # audio_segment = AudioSegment(pcm_data.tobytes(), frame_rate=16000, sample_width=2, channels=1)
245 
246 # # Export AudioSegment to an MP3 file
247 # audio_segment.export("recording.mp3", format="mp3")
248 
249 # FLAG = 0
250 
251 
252 # while True:
253 # try:
254 # receive_and_ros()
255 
256 # except OSError as e:
257 # print("Error: ", e)
258 
259 # pass # try again
udp_niclabox_server_debug.NiclaReceiverUDP.server_thread
server_thread
Definition: udp_niclabox_server_debug.py:94
udp_niclabox_server_debug.NiclaReceiverUDP.get_imu
def get_imu(self)
Definition: udp_niclabox_server_debug.py:133
udp_niclabox_server_debug.NiclaReceiverUDP.get_image
def get_image(self)
Definition: udp_niclabox_server_debug.py:121
udp_niclabox_server_debug.UDPHandler
Definition: udp_niclabox_server_debug.py:27
udp_niclabox_server_debug.NiclaReceiverUDP.get_audio
def get_audio(self)
Definition: udp_niclabox_server_debug.py:127
udp_niclabox_server_debug.NiclaReceiverUDP.range_buffer
range_buffer
Definition: udp_niclabox_server_debug.py:86
udp_niclabox_server_debug.NiclaReceiverUDP.enable_image
enable_image
Definition: udp_niclabox_server_debug.py:81
udp_niclabox_server_debug.NiclaReceiverUDP.enable_audio
enable_audio
Definition: udp_niclabox_server_debug.py:82
udp_niclabox_server_debug.NiclaReceiverUDP.enable_imu
enable_imu
Definition: udp_niclabox_server_debug.py:83
udp_niclabox_server_debug.NiclaReceiverUDP
Definition: udp_niclabox_server_debug.py:74
udp_niclabox_server_debug.NiclaReceiverUDP.__init__
def __init__(self, server_ip, server_port, enable_range=False, enable_image=False, enable_audio=False, enable_imu=False)
Definition: udp_niclabox_server_debug.py:76
udp_niclabox_server_debug.NiclaReceiverUDP.image_buffer
image_buffer
Definition: udp_niclabox_server_debug.py:88
udp_niclabox_server_debug.NiclaReceiverUDP.enable_range
enable_range
Definition: udp_niclabox_server_debug.py:80
udp_niclabox_server_debug.NiclaReceiverUDP.stop_serve
def stop_serve(self)
Definition: udp_niclabox_server_debug.py:108
udp_niclabox_server_debug.NiclaReceiverUDP.imu_buffer
imu_buffer
Definition: udp_niclabox_server_debug.py:92
udp_niclabox_server_debug.NiclaReceiverUDP.get_range
def get_range(self)
Definition: udp_niclabox_server_debug.py:114
udp_niclabox_server_debug.UDPHandler.handle
def handle(self)
Definition: udp_niclabox_server_debug.py:28
udp_niclabox_server_debug.NiclaReceiverUDP.serve
def serve(self)
Definition: udp_niclabox_server_debug.py:104
udp_niclabox_server_debug.NiclaReceiverUDP.audio_buffer
audio_buffer
Definition: udp_niclabox_server_debug.py:90


nicla_vision_ros
Author(s): Davide Torielli , Damiano Gasperini , Edoardo Del Bianco , Federico Rollo
autogenerated on Sat Nov 16 2024 03:38:18