Define the environment
Represent the map as an occupancy grid or SLAM-produced map and mark start and goal positions before planning.
Plan collision-free paths. Weigh path cost and obstacles.
This project focuses on a core robotics subtask: path planning on a known map. A grid-based A* planner finds a short, obstacle-avoiding path. Real delivery robots add localisation, dynamics, sensor uncertainty and safe control loops that go beyond a toy planner.
Learning concept · Not a validated service
This project focuses on a core robotics subtask: path planning on a known map. A grid-based A* planner finds a short, obstacle-avoiding path. Real delivery robots add localisation, dynamics, sensor uncertainty and safe control loops that go beyond a toy planner.
A proposed application is campus or warehouse deliveries where a planner suggests a safe route for a low-speed tug; a human or separate safety system should remain in charge of final motion commands and emergency stop logic.
Represent the map as an occupancy grid or SLAM-produced map and mark start and goal positions before planning.
Use A* or Dijkstra to compute a collision-free grid path; ensure heuristics are admissible for correctness.
Run the planner inside a simulator (PyBullet, Gazebo) and check tracking error, collisions and latency under noisy localisation.
Add a local planner or controller, safety monitors and a human-in-the-loop stop so planned trajectories are executed safely.
The supplied starter implements an A* search on a small hard-coded grid map. It locates start and goal cells, expands neighbours on a 4-connected grid, uses Manhattan distance as heuristic, reconstructs and prints the discrete grid path and its length. It does not include robot dynamics, sensors, ROS integration, simulation traces, telemetry, SLAM maps or any learned model.
while frontier:
_, current = heapq.heappop(frontier)
if current == goal:
break
for nxt in neighbors(current):
new_cost = cost_so_far[current] + 1
if nxt not in cost_so_far or new_cost < cost_so_far[nxt]:
cost_so_far[nxt] = new_cost
priority = new_cost + heuristic(nxt, goal)
heapq.heappush(frontier, (priority, nxt))
came_from[nxt] = currentThe starter is a static grid A* example on a tiny hard-coded map. It omits perception, localisation, time, robot dynamics, control loops, and real dataset traces; therefore it is not a full autonomous delivery prototype and cannot assess real-world tracking error, latency or collision risk.
A proposed extension is to replace the hard-coded grid with maps or traces from a simulator or robot logs, run planning in ROS 2 with a local controller, and collect telemetry to evaluate path length, tracking error and collision rate under localisation noise.
This is a potential application pathway, not a delivered product. The supplied starter does not implement this service or validate it with real users.
Networkers Home runs this topic inside its AI Engineer Course, with placement support and hands-on labs.