OpenRave Robotics Framework

repository·master·Indexed 21 days ago

https://github.com/rdiankov/openrave

A 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.

Tokens
28.3K
Snippets
99
Records
145
Agent score
74%

What's inside OpenRave

  1. Overview of OpenRAVE capabilities

    master

    OpenRAVE 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.
  2. Overview of the ANN library

    master

    ANN (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.

  3. What is Convex Decomposition and why use it?

    master

    Convex 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.

  4. How to lock the environment for thread safety

    master

    While all Environment methods are multi-thread safe, methods belonging to KinBody, 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 Python with statement for scoped locking:

    env = Environment()
    # initialization code
    with env:
        # environment is now locked
        env.CheckCollision(...)
  5. Core concepts of OpenRAVE architecture

    master

    OpenRAVE 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.
  6. Configure COLLADA Robot Extensions using the OpenRAVE technique

    master

    OpenRAVE 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 the OpenRAVE technique 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>
  7. Implement exact collision checking for trajectories

    master

    To enable exact trajectory collision checking, you must implement the DistanceCheckerBase interface. 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 FeasibilityCheckerBase and your DistanceCheckerBase to the overloaded RampFeasibilityChecker constructor. When using this variant, you do not need to implement FeasibilityCheckerBase::SegmentFeasible.

  8. Use COLLADA formats for robot specification

    master

    OpenRAVE 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_conventions regarding coordinate systems and scale.

  9. Use the OpenRAVE technique for <formula> to specify partial derivatives

    master

    The 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 the OpenRAVE technique. 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 the target attribute to specify the variable being differentiated.
    • type="second_partial": Defines the second partial derivative. Requires the target attribute.
    <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>
  10. Edit HTML templates

    master

    All HTML templates for the website are located in the openrave_website/templates directory. 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.