Open-source project
opendr-eu/opendr avatar
opendr-eu/opendr

OpenDR: a deep learning toolkit for robotics with Python, ROS and C interfaces

A modular, open and non-proprietary toolkit for core robotic functionalities by harnessing deep learning

729 stars103 forksPythonApache-2.0

At a glance

What is it?
OpenDR packages perception, control and simulation tools behind a Python interface, with ROS1, ROS2 and C entry points. It is research infrastructure with a fixed release cadence, and the repository itself is the main source of truth.
Who is it for?
OpenDR is for teams already inside a ROS1 or ROS2 stack that want ready-made perception and control nodes plus a Python package for custom work, and for researchers who need a citable toolkit with a defined toolkit review process. It is not for teams that need a fast-moving release cadence, since the last tagged release listed is v3.0.0 from December 2023, or for those who cannot commit to the documented installation routes.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 128 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap OpenDR is trying to fill between deep learning frameworks and ROS

A robotics team that wants a perception module normally assembles it from three unrelated parts: a deep learning framework such as PyTorch or TensorFlow, some glue code that converts sensor messages into tensors, and a ROS node that publishes results back onto a topic. OpenDR's stated aim is to close that gap. The README describes the project as a "modular, open and non-proprietary toolkit for core robotic functionalities" that links robotics applications to software libraries and to the operating environment, naming ROS explicitly. The target application areas listed are healthcare, agri-food and agile production, which is a narrower and more concrete scope than general-purpose robotics middleware. The audience is therefore a robotics engineer who already has a ROS graph running and needs cognition or perception blocks to attach to it, rather than someone building a robot stack from nothing.

What the toolkit actually contains: tools, interfaces and the C API boundary

The repository is organised around a tools index in docs/reference/index.md, which the README calls the main point of reference after installation. The Python package lives under src/opendr and is described as the primary interface. Alongside it sit src/c_api for performance-critical work, projects/opendr_ws for ROS1, projects/opendr_ws_2 for ROS2, and projects/c_api for C demos. The example projects are grouped into perception, control, simulation and hyperparameter tuning, with the hyperparameter tuning examples filed under projects/python/utils. Two interoperability choices stand out. OpenDR follows the ONNX model format and the OpenAI Gym interface, and the README states that the toolkit is built to support the Webots open source robot simulator. Those three commitments determine most of the practical integration work: ONNX gives you an export path out of the toolkit, Gym gives you a standard shape for reinforcement learning environments, and Webots gives you a simulation target. The README also notes that there is no hardware limitation on how many tools run at once, but that GPU memory can restrict the count in practice.

Installation routes and what the documentation commits to

The README lists three installation methods: cloning the repository, using pip, and using docker. Clone and docker are documented for both CPU and GPU; pip is listed for CPU and GPU as well. The installation page is docs/reference/installation.md, and the README points to the wiki for detailed documentation beyond it. After installation, the documented starting point is the tools index. The README does not reproduce the pip package name, the docker image tag or the exact install commands in the text available here, so anyone planning a deployment should read docs/reference/installation.md directly rather than working from the README summary. The same applies to the ROS workspaces: projects/opendr_ws and projects/opendr_ws_2 are directories in the repository, and the README treats them as ready-to-use workspaces, but it does not spell out the colcon or catkin invocation. The C interface is presented as a set of demos under projects/c_api rather than as a documented stable ABI.

Where OpenDR is the wrong tool: release cadence, scope and the C boundary

The most visible constraint is the release history. The recent releases listed are v3.0.0 from December 2023, v2.2.0 from July 2023 and v2.1.0 from February 2023. That is a slow, research-project cadence measured in months between tags, and the last push date on the default branch is later than the last release, which is normal for a project that accumulates unreleased work. If your team expects frequent tagged releases with a deprecation policy, this is not that kind of project. A second limitation is scope. OpenDR targets AI and cognition, and the README is explicit that this is the focus. It is not a general robotics framework, so if you need motion planning, drivers or a full navigation stack, the toolkit will not cover it. A third is the C interface. It is described as a C API for performance-critical applications with demos under projects/c_api, but nothing in the supplied material describes its stability guarantees or versioning, so treating it as a long-lived ABI is a risk you would be taking on without documentation. The README also directs readers to a Known Issues page at docs/reference/issues.md, which is the honest signal that individual tools have caveats that the top-level README does not enumerate.

How OpenDR differs from pulling models directly from model zoos

The obvious alternative is to skip the toolkit and take pretrained models from a model zoo, then write your own ROS wrapper. The difference in approach is the direction of the abstraction. A model zoo gives you weights and an inference script; you own the message conversion, the node lifecycle and the deployment packaging. OpenDR inverts that. It ships the ROS1 and ROS2 workspaces, the Python package and the C interface as part of the same repository, so the integration layer is the product rather than something you build. The cost of that inversion is coupling: adopting OpenDR means adopting its tool structure, its tools index and its release rhythm. The benefit is that a team already on ROS can start from projects/opendr_ws or projects/opendr_ws_2 instead of from a bare checkpoint. Whether that trade is worth it depends on how much of the toolkit you actually use. If you need one model, a direct download is less machinery. If you need several perception and control tools that share an interface, the toolkit's modularity is the reason to be here.

Licence, funding and what that means for commercial use

OpenDR is released under Apache-2.0, as stated in the README badge and the LICENSE file. Apache-2.0 is a permissive licence that includes an explicit patent grant, which matters for a toolkit that wraps deep learning models whose provenance varies. The README does not detail the licences of individual pretrained models bundled or downloaded by the tools, and that is the part of a commercial review that needs separate attention: the toolkit licence and the model licence are not the same thing. The project is funded by the European Union's Horizon 2020 research and innovation programme under grant agreement No 871449, which explains both the application-area framing (healthcare, agri-food, agile production) and the presence of a Toolkit Review Committee documented in TRC.md. That committee file is the place to look if you want to understand how tools are accepted into the toolkit, which in turn tells you something about how stable a given tool is likely to be.

Maintenance cost and what to check before you commit

The maintenance burden of adopting OpenDR is dominated by three things. First, the installation surface: three documented routes across CPU and GPU, plus separate ROS1 and ROS2 workspaces, means your CI has to pin one combination and stick to it. Second, the upgrade path between major versions. The jump from v2.2.0 to v3.0.0 is a major version bump, and the CHANGELOG.md file is the only place in the supplied material where the migration details would live. Third, the C API if you use it, because performance-critical paths written against an undocumented interface are expensive to move. A reasonable pre-adoption checklist drawn from the repository itself: read docs/reference/installation.md for your exact environment, read docs/reference/issues.md for the tools you intend to use, read CHANGELOG.md before pinning a version, and confirm that the tools you need are listed in docs/reference/index.md rather than assumed from the README's summary of perception, control and simulation.

Editorial conclusion

OpenDR is for teams already inside a ROS1 or ROS2 stack that want ready-made perception and control nodes plus a Python package for custom work, and for researchers who need a citable toolkit with a defined toolkit review process. It is not for teams that need a fast-moving release cadence, since the last tagged release listed is v3.0.0 from December 2023, or for those who cannot commit to the documented installation routes. Before adopting, verify the installation page against your exact OS, CUDA and ROS distribution, check the Known Issues page for your target tool, and confirm which tools you actually need, because the toolkit is modular and you are not obliged to install all of it.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. opendr-eu/opendr on GitHub
  4. README
  5. Releases
Community notes

Community notes