Kallol Saha*1, Amber Li*1, Angela Rodriguez-Izquierdo*2, Lifan Yu1, Ben Eisner1, Maxim Likhachev1, David Held1
*Equal Contribution
1Robotics Institute, Carnegie Mellon University 2Princeton University
We present Search over Point Cloud Object Transformations (SPOT), a method that solves long-horizon planning tasks such as multi-object rearrangement, by searching for a sequence of transformations from an initial scene point cloud to a goal-satisfying point cloud. SPOT uses guided A* search, expanding nodes by sampling actions from learned suggesters that operate on partially observed point clouds, thus eliminating the need to discretize actions or object relationships.
This is the official repository of SPOT. If you find our work useful, please consider citing our paper:
@InProceedings{saha2025spot,
title = {Planning from Point Clouds over Continuous Actions for Multi-object Rearrangement},
author = {Saha, Kallol and Li, Amber and Rodriguez-Izquierdo, Angela and Yu, Lifan and Eisner, Ben and Likhachev, Maxim and Held, David},
booktitle = {Proceedings of The 9th Conference on Robot Learning},
year = {2025},
volume = {305},
pdf = {https://raw.githubusercontent.com/mlresearch/v305/main/assets/saha25a/saha25a.pdf},
url = {https://proceedings.mlr.press/v305/saha25a.html},
}
If you find any bugs in the code, or have any questions, feel free to raise an issue.
git clone --recursive https://github.com/kallol-saha/SPOT.git
cd SPOTWe need graphviz for visualizing graphs:
sudo apt-get install graphvizIf you cannot use sudo or do not want to visualize graphs, disable the global flag: (This is already set to FALSE by default)
# In files that use graph visualization (e.g., `spot/evaluation.py`, `scripts/real_world/plan_real_world.py`)
VISUALIZE_GRAPH = False # set to True to enable graph visualizationCreate a conda environment and activate it:
conda create -n spot python=3.9
conda activate spot
Make sure you have CUDA 11.7 installed (required by pytorch3d, torch cluster and torch geometric):
conda install -c nvidia/label/cuda-11.7.0 cuda-toolkit
Use the bash script below to install the remaining dependencies:
chmod +x install_spot.sh
sh install_spot.shLoads pre-trained models (placement suggester, object suggester, MDE), creates an A* planner, generates and evaluates a plan.
python demo.py- We collect human demonstration data in both simulation and real world environments.
- We train 3 learned modules from human demonstration data: (a) Placement suggester, (b) Object suggester, and (c) Model Deviation Estimator (MDE)
- Given a test dataset of initial point clouds, we compute plans (a sequence of transformations applied to objects) using guided A* search.
- To benchmark our method, we execute the plans found in simulation and real world environments.
For simulation data collection, we move objects with the keyboard and record the final transformations.
python scripts/collect_keyboard_demos.pyFor real world data collection, we extract 2D Tracks, from which we extract 2D transformations. See this repo
You can train each of the suggesters from scratch, or you can skip this step and use the pre-trained weights downloaded under assets and run planning and execution directly.
Trains an equivariant multi-modal transformer network (TAXPose-D) that suggests object placement poses given point cloud observations to learn placement distributions from demonstration data.
python scripts/training/train_placement_suggester.pyTrains a PointNet++ classifier model that determines which objects should be moved next during planning:
python scripts/training/train_object_suggester.pyTrains a PointNet++ model that predicts how much the environment state differs from expected after executing actions. Supports both classification and regression modes, with datasets for blocks and table bussing environments.
python scripts/training/train_mde.pyEvaluates the planning performance of SPOT across test datasets. Loads trained models, runs guided A* search-based planning on point clouds, and saves metrics including success rates, planning times, and node expansion counts.
python scripts/planning/benchmark_plans.pyExecutes the plans generated by the planner in a PyBullet simulation environment. Applies the planned object transformations sequentially using motion planning, records execution success/failure, and saves execution metrics to evaluate plan feasibility.
python scripts/planning/benchmark_sim_execution.pyWe use a Franka Panda for executing SPOT in a real world environment.
scripts/real_world/plan_real_world.py: Generates real world plans
scripts/real_world/get_plans_from_goals.py: Selects the best plan
