JC
All projects

Fordham · CISC 6525, Artificial Intelligence · Spring 2026

Terrain Traversability with a Dynamic Bayesian Network

A per-cell recursive Bayes filter that maps where a mobile robot can safely drive using only its wheel-slip readings. Built in ROS/Gazebo and validated on a TurtleBot3.

Dynamic Bayesian NetworksProbabilistic ReasoningPythonNumPy / SciPyROS
Heatmap of the estimated traversability grid, with most visited cells traversable and two low-traversability cells in red.
wheel slip is the only measurement of the hidden state
1 sensorwheel slip is the only measurement of the hidden state
enough to identify low-traversability cells
1 passenough to identify low-traversability cells
grid resolution for the belief map
0.5 mgrid resolution for the belief map

The problem

A robot exploring an enclosed area needs to know which parts of the ground it can safely drive over. The only evidence it has is wheel slip: low slip suggests firm ground, high slip suggests trouble. The goal was to turn that single noisy signal into a map of traversability, with a probability attached to every cell.

The model

I designed a dynamic Bayesian network with three parts:

  • A hidden Boolean state per grid cell: is this cell traversable?
  • A near-identity transition model. Terrain doesn't change over time, so a cell keeps its state with probability 0.99. The small epsilon keeps the filter from ever locking in permanently.
  • A Gaussian sensor model for wheel slip, with low mean slip for traversable ground and high mean slip otherwise. I chose the parameters so the two distributions barely overlap, which means a single visit is enough to reach a decisive belief.

Location is treated as observed, so it acts as a selector: each slip reading updates only the belief of the cell the robot is currently in.

Inference

I implemented a per-cell recursive Bayes filter in Python, NumPy, and SciPy. Every cell starts at a 0.5 prior. On each reading, the filter:

  1. Predicts with the transition model, which decays the belief minimally toward the prior
  2. Updates with Bayes' rule, using the slip-reading likelihood under each hidden state

The robotics pipeline

The full pipeline runs in ROS and Gazebo and was validated on a TurtleBot3:

  • Online slip estimation as the robot drives, with each reading mapped to its grid cell
  • Lawnmower-pattern coverage navigation across a 0.5 m grid, with laser-based collision avoidance and buffer zones around walls and an interior barrier
  • Heatmap visualization of the belief over the whole grid

Results

Estimated traversability grid

Green cells were visited and found traversable. Yellow cells were never reached and stay at the 0.5 prior. The two orange and red cells in row 9 were correctly identified as low-traversability from a single pass.

The hardest parts were navigation, since the robot kept getting stuck at the edges until I added buffer zones, and tuning the sensor-model parameters so beliefs converge quickly without overreacting to noise. The next improvement would be smarter path planning, to reach the unvisited cells near the interior barrier.

Next projectTiCK Heatmap →