drone-env / tmp /test_tree.py
manikandan-n-07's picture
Initial Drone-Env Deployment
80c0c44
import os
import sys
# Add the project root to sys.path
project_root = r"c:\Users\megaa\Downloads\drone_env"
if project_root not in sys.path:
sys.path.append(project_root)
from server.grid_world_environment import DroneDeliveryEnvironment
from models import DroneAction
def test_tree_flyover():
env = DroneDeliveryEnvironment()
obs = env.reset()
# Find a tree on the grid
tree_pos = None
for y, row in enumerate(env._grid):
for x, cell in enumerate(row):
if cell == "🌳":
tree_pos = (x, y)
break
if tree_pos:
break
if not tree_pos:
print("No tree found on small grid, retrying reset...")
for _ in range(10):
obs = env.reset()
for y, row in enumerate(env._grid):
for x, cell in enumerate(row):
if cell == "🌳":
tree_pos = (x, y)
break
if tree_pos: break
if tree_pos: break
if not tree_pos:
print("Still no tree found. Test aborted.")
return
print(f"Drone start: ({env._drone_x}, {env._drone_y})")
print(f"Tree found at: {tree_pos}")
# Move the drone to be adjacent to the tree if possible, or just teleport for testing
# Actually, we can just simulate the step logic or manually set position and then step
# Let's find direction to the tree
tx, ty = tree_pos
dx, dy = env._drone_x, env._drone_y
# Teleport to adjacent
if tx > 0:
env._drone_x = tx - 1
env._drone_y = ty
direction = "RIGHT"
elif tx < env._cfg["width"] - 1:
env._drone_x = tx + 1
env._drone_y = ty
direction = "LEFT"
elif ty > 0:
env._drone_x = tx
env._drone_y = ty - 1
direction = "DOWN"
else:
env._drone_x = tx
env._drone_y = ty + 1
direction = "UP"
print(f"Teleported drone to adjacent: ({env._drone_x}, {env._drone_y})")
# Perform move into tree
action = DroneAction(direction=direction)
obs = env.step(action)
print(f"Action: {direction}")
print(f"New Pos: ({env._drone_x}, {env._drone_y})")
print(f"Reward: {obs.reward_last}")
print(f"Message: {obs.message}")
assert env._drone_x == tx and env._drone_y == ty, "Drone should have moved onto the tree cell"
assert obs.reward_last == -0.1, f"Reward should be -0.1, got {obs.reward_last}"
print("Test passed! Flying over tree works and reward is exactly -0.1")
if __name__ == "__main__":
test_tree_flyover()