OpenRave Robotics Framework
repository·master·Indexed 21 days ago
https://github.com/rdiankov/openraveA robotics framework featuring tools for motion planning, collision checking, and trajectory management. Includes documentation on optimizing planning speed via joint resolution tuning, planner parameters, and collision checking techniques, as well as integration with the Breathe Sphinx extension for Doxygen XML output. The repository also contains third-party libraries including ANN, FLANN, ConvexDecomposition, cr-libm, ivcon, PCRE, and zlib.
What's inside OpenRave
- Breathe is an extension for reStructuredText and Sphinx that enables the reading and rendering of Doxygen XML output. It allows you to bridge the gap between Doxygen-generated documentation and Sphinx-based documentation systems.
Overview of OpenRAVE capabilities
masterOpenRAVE is a simulation and analysis environment designed for testing, developing, and deploying motion planning algorithms in real-world robotics applications.
Key features include:
- Kinematic and Geometric Analysis: Focuses on simulating and analyzing information critical to motion planning.
- Standalone Integration: Its standalone architecture allows it to be integrated into existing robotics systems.
- Versatile Deployment: Provides command-line tools for robot and planner interaction, and a lightweight run-time core suitable for use within controllers or larger robotics frameworks.
- Target Use Case: Optimized for industrial robotics automation.
Overview of the ANN library
masterANN (Approximate Nearest Neighbors) is a C++ library designed for both exact and approximate nearest neighbor searching across various dimensions. Beyond searching, it serves as a testbed for:
- Generating datasets.
- Collecting and analyzing performance statistics for nearest neighbor algorithms and data structures.
- Visualizing the geometric structure of data structures.
For detailed usage, refer to the 'ANN Programming Manual' provided with the software distribution.
Overview of OpenRAVE
masterOpenRAVE is a robotics framework. For more information, visit the Official OpenRAVE Homepage.What is Convex Decomposition and why use it?
masterConvex Decomposition is the process of subdividing an arbitrarily complex triangle mesh into a collection of discrete compound pieces, where each piece is represented as a convex hull. This approximates the original shape of the object.
Use Case: Most physics engines cannot efficiently treat arbitrary triangle meshes as dynamic objects. Using raw meshes for dynamic simulations incurs significant performance and memory penalties. By breaking a complex mesh into multiple convex components, you can significantly improve performance for dynamic simulations.
How to lock the environment for thread safety
masterWhile all
Environmentmethods are multi-thread safe, methods belonging toKinBody,Robot,Controller,Planner, etc., are not thread-safe. To perform operations on these objects safely, you must lock the environment.Locking is performed using
Environment.Lock(dolock). It is recommended to use the Pythonwithstatement for scoped locking:env = Environment() # initialization code with env: # environment is now locked env.CheckCollision(...)Core concepts of OpenRAVE architecture
masterOpenRAVE is designed as a plugin-based simulation and planning framework. Instead of a monolithic codebase, it uses a distributed architecture where functionality—such as planning algorithms, robot control, and sensing subsystems—is implemented as plugins that can be dynamically loaded at run-time.
This architecture allows you to:
- Extend functionality without recompiling: Most features are offered as plugins, keeping the core simple.
- Debug components at run-time: You can debug specific components without restarting the entire system, which prevents losing the current in-memory environment state.
- Use OpenRAVE in multiple roles: It can function as a full simulation environment, a high-level scripting environment, a kinematics/dynamics backend for controllers, or a manipulation planning module in a distributed system.
- Parallelize tasks: The core supports a multi-threaded environment, allowing for easy parallelization of planners and other functions with minimal synchronization required from the user.
Configure COLLADA Robot Extensions using the OpenRAVE technique
masterOpenRAVE extends the COLLADA 1.5 specification to include robotics-specific data like manipulators, sensors, and collision data. To provide this information, use the
<extra>tag with theOpenRAVEtechnique profile.There is a one-to-one correspondence between OpenRAVE interface types and COLLADA tags:
- Robot/KinBody $\leftrightarrow$
<articulated_system> - Sensor $\leftrightarrow$
<sensor> - Manipulator $\leftrightarrow$
<manipulator>
- Robot/KinBody $\leftrightarrow$
Implement exact collision checking for trajectories
masterTo enable exact trajectory collision checking, you must implement the
DistanceCheckerBaseinterface. This implementation must return a lower bound on the $L_{\infty}$ distance between a configuration and the obstacle boundary in C-space.Once implemented, pass both your
FeasibilityCheckerBaseand yourDistanceCheckerBaseto the overloadedRampFeasibilityCheckerconstructor. When using this variant, you do not need to implementFeasibilityCheckerBase::SegmentFeasible.Use COLLADA formats for robot specification
masterOpenRAVE supports the COLLADA format for specifying robots and scenes, including robot-specific extensions.
- .dae: Raw XML files.
- .zae: Compressed XML files. Most robots in OpenRAVE are stored in this format to preserve space.
For geometric consistency, ensure you follow the project's
geometric_conventionsregarding coordinate systems and scale.Use the OpenRAVE technique for <formula> to specify partial derivatives
masterThe standard
<formula>/<technique_common>in COLLADA only supports a single equation for a joint value. To support complex kinematics with multiple degrees of freedom per joint, use theOpenRAVEtechnique. This allows you to specify partial derivatives of the position equation, which are used to compute velocities, accelerations, and Jacobians.Within a
<technique profile="OpenRAVE">block, use multiple<equation>elements:type="position": Defines the position equation in MathML.type="first_partial": Defines the first partial derivative. Requires thetargetattribute to specify the variable being differentiated.type="second_partial": Defines the second partial derivative. Requires thetargetattribute.
<technique profile="OpenRAVE"> <equation type="position"> <math> <apply> <plus/> <apply> <times/> <cn>0.333330</cn> <csymbol encoding="COLLADA">kmodel1/joint0</csymbol> </apply> <cn>0.872700</cn> </apply> </math> </equation> <equation type="first_partial" target="kmodel1/joint0"> <math> <cn>0.333330</cn> </math> </equation> </technique>Edit HTML templates
masterAll HTML templates for the website are located in the
openrave_website/templatesdirectory. The site uses Django's template language.When writing templates, follow these rules for internationalization:
- Only write English text inside
{% trans %}or{% blocktrans %}tags. - Place filenames for videos and images inside these translation blocks to allow for language-specific substitution.
- Only write English text inside