/rules_ros2

Build ROS 2 with Bazel

Primary LanguageStarlarkApache License 2.0Apache-2.0

CI

Bazel rules for ROS 2

This repo provides functionality to build and use ROS 2 with Bazel.

Prerequisites

You will need to install Bazel, see here. Besides Bazel, you will need a C++ compiler and a Python 3 interpreter.

And no, you don't have to install any ROS 2 packages via apt.

The code is developed and tested on Ubuntu 22.04 with Python 3.10.

What works?

Available features:

  • Building of C++, Python and Rust nodes.
  • C/C++/Python/Rust code generation for interfaces (messages, services and actions).
  • Defining ROS 2 deployments with ros2_launch Bazel macro.
  • Defining ROS 2 tests with ros2_test Bazel macro.
  • Defining ROS 2 plugins with ros2_plugin Bazel macro.
  • Only CycloneDDS middleware can be used at the moment.
    • Zero copy transport via shared memory backend (iceoryx) for CycloneDDS.
  • Utilities:
    • foxglove_bridge for visualization and debugging
    • ros2_bag for handling rosbags
    • ros2_lifecycle for handling node lifecycle
    • ros2_node for handling nodes
    • ros2_param for handling parameters
    • ros2_service for handling services
    • ros2_topic for handling topics
    • xacro for Xacro to URDF conversion

Please take a look at the examples folder to get started.

ROS 2 packages are by default locked to versions from release-humble-20240523.

Notes

  • Unlike ROS genmsg which refuses to generate code if the deps between interface targets are not set correctly, code generation for ROS 2 seems to not care about this. If the deps are not correctly set, you'll only see failures during compilation of the generated code.

Alternatives

For alternative approaches, see: