Non-Holonomic System
Nonholonomic navigation using unicycle model with forward speed and yaw-rate controls. The examples compare density feedback, density filters, density MPC, and CBF-style safety filters.
Run
Run the minimal nonholonomic feedback, filter, and MPC examples.
python examples/unicycle/static_single_obstacle/density_feedback.py
python examples/unicycle/static_single_obstacle/density_filter.py
python examples/unicycle/static_single_obstacle/density_mpc.py
System Dynamics
Density Feedback Controller
The planar density gradient gives a desired direction in \(x,y\). The unicycle tracks that direction by choosing a forward speed and yaw-rate command that align the heading with the density-gradient direction.
Multiple Obstacles
Local Sensing
Density-Feedback Sensing-Radius Sweep
Increasing the sensing radius makes the density-gradient direction react earlier to the obstacle, giving a more conservative path.
Density Safety Filter
The one-step density filter stays close to a nominal unicycle command \(u_{\mathrm{nom}}=[v_{\mathrm{nom}},\omega_{\mathrm{nom}}]^T\) while enforcing the next-step density condition.
Single Obstacle
Multiple Obstacles
Local Sensing
Density-Filter Sensing-Radius Sweep
The filter becomes more conservative as the sensing radius grows, because obstacle constraints shape the density condition earlier.
Density MPC
Density MPC enforces the density transport condition along a predicted horizon. This lets the controller choose steering and speed commands that account for future unicycle motion.
Single Obstacle
Multiple Obstacles
Local Sensing
Comparison with CLF-CBF filter
For the unicycle model, a vanilla one-step CBF filter encodes obstacle safety only through planar position. Let \(p_k=[x_k,y_k]^T\) be the robot position at time step \(k\), let \(p_o\) be the obstacle center, and let \(R\) be the inflated obstacle radius. The barrier does not depend on the heading state, so the one-step CBF condition can reduce forward speed near the unsafe set but does not directly constrain or reward the yaw-rate input needed to steer around the obstacle and toward the goal.
After substitution, the one-step CBF inequality contains \(v_k\), but not \(\omega_k\). Steering changes \(\theta_{k+1}\), which affects position only in later steps. Therefore the CLF-CBF filter can remain safe by slowing or stopping, but the CBF part does not have direct authority to steer the robot away in the current step.