Autonomous Rover Brain (Simulated Navigation + Obstacle Avoidance)

import numpy as np

class Rover:
    def __init__(self, start=(0, 0), heading=0):
        self.pos = np.array(start, dtype=float)
        self.heading = heading  # degrees
        self.speed = 0.1

    def rotate(self, deg):
        self.heading = (self.heading + deg) % 360

    def forward(self):
        rad = np.radians(self.heading)
        self.pos += np.array([np.cos(rad), np.sin(rad)]) * self.speed

    def step(self, obstacles):
        # Simple lidar simulation
        distances = []
        for angle in (-30, 0, 30):
            rad = np.radians(self.heading + angle)
            scan_ray = self.pos + np.array([np.cos(rad), np.sin(rad)]) * 1.0
            distances.append(
                np.min([np.linalg.norm(scan_ray - ob) for ob in obstacles])
            )
        
        # Avoid obstacles
        if distances[1] < 0.25:     # obstacle forward
            if distances[0] > distances[2]:
                self.rotate(-20)    # turn left
            else:
                self.rotate(20)     # turn right
        else:
            self.forward()          # clear → advance
        
        return self.pos

# Example run
if __name__ == "__main__":
    rover = Rover()
    obstacles = [np.array([1, 1]), np.array([2, 0.5])]

    for t in range(200):
        pos = rover.step(obstacles)
        print(f"t={t}, pos={pos}")

Leave a Reply

Your email address will not be published. Required fields are marked *