Pick & Place Pipeline Benchmark#
This benchmark measures KPI performance of the Pick & Place Simulation — a stationary arm pipeline where two UR5 robotic arms coordinate with a TurtleBot3 AMR on a conveyor belt using Nav2 and MoveIt2.
The ROS2 KPI toolkit automates the full experiment lifecycle: launching the simulation, waiting for it to stabilize, capturing metrics, then cleanly stopping the simulation and aggregating KPI results.
Prerequisites#
Complete the Installation Guide and ensure the Pick & Place simulation runs successfully before benchmarking.
Single Run#
picknplace-run launches picknplace warehouse.launch.py, waits 30 seconds
for the simulation to stabilize, captures GPU and resource metrics for 120
seconds, then sends SIGINT to stop the simulation cleanly.
# Basic single run
make picknplace-run
# Single run + record a KPI rosbag
make picknplace-record
Results land in monitoring_sessions/picknplace/<timestamp>/ and can be
visualized immediately:
make visualize-last
make pipeline-graph
Benchmark (Multiple Runs)#
The benchmark target runs the simulation RUNS times (each up to
PN_TIMEOUT seconds), pauses between runs, then aggregates KPI statistics.
# Default benchmark
make picknplace-benchmark
# Custom parameters
make picknplace-benchmark RUNS=5
# Re-aggregate KPIs from a completed benchmark directory
make analyze-benchmark BENCH=monitoring_sessions/picknplace/bench_20260319_164521
Parameter |
Description |
Default |
|---|---|---|
|
Number of simulation runs |
25 |
|
Max duration per run (seconds) |
300 |
|
Pause between runs (seconds) |
30 |
|
Narrow graph discovery to a specific node |
— |
Sessions are stored in monitoring_sessions/picknplace/.
What the Benchmark Script Does#
The picknplace-run script (src/picknplace_run.sh) automates:
Launches
ros2 launch picknplace warehouse.launch.pyin the background.Waits 30 seconds for the simulation to stabilize.
Starts
make monitor-gpu DURATION=120to capture GPU and resource metrics.After 120 seconds, sends
SIGINTto stop the simulation and waits for both processes to exit cleanly.
Visualization#
# Timeline, resource, and frequency plots
make visualize-last
# Full GPU dashboard (engine busy%, frequency, power)
make visualize-gpu
# Interactive node topology graph
make pipeline-graph
For a specific session:
make visualize-last ALGORITHM=picknplace
make visualize-gpu SESSION=monitoring_sessions/picknplace/bench_20260319_164521
Troubleshooting#
Problem |
Fix |
|---|---|
Simulation fails to launch |
Ensure |
No GPU data in results |
Use |
Benchmark stops early |
Increase |
MoveIt2 instability |
Run with CycloneDDS: |
Session Data Layout#
monitoring_sessions/
└── picknplace/
├── bench_20260319_164521/ # benchmark run directory
│ ├── 20260319_164521/ # individual run session
│ │ ├── session_info.txt
│ │ ├── graph_timing.csv
│ │ ├── resource_usage.log
│ │ ├── gpu_usage.log # present when GPU=1
│ │ └── visualizations/
│ └── kpi_summary.txt # aggregated KPIs across runs
└── 20260319_183913/ # standalone single run
└── ...