Reviewer comment - Extend ax into axes.
This commit is contained in:
@@ -4,12 +4,4 @@ from robot import arena
|
|||||||
|
|
||||||
for line in arena.boundary_lines:
|
for line in arena.boundary_lines:
|
||||||
plt.plot([line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black")
|
plt.plot([line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black")
|
||||||
overscan_size = arena.overscan * arena.grid_cell_size
|
|
||||||
plt.imshow(
|
|
||||||
arena.distance_grid.T,
|
|
||||||
extent = [-overscan_size, arena.width + overscan_size, -overscan_size, arena.height + overscan_size],
|
|
||||||
origin="lower",
|
|
||||||
cmap="gray"
|
|
||||||
)
|
|
||||||
|
|
||||||
plt.show()
|
plt.show()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class RobotDisplay:
|
|||||||
self.buffer = ""
|
self.buffer = ""
|
||||||
self.arena = {}
|
self.arena = {}
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.fig, self.ax = plt.subplots()
|
self.fig, self.axes = plt.subplots()
|
||||||
|
|
||||||
def handle_close(self, _):
|
def handle_close(self, _):
|
||||||
self.closed = True
|
self.closed = True
|
||||||
@@ -30,10 +30,10 @@ class RobotDisplay:
|
|||||||
self.arena = message
|
self.arena = message
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.ax.clear()
|
self.axes.clear()
|
||||||
if self.arena:
|
if self.arena:
|
||||||
for line in self.arena["arena"]:
|
for line in self.arena["arena"]:
|
||||||
self.ax.plot(
|
self.axes.plot(
|
||||||
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class RobotDisplay:
|
|||||||
self.buffer = ""
|
self.buffer = ""
|
||||||
self.arena = {}
|
self.arena = {}
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.fig, self.ax = plt.subplots()
|
self.fig, self.axes = plt.subplots()
|
||||||
self.poses = None
|
self.poses = None
|
||||||
|
|
||||||
def handle_close(self, _):
|
def handle_close(self, _):
|
||||||
@@ -34,14 +34,14 @@ class RobotDisplay:
|
|||||||
self.poses = np.array(message["poses"], dtype=np.int16)
|
self.poses = np.array(message["poses"], dtype=np.int16)
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.ax.clear()
|
self.axes.clear()
|
||||||
if self.arena:
|
if self.arena:
|
||||||
for line in self.arena["arena"]:
|
for line in self.arena["arena"]:
|
||||||
self.ax.plot(
|
self.axes.plot(
|
||||||
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
)
|
)
|
||||||
if self.poses is not None:
|
if self.poses is not None:
|
||||||
self.ax.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
self.axes.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
||||||
|
|
||||||
async def main(self):
|
async def main(self):
|
||||||
plt.ion()
|
plt.ion()
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
from robot_ble_connection import BleConnection
|
||||||
|
|
||||||
|
|
||||||
|
class RobotDisplay:
|
||||||
|
def __init__(self):
|
||||||
|
self.ble_connection = BleConnection(self.handle_data)
|
||||||
|
self.buffer = ""
|
||||||
|
self.arena = {}
|
||||||
|
self.closed = False
|
||||||
|
self.fig, self.axes = plt.subplots()
|
||||||
|
self.poses = None
|
||||||
|
|
||||||
|
def handle_close(self, _):
|
||||||
|
self.closed = True
|
||||||
|
|
||||||
|
def handle_data(self, data):
|
||||||
|
self.buffer += data.decode("utf-8")
|
||||||
|
while "\n" in self.buffer:
|
||||||
|
line, self.buffer = self.buffer.split("\n", 1)
|
||||||
|
print(f"Received data: {line}")
|
||||||
|
try:
|
||||||
|
message = json.loads(line)
|
||||||
|
except ValueError:
|
||||||
|
print("Error parsing JSON")
|
||||||
|
return
|
||||||
|
if "arena" in message:
|
||||||
|
self.arena = message
|
||||||
|
if "poses" in message:
|
||||||
|
self.poses = np.array(message["poses"], dtype=np.int16)
|
||||||
|
|
||||||
|
def draw(self):
|
||||||
|
self.axes.clear()
|
||||||
|
if self.arena:
|
||||||
|
for line in self.arena["arena"]:
|
||||||
|
self.axes.plot(
|
||||||
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
|
)
|
||||||
|
if self.poses is not None:
|
||||||
|
self.axes.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
||||||
|
|
||||||
|
async def main(self):
|
||||||
|
plt.ion()
|
||||||
|
await self.ble_connection.connect()
|
||||||
|
try:
|
||||||
|
request = json.dumps({"command": "arena"}).encode()
|
||||||
|
print(f"Sending request for arena: {request}")
|
||||||
|
await self.ble_connection.send_uart_data(request)
|
||||||
|
self.fig.canvas.mpl_connect("close_event", self.handle_close)
|
||||||
|
|
||||||
|
while not self.closed:
|
||||||
|
self.draw()
|
||||||
|
plt.draw()
|
||||||
|
plt.pause(0.05)
|
||||||
|
await asyncio.sleep(0.01)
|
||||||
|
finally:
|
||||||
|
await self.ble_connection.close()
|
||||||
|
|
||||||
|
|
||||||
|
robot_display = RobotDisplay()
|
||||||
|
asyncio.run(robot_display.main())
|
||||||
@@ -13,7 +13,7 @@ class RobotDisplay:
|
|||||||
self.buffer = ""
|
self.buffer = ""
|
||||||
self.arena = {}
|
self.arena = {}
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.fig, self.ax = plt.subplots()
|
self.fig, self.axes = plt.subplots()
|
||||||
self.poses = None
|
self.poses = None
|
||||||
|
|
||||||
def handle_close(self, _):
|
def handle_close(self, _):
|
||||||
@@ -35,14 +35,14 @@ class RobotDisplay:
|
|||||||
self.poses = np.array(message["poses"], dtype=np.int16)
|
self.poses = np.array(message["poses"], dtype=np.int16)
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.ax.clear()
|
self.axes.clear()
|
||||||
if self.arena:
|
if self.arena:
|
||||||
for line in self.arena["arena"]:
|
for line in self.arena["arena"]:
|
||||||
self.ax.plot(
|
self.axes.plot(
|
||||||
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
)
|
)
|
||||||
if self.poses is not None:
|
if self.poses is not None:
|
||||||
self.ax.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
self.axes.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
||||||
|
|
||||||
async def send_command(self, command):
|
async def send_command(self, command):
|
||||||
request = (json.dumps({"command": command}) ).encode()
|
request = (json.dumps({"command": command}) ).encode()
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class RobotDisplay:
|
|||||||
self.buffer = ""
|
self.buffer = ""
|
||||||
self.arena = {}
|
self.arena = {}
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.fig, self.ax = plt.subplots()
|
self.fig, self.axes = plt.subplots()
|
||||||
self.poses = None
|
self.poses = None
|
||||||
|
|
||||||
def handle_close(self, _):
|
def handle_close(self, _):
|
||||||
@@ -35,14 +35,14 @@ class RobotDisplay:
|
|||||||
self.poses = np.array(message["poses"], dtype=np.int16)
|
self.poses = np.array(message["poses"], dtype=np.int16)
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.ax.clear()
|
self.axes.clear()
|
||||||
if self.arena:
|
if self.arena:
|
||||||
for line in self.arena["arena"]:
|
for line in self.arena["arena"]:
|
||||||
self.ax.plot(
|
self.axes.plot(
|
||||||
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
)
|
)
|
||||||
if self.poses is not None:
|
if self.poses is not None:
|
||||||
self.ax.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
self.axes.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
||||||
|
|
||||||
async def send_command(self, command):
|
async def send_command(self, command):
|
||||||
request = (json.dumps({"command": command}) ).encode()
|
request = (json.dumps({"command": command}) ).encode()
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class RobotDisplay:
|
|||||||
self.buffer = ""
|
self.buffer = ""
|
||||||
self.arena = {}
|
self.arena = {}
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.fig, self.ax = plt.subplots()
|
self.fig, self.axes = plt.subplots()
|
||||||
self.poses = None
|
self.poses = None
|
||||||
|
|
||||||
def handle_close(self, _):
|
def handle_close(self, _):
|
||||||
@@ -35,14 +35,14 @@ class RobotDisplay:
|
|||||||
self.poses = np.array(message["poses"], dtype=np.int16)
|
self.poses = np.array(message["poses"], dtype=np.int16)
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.ax.clear()
|
self.axes.clear()
|
||||||
if self.arena:
|
if self.arena:
|
||||||
for line in self.arena["arena"]:
|
for line in self.arena["arena"]:
|
||||||
self.ax.plot(
|
self.axes.plot(
|
||||||
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
)
|
)
|
||||||
if self.poses is not None:
|
if self.poses is not None:
|
||||||
self.ax.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
self.axes.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
||||||
|
|
||||||
async def send_command(self, command):
|
async def send_command(self, command):
|
||||||
request = (json.dumps({"command": command}) ).encode()
|
request = (json.dumps({"command": command}) ).encode()
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class RobotDisplay:
|
|||||||
self.buffer = ""
|
self.buffer = ""
|
||||||
self.arena = {}
|
self.arena = {}
|
||||||
self.closed = False
|
self.closed = False
|
||||||
self.fig, self.ax = plt.subplots()
|
self.fig, self.axes = plt.subplots()
|
||||||
self.poses = None
|
self.poses = None
|
||||||
|
|
||||||
def handle_close(self, _):
|
def handle_close(self, _):
|
||||||
@@ -35,14 +35,14 @@ class RobotDisplay:
|
|||||||
self.poses = np.array(message["poses"], dtype=np.int16)
|
self.poses = np.array(message["poses"], dtype=np.int16)
|
||||||
|
|
||||||
def draw(self):
|
def draw(self):
|
||||||
self.ax.clear()
|
self.axes.clear()
|
||||||
if self.arena:
|
if self.arena:
|
||||||
for line in self.arena["arena"]:
|
for line in self.arena["arena"]:
|
||||||
self.ax.plot(
|
self.axes.plot(
|
||||||
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
[line[0][0], line[1][0]], [line[0][1], line[1][1]], color="black"
|
||||||
)
|
)
|
||||||
if self.poses is not None:
|
if self.poses is not None:
|
||||||
self.ax.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
self.axes.scatter(self.poses[:,0], self.poses[:,1], color="blue")
|
||||||
|
|
||||||
async def send_command(self, command):
|
async def send_command(self, command):
|
||||||
request = (json.dumps({"command": command}) ).encode()
|
request = (json.dumps({"command": command}) ).encode()
|
||||||
|
|||||||
Reference in New Issue
Block a user