Reproducing the Paper#
How to rerun the experiments of Qu et al., “An Efficient Beam Search Algorithm for Active Perception in Mobile Robotics”, IJRR 2026 (doi:10.1177/02783649261455911).
The graph benchmark reproduces the paper’s results exactly, apart from the computation times, which depend on the machine. The active perception experiments reproduce statistically, without the external FUEL baseline; the differences from the paper’s runs are listed at the end.
Graph Benchmark#
open_apero_graph_benchmark/data/ holds the paper’s eight datasets, each with five graph instances and a
reference.json of the paper’s results. The verifier reruns each dataset and compares it with reference.json:
rosrun open_apero_graph_benchmark verify_benchmark_results.py --all --parallel 4
This takes about 6 h, most of it for the two ap_50x50_* datasets; name datasets instead of --all to run a subset.
Reports go to ~/open_apero_data/graph_benchmark/verify/<dataset>/, and --help lists every flag.
If a Dataset Does Not Reproduce#
The verifier prints REPRODUCED (exact), REPRODUCED (figure-level) (some result files differ, every figure value
agrees) or MISMATCH. Ties are broken by enumeration order, so another compiler can pick a different tied path. On
MISMATCH, rebuild open_apero_core and open_apero_graph_benchmark and rerun; then rerun in the Docker image, whose
toolchain is the tested one; if it still differs, open an issue with the dataset’s report.md.
Rendering the Figures#
VERIFY=${OPEN_APERO_DATA_ROOT:-$HOME/open_apero_data}/graph_benchmark/verify
rosrun open_apero_graph_benchmark plot_final_gain_ranges.py \
$VERIFY/ap_25x25_clustered_gain_0to100_cost_50/ap_25x25_clustered_gain_0to100_cost_50
rosrun open_apero_graph_benchmark plot_computation_time_ranges.py \
$VERIFY/ap_25x25_scattered_gain_0to100_cost_50/ap_25x25_scattered_gain_0to100_cost_50
rosrun open_apero_graph_benchmark render_graph.py ap_25x25_clustered_gain_0to100_cost_50/graph_0
The first plots the range of final gains of each planner per replanning mode and objective, the second their
computation times, and the third draws a graph instance with its gains. The paper’s figures use --gain-tick 250 for
the 25×25 clustered datasets, 1000 for the 50×50 scattered ones and 500 otherwise. Figures go below
~/open_apero_data/figures/ (Run Output).
Active Perception Experiments#
Three tasks (task:=points, recon, explore) on eight HSSD scenes, ten trials per planner, scene and task: five
large scenes with a 600 s budget and three small ones with 300 s. With the workspace, the Habitat environment and
datasets.env sourced:
rosrun open_apero_ros paper_sweep.py --data-root ~/open_apero_data/paper_full
rosrun open_apero_ros compare_paper_sweep.py --data-root ~/open_apero_data/paper_full \
--output ~/open_apero_data/paper_full/report.md
The sweep’s defaults are the paper’s protocol, including its per-run wall-clock caps: 1440 runs, 2–3 days on one GPU
with three parallel lanes. Run it detached (nohup setsid or tmux); --resume continues an interrupted sweep.
compare_paper_sweep.py puts the results beside the paper’s, plot_performance_curves.py plots gain against cost per
planner, and plot_normalized_gain.py redraws the paper’s normalized-gain chart from its published numbers (scripts
README).
Known Differences from the Paper’s Runs#
Depth integration clears free space up to the camera’s planar
z = ray_lengthboundary, and the planner’s camera model ends its view at the same plane (observation_boundary: planar); the paper’s runs used a sphere of radiusray_lengthfor both. This raises reconstruction and exploration gains.DBS and NBS keep each path as a chain of steps it shares with the paths it extends, instead of a copy, and check revisits against marks on the graph. They return the paper’s paths at a lower time complexity, so planning is faster, the more so the longer the paths (Beam Search Complexity).