se2ez
|
se2ez is a library to support planning for kinematic trees in the plane. This library contains a set of tools for modeling and manipulating robots and robot states with the end goal of providing an efficient, modular interface for whatever robotic research goals you may have. In particular, this library is focused on supporting motion planning for general robots.
Documentation can be viewed online at https://kavrakilab.github.io/se2ez/
se2ez is split into a few high-level modules that separate different pieces of functionality. These modules so far are core
, gui
, and plan
.
The core
module in se2ez provides all the modeling tools you might expect for kinematic robots. Currently, it has the tools to load or construct a se2ez::Robot
(a kinematic tree) that is composed frames (se2ez::Frame
), each which could be actuated by a joint (se2ez::Joint
). Each frame can have multiple pieces of geometry (se2ez::Geometry
) attached to it, which can be a box, circle, or polygon. From a se2ez::Robot
, a se2ez::State
can be constructed, which represents a configuration of the kinematic tree. Forward kinematics can be done using a se2ez::State
. Inverse kinematics is provided through KDL
in variations of a se2ez::TreeIK
. Collision checking, along with signed distance computation, is provided through an se2ez::CollisionManager
. Currently, there exists an implementation using Box2D
, se2ez::Box2DCollisionManager
. Using the collision checking manager, configuration space visualization is provided in se2ez::CSpaceGrid
.
More features are coming soon (:tm:)! Many things are currently not "fully" documented, but Doxygen exists for most core classes.
The plan
module offers OMPL
constructs for motion planning using se2ez::Robot
s via the core
modules kinematics.
More features are coming soon (:tm:)! Many things are currently not documented.
The gui
modules in se2ez provide an interface to interactive visualization of a robot. The idea of the gui
system is that there exist panels
(se2ez::gui::Panel
) that are held in main window
(se2ez::gui::MainWindow
). To craft a GUI for whatever your needs, it is simple to create a main window
and add whatever panels you want. Currently, there exist the following panels:
se2ez::gui::JointPanel
, for visualizing joint states and their component frames or geometry. Additionally, collisions, signed distance, and inverse kinematics are provided for interactive positioning and diagnostics of the robot.se2ez::gui::PlanPanel
, for interactive motion planning visualization through OMPL
.se2ez::gui::CSpacePanel
, for interactive visualization of the configuration space of an existing robot.se2ez is dependent on the following libraries:
Eigen 3
or above (libeigen3-dev
)KDL 1.3
or above (liborocos-kdl-dev
)CGAL 3
or above (libcgal-dev
and libcgal-qt5-dev
)Boost 1.58
or above (libboost-all-dev
)Qt 5.9.5
or above (qtdeclarative5-dev
)Box2D
(libbox2d-dev
)You can install these all with the following command from apt
if on and Ubuntu machine:
se2ez also uses OMPL
and yaml-cpp
as git submodules. Before building, make sure the submodule is updated, either at initial clone or with:
se2ez uses cmake
. Simply run the following in the top-level directory to build the library and scripts:
If you need debugging symbols, run the following in the top-level directory:
If you need the compile flags, use the following argument:
An example of the YAML file format that describes a se2ez::Robot
is given in yaml/test.yml
, and also below:
Named states can be loaded separately.
Some example scripts are provided within the scripts/
directory. These are organized based upon the module the feature they are showcasing is from. More documentation is forthcoming.
collision.cpp
: Demonstrates how to use a se2ez::CollisionManager
.cspace.cpp
: Simple utility for generating configuration space slice images from the command-line.geometry.cpp
: Demonstration of some of the geometry operations provided for polygon processing.ik.cpp
: Demonstration of how to use the inverse kinematic solvers from se2ez::IKSolver
.robot.cpp
: Demonstration of how to construct a robot (se2ez::Robot
) in code.yaml.cpp
: Command-line utility for loading a robot and printing debug information.plan_gui.cpp
: Simple GUI for doing interactive planning.cspace_gui.cpp
: Simple GUI for visualizing configuration space slices.plan.cpp
: Demonstration of how to build a robot and then plan motions using se2ez::plan::EZPlans
.plan_yaml.cpp
: Simple command-line utility for planning for a robot loaded from YAML.plan_constraint.cpp
: Simple command-line utility for planning for a robot loaded from YAML under a YAML-loaded constraint.