License¤
MIT License
Copyright (c) 2018-2026 Gramazio Kohler Research
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Third-party code, data and algorithms¤
compas_fab_native
Copyright (c) 2018-2026 Gramazio Kohler Research
Licensed under the MIT License (see LICENSE).
This repository contains code ported from, data derived from, and algorithms that closely
follow the third-party works listed below. Their licenses are in `licenses/`.
1. ur_kinematics (ROS-Industrial universal_robot)
https://github.com/ros-industrial/universal_robot/tree/indigo-devel/ur_kinematics
Copyright (c) 2013, Georgia Institute of Technology. Author: Kelsey Hawkins.
License: BSD-3-Clause (licenses/ur_kinematics-BSD-3-Clause.txt)
Used in: crates/motion_core/src/ik.rs (`offset_wrist_ik`, `offset_wrist_fk`): a Rust port
of the closed-form inverse and forward kinematics of `ur_kin.cpp`, by way of compas_fab's
`offset_wrist.py` (https://github.com/compas-dev/compas_fab, MIT License, Copyright (c)
2018-2026 Gramazio Kohler Research).
2. VAMP: Vector-Accelerated Motion Planning
https://github.com/KavrakiLab/vamp
Authors: Zachary Kingston, Wil Thomason, Clayton Ramsey and contributors (Kavraki Lab).
License: Apache-2.0 (licenses/Apache-2.0.txt)
W. Thomason, Z. Kingston, L. E. Kavraki, "Motions in Microseconds via Vectorized
Sampling-Based Planning", ICRA 2024. https://arxiv.org/abs/2309.14545
Used in:
- crates/motion_core/src/freespace.rs: RRT-Connect with dynamic domain and tree
balancing, the Halton sampler bases, and the shortcut and B-spline simplification
follow VAMP's `planning/rrtc.hh`, `planning/simplify.hh`, `random/halton.hh` and their
default settings (`rrtc_settings.hh`, `simplify_settings.hh`). Rewritten in Rust;
modified: f32 node storage per tree, multi-goal handling, no allocations per iteration.
- crates/motion_core/src/check.rs: the motion check "rake" of `planning/validate.hh`
(lanes spread over the motion, stepping back together), the sphere/cuboid test of
`collision/sphere_cuboid.hh`, link bounding spheres before link spheres, and early exit.
Rewritten in Rust on `wide` SIMD vectors.
- fixtures/vamp_panda.json, fixtures/vamp_ur5.json: kinematic trees, collision spheres
and disabled pairs converted from VAMP's `resources/panda/panda_spherized.urdf`,
`panda.srdf`, `resources/ur5/ur5_spherized.urdf` and `ur5.srdf`
(scripts/export_vamp_robot.py).
- crates/motion_bench/src/mbm.rs: VAMP's rules for turning MotionBenchMaker problems into
obstacles (`problem_dict_to_vamp`). The problems themselves are not included.
3. robowflex_resources (robot descriptions used by VAMP and MotionBenchMaker)
https://github.com/KavrakiLab/robowflex_resources
Copyright (c) 2020 Kavraki Lab.
License: MIT (licenses/robowflex_resources-MIT.txt)
Z. Kingston, L. E. Kavraki, "Robowflex: Robot motion planning with MoveIt made easy",
IROS 2022.
The robot descriptions behind fixtures/vamp_*.json. They derive in turn from:
- Franka Emika Panda description, franka_ros (https://github.com/frankaemika/franka_ros),
Apache-2.0.
- Universal Robots UR5 description, ROS-Industrial universal_robot
(https://github.com/ros-industrial/universal_robot), BSD-3-Clause and Apache-2.0.
- Robotiq 2F-85 gripper and FT300 sensor descriptions, ROS-Industrial robotiq
(https://github.com/ros-industrial/robotiq), BSD-2-Clause.
4. Cephes Mathematical Library
Stephen L. Moshier, https://www.netlib.org/cephes/
"Cephes Math Library Release 2.x", distributed freely; see the netlib readme.
Used in: crates/motion_core/src/check.rs (`sin_cos`): the single-precision polynomial
coefficients of `sinf` and `cosf` on [-pi/4, pi/4].
5. MotionBenchMaker
C. Chamzas, C. Quintero-Peña, Z. Kingston, A. Orthey, D. Rakita, M. Gleicher,
M. Toussaint, L. E. Kavraki, "MotionBenchMaker: A Tool to Generate and Benchmark Motion
Planning Datasets", IEEE RA-L 2022. https://github.com/KavrakiLab/motion_bench_maker
Copyright (c) 2021, Rice University. License: BSD-3-Clause.
The benchmark problems used in SPIKE.md and results/mbm_m3max.md (as shipped by VAMP).
They are read from a local VAMP checkout and not included here.
6. Algorithms implemented from publications (no code taken)
- crates/motion_core/src/timing.rs, path with circular blends: T. Kunz, M. Stilman,
"Time-Optimal Trajectory Generation for Path Following with Bounded Acceleration and
Velocity", Robotics: Science and Systems 2012.
- crates/motion_core/src/timing.rs, time parameterization: H. Pham, Q.-C. Pham, "A New
Approach to Time-Optimal Path Parameterization Based on Reachability Analysis", IEEE
Transactions on Robotics 34(3), 2018.
- crates/motion_core/src/freespace.rs: J. J. Kuffner, S. M. LaValle, "RRT-Connect: An
Efficient Approach to Single-Query Path Planning", ICRA 2000; dynamic domain:
A. Yershova, L. Jaillet, T. Siméon, S. M. LaValle, "Dynamic-Domain RRTs", ICRA 2005.
- crates/motion_core/src/ik.rs, spherical wrist: product of exponentials and the
Paden-Kahan subproblems (R. M. Murray, Z. Li, S. S. Sastry, "A Mathematical
Introduction to Robotic Manipulation", CRC Press 1994).
- crates/motion_core/src/numik.rs, numerical IK: Levenberg-Marquardt (K. Levenberg, "A
Method for the Solution of Certain Non-Linear Problems in Least Squares", Quarterly
of Applied Mathematics 2(2), 1944; D. W. Marquardt, "An Algorithm for Least-Squares
Estimation of Nonlinear Parameters", SIAM Journal on Applied Mathematics 11(2), 1963).
IK as one weighted least-squares problem over pose, rest-posture and collision costs
follows PyRoki: C. M. Kim, B. Yi, H. Choi, Y. Ma, K. Goldberg, A. Kanazawa, "PyRoki: A
Modular Toolkit for Robot Kinematic Optimization", IROS 2025,
https://arxiv.org/abs/2505.03728 (https://github.com/chungmin99/pyroki, MIT License,
Copyright (c) 2025 Chung Min Kim). The approach only; no PyRoki code is used (PyRoki
differentiates JAX code automatically, numik.rs writes the Jacobians out).
Rust crates compiled into the Python extension keep their own licenses; their texts are in
`licenses/THIRD_PARTY_RUST.txt` (generated with cargo-about, see `about.toml`), which wheels
ship. Python packages installed as dependencies (`pyproject.toml`) keep theirs.
The license texts are in the licenses/
folder of the repository, including those of the Rust crates compiled into the extension
(THIRD_PARTY_RUST.txt).