The purpose of this library is to showcase a framework for multi-step ahead planning using pure input control (see Braitenberg vehicles). The navigation problem is broken down into several unique closed-loop input controllers, called Tasks. Each Task produces a unique control behaviour (go straight, turn left/right 90 degrees) in response to a Disturbance (an obstacle or target), which determines a Task's duration. A supervising module, called the Configurator, can simulate sequences of Tasks at runtime in game engine Box2D, retain their outcomes in a cognitive map, which can be searched to extract plans. The physics simulation represents the robot's Core Knowledge (Spelke, 2007).
-
Hybrid state-space representation where states are Tasks focused on a specific object
-
Mapless navigation: robot is ready to go as is, no need for global maps/SLAM
-
Plans are made up of multiple Tasks (object-focused instructions), not trajectories
-
On-the-fly replanning
Available at https://glafratta.github.io/bratmobile/
Giulia Lafratta, Bernd Porr, Christopher Chandler, Alice Miller; Closed-Loop Multistep Planning. Neural Computation 2025; 37 (7): 1288–1319. doi: https://doi.org/10.1162/neco_a_01761
The indoor robot is equipped with
- Raspberry Pi model 3b+
- 360 Parallax Continuous Rotation Servo motors (see here for wiring)
- A1 SLAMTEC LIDAR (see here for wiring)
sudo apt install g++ cmake libpigpio-dev libopencv-dev libboost-all-dev xorg-dev libglu1-mesa-dev libgtest-dev
- LIDAR API
- Motors API
- Cpp Timer
- Box2D v2.4.1
** if not installed automatically, go to
box2d/buildand runsudo make install
git clone git@github.com:glafratta/bratmobile.git
cd bratmobile
cmake .
make
sudo make install
Demo prefixes:
brat2*: Multi-step planning with fixed discretisation of Tasks with DEFAULT actionsbrat3*: Multi-step planning with fixed-size state split (of states ending in collision) and attention window to guide optimal obstacle avoidance when a goal is present
Demos:
sudo ./*targetless: these programs demonstrates planning over a 1m distance horizon for a control goal that is not a target location but rather an objective to drive straight for the longest time with the least amount of disturbancessudo ./*target: these program demonstrates target seeking behaviour, where the target is imaginary and located at x=1.0m, y=0m.
ctest
run make test