This repo provides functionality to build and use ROS 2 with Bazel.
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.
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. - CycloneDDS (default) and FastDDS middleware are supported.
- Zero copy transport via shared memory backend (iceoryx) for CycloneDDS.
- Utilities:
foxglove_bridge
for visualization and debuggingros2_bag
for handling rosbagsros2_lifecycle
for handling node lifecycleros2_node
for handling nodesros2_param
for handling parametersros2_service
for handling servicesros2_topic
for handling topicsxacro
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.
- 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.
For alternative approaches, see:
ApexAI/rules_ros
RobotLocomotion/drake-ros/bazel_ros2_rules
, which includes a brief analysis of this and other approaches.