Benchmarks & Profiling

Benchmarks

Results in the arxiv paper were obtained from v0.6.0.

v0.6.2 has significant changes to improve motion quality with lower motion time, lower path length, higher pose accuracy (<1mm) while taking 15ms (RTX 4090) longer to compute solutions.

v0.7 improves signed distance calculations for cuboids and meshes. Also, leverages torch.compile for better kernel fusion. These improvements result in higher quality solutions in lower time (10ms faster than arxiv report on average).

Latest Motion Generation Results

Results obtained on November 22 2024 (v0.7.6).

Motion Generation on 2600 problems from motion benchmaker and motion policy networks, on a RTX 6000 Ada:

Metric

Value

Success %

99.85

Plan Time (s)

mean: 0.039 ± 0.043 median:0.031 75%: 0.034 98%: 0.125

Motion Time(s)

mean: 1.181 ± 0.329 median:1.181 75%: 1.368 98%: 2.049

Path Length (rad.)

mean: 3.144 ± 1.015 median:3.245 75%: 3.776 98%: 5.074

Jerk

mean: 148.392 ± 63.158 median:138.790 75%: 186.254 98%: 292.364

Position Error (mm)

mean: 0.008 ± 0.089 median:0.004 75%: 0.007 98%: 0.032

Motion Benchmaker (800 problems):

Metric

Value

Success %

100.00

Plan Time (s)

mean: 0.042 ± 0.041 median:0.031 75%: 0.032 98%: 0.161

Motion Time(s)

mean: 1.361 ± 0.277 median:1.330 75%: 1.420 98%: 2.292

Path Length (rad.)

mean: 3.815 ± 0.669 median:3.667 75%: 4.218 98%: 5.295

Jerk

mean: 118.975 ± 39.765 median:121.938 75%: 144.564 98%: 197.375

Position Error (mm)

mean: 0.013 ± 0.150 median:0.004 75%: 0.007 98%: 0.048

Motion Policy Networks (1800 problems):

Metric

Value

Success %

99.78

Plan Time (s)

mean: 0.038 ± 0.045 median:0.031 75%: 0.034 98%: 0.092

Motion Time(s)

mean: 1.101 ± 0.318 median:1.066 75%: 1.301 98%: 1.884

Path Length (rad.)

mean: 2.843 ± 0.999 median:2.862 75%: 3.480 98%: 4.907

Jerk

mean: 161.566 ± 67.128 median:153.940 75%: 200.708 98%: 296.889

Position Error (mm)

mean: 0.006 ± 0.036 median:0.004 75%: 0.007 98%: 0.015

World Represented as meshes (2600 problems), python benchmark/curobo_benchmark.py --mesh:

Metric

Value

Success %

99.96

Plan Time (s)

mean: 0.063 ± 0.045 median:0.052 75%: 0.064 98%: 0.167

Motion Time(s)

mean: 1.179 ± 0.328 median:1.184 75%: 1.370 98%: 1.998

Path Length (rad.)

mean: 3.131 ± 1.011 median:3.235 75%: 3.771 98%: 5.060

Jerk

mean: 148.110 ± 62.141 median:139.333 75%: 185.350 98%: 287.974

Position Error (mm)

mean: 0.009 ± 0.113 median:0.004 75%: 0.007 98%: 0.025

Latest Inverse Kinematics Results

Results obtained on April 11 2024.

Reported errors are 98th percentile. You can run this with python benchmark/ik_benchmark.py.

robot

IK-time(ms)

Collision-Free-IK-time(ms)

Batch-Size

Success-IK

Success-Collision-Free-IK

Position-Error(mm)

Orientation-Error

Position-Error-Collision-Free-IK(mm)

Orientation-Error-Collision-Free-IK

0

franka.yml

0.0234922

0.110355

2000

99.95

99.7

0.00431221

6.96271e-06

0.00606049

6.98038e-06

1

ur5e.yml

0.0210146

0.0525328

2000

99.85

99.85

0.00425549

6.81198e-06

0.00517626

7.01627e-06

2

ur10e.yml

0.0210209

0.044765

2000

99.8

99.4

0.00373272

6.88523e-06

0.00616951

6.92548e-06

3

tm12.yml

0.021102

0.0523754

2000

99.9

99.25

0.00452017

6.97735e-06

0.00859144

7.05593e-06

4

jaco7.yml

0.0226465

0.0819137

2000

100

100

0.00271553

6.85656e-06

0.00341237

6.87208e-06

5

kinova_gen3.yml

0.0227171

0.0601847

2000

100

100

0.00268009

6.91336e-06

0.00290017

6.93216e-06

6

iiwa.yml

0.0225462

0.0478102

2000

100

100

0.00281161

6.85837e-06

0.00326498

6.89754e-06

Running Benchmarks

We use robometrics to run some of the benchmarks and also provide csv export with pandas. Install the following packages before running the benchmarks:

  1. Install robometrics with pip install "robometrics[evaluator] @ git+https://github.com/fishbotics/robometrics.git"

  2. Optionally, install pandas if you want csv files with pip install pandas

Kinematics & Collision Checking

To measure compute time for kinematics and collision checking, run the below script which will execute for all supported robots,

python benchmark/kinematics_benchmark.py --save_path=. --file_name=kinematics

This will save the results to kinematics.yml

Inverse Kinematics

To measure success metrics and compute time for inverse kinematics and collision-free inverse kinematics, run

python benchmark/ik_benchmark.py --save_path=. --file_name=ik

This will save the results to ik.yml.

Motion Generation & Geometric Planning

To run benchmarks for motion generation:

python benchmark/curobo_benchmark.py

Pass --mesh to run benchmarks with obstacles represented as meshes.

To run benchmarks for motion generation with obstacles represented using rendered depth images in nvblox:

1. Install nvblox_torch, following instructions in Using with Depth Camera. You would also need pyrender, install with pip install pyrender 2. Generate sensor images by rendering using: python benchmark/generate_nvblox_images.py 3. Run the benchmark with python benchmark/curobo_nvblox_benchmark.py

To evaluate the motions with the robometrics evaluator:

python benchmark/robometrics_benchmark.py

Passing --graph in the above commands will run the benchmarks with only geometric planning.

Profiling

For users who want to understand the computational graph and analyze compute bottlenecks, we provide scripts that run the motion generation pipeline and dump torch profiling to a json file. This file can be loaded in chrome://tracing

Before running these scripts, cd benchmark && mkdir -p log/trace,

Run python curobo_profile.py to run motion generation profiling.

Run python curobo_nvblox_profile.py to run motion generation profiling with nvblox for collision avoidance.

Run python curobo_python_profile.py to profile the code using cProfile.