This is a proof-of-concept implementation of the ISRR 2019 paper A Unified Sampling-Based Approach to Integrated Task and Motion Planning.
This code is designed to be easy (relative to other research code) to install and use. To get it running, you have two options:
You can use the Dockerfile
in this repo to get a Docker image with Planet and its dependencies
installed.
To build Planet natively, follow these steps:
- Install the following dependencies (and their dependencies):
meson
luajit
- A reasonable C++17 compiler (this was built using Clang++ 10.0.0)
spdlog
cxxopts
boost
OpenBLAS
FunctionalPlus
cpptoml
fmt
sexpresso
tinyobjloader
ompl
bullet
nlopt
urdf
tinyxml2
Eigen
nlohmann_json
- Run
git clone https://github.com/wbthomason-robotics/planet && cd planet && git submodule update --init --recursive
to get this code and its dependent submodules. - Run
./build.sh {debug, debugopt, release}
to build the various configurations of theplanet
binary (look atbuild.sh
for some other options mostly useful for development). If you have the dependencies above installed, this should "just work".
You'll need to fetch the benchmark files from
http://tampbenchmark.aass.oru.se/index.php?title=Main_Page. Take a look at the lua
directory for
some example predicate semantics implementations, and replace the PDDL files with those in the
test_scenarios
directory.
In general: run ./planet <YOUR PROBLEM CONFIG.toml>
. Look at the .toml
files in this repo for
examples.
You can use ./planet --help
to see flags to control execution. In particular, -g
/--greedy
uses
best-first action selection (rather than prioritized sampling), which can lead to speedups for some
problems.
- You must annotate discrete predicates as
:discrete
, and kinematics-altering predicates (see paper for explanation) as:kinematic
. - We use LuaJit 2.0.5, which is compatible with Lua 5.1
- Your parameters to actions and predicates (and, correspondingly, their usage in preconditions and effects for actions) must be valid Lua variable names.
- Continuous (i.e. non-discrete & non-kinematic) predicates are assumed to have a Lua function definition with the same name as the predicate in your domain semantics file.
- Continuous predicate definitions can only (as of now) use the operator functions
eq
,And
,Or
,le
,ge
,lt
,gt
, and basic math operators (note that if a math operator has an overloaded operator function you need to use the overloaded version)
Planet is usable as a proof of concept. No claims are made about the quality of engineering, performance, etc. Use at your own risk.
- Remove need for
sci-lua
/generally simplify Lua dependencies. - Implement syntactic transformation for handling negation
- Profiling/rewrites for performance improvements