Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | ros1 |
| Last Updated | 2025-05-08 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.0.0 |
README
px4_msgs
This package contains the ROS(1) message definitions of the PX4 Pro ecosystem. Building this package generates all the required interfaces to interface ROS nodes with the PX4 autopilot internals, which use the uORB messaging API. Currently the messages of this package represent a dependency to px4_ros_com package ros1 branch. The interface with PX4 is only possible using the ros1_bridge and px4_ros_com, which bridges the ROS topics with the ROS2 topics.
uORB message definitions
The uORB message definitions, which represent the counter-part of these ROS messages found in this package, can be found on the PX4 Firmware repository.
How are these messsage definitions generated?
The PX4 Firmware Jenkins-based CI/CD deploys new messages or modifications to the current definitions with each build of the master branch of the PX4 Firmware. A future improvement will also include tagging and releasing this repository according to the tags/releases of the PX4 Firmware, for a more tide coupling between the message definitions.
Install, build and usage
Check this section of the ROS tutorials in order to understand how to create and build msg and srv files. Check the RTPS/ROS2 Interface section on the PX4 Devguide for further details on how this integrates with the px4_ros_com package.
Bug tracking and feature requests
Use the Issues section to create a new issue. Report your issue or feature request here.
Questions and troubleshooting
Reach the PX4 development team on the #messaging PX4 Slack channel:
CONTRIBUTING
Contributing
Do not commit changes directly to this repository that change the message definitions. All the message definitions are directly generated from the uORB msg definitions on the PX4 Firmware repository. Any fixes or improvements one finds suitable to apply to the message definitions should be directly done on the uORB message files. The deployment of these are taken care by a Jenkins CI/CD stage.
Contributing to the PX4 Firmware repository (or to this repository, not including message definitions)
Follow the Contributing guide from the PX4 Firmware repo.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | ros1 |
| Last Updated | 2025-05-08 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.0.0 |
README
px4_msgs
This package contains the ROS(1) message definitions of the PX4 Pro ecosystem. Building this package generates all the required interfaces to interface ROS nodes with the PX4 autopilot internals, which use the uORB messaging API. Currently the messages of this package represent a dependency to px4_ros_com package ros1 branch. The interface with PX4 is only possible using the ros1_bridge and px4_ros_com, which bridges the ROS topics with the ROS2 topics.
uORB message definitions
The uORB message definitions, which represent the counter-part of these ROS messages found in this package, can be found on the PX4 Firmware repository.
How are these messsage definitions generated?
The PX4 Firmware Jenkins-based CI/CD deploys new messages or modifications to the current definitions with each build of the master branch of the PX4 Firmware. A future improvement will also include tagging and releasing this repository according to the tags/releases of the PX4 Firmware, for a more tide coupling between the message definitions.
Install, build and usage
Check this section of the ROS tutorials in order to understand how to create and build msg and srv files. Check the RTPS/ROS2 Interface section on the PX4 Devguide for further details on how this integrates with the px4_ros_com package.
Bug tracking and feature requests
Use the Issues section to create a new issue. Report your issue or feature request here.
Questions and troubleshooting
Reach the PX4 development team on the #messaging PX4 Slack channel:
CONTRIBUTING
Contributing
Do not commit changes directly to this repository that change the message definitions. All the message definitions are directly generated from the uORB msg definitions on the PX4 Firmware repository. Any fixes or improvements one finds suitable to apply to the message definitions should be directly done on the uORB message files. The deployment of these are taken care by a Jenkins CI/CD stage.
Contributing to the PX4 Firmware repository (or to this repository, not including message definitions)
Follow the Contributing guide from the PX4 Firmware repo.
Repository Summary
| Checkout URI | https://github.com/PX4/px4_msgs.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-06-12 |
| Dev Status | MAINTAINED |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| px4_msgs | 1.17.0 |
README
px4_msgs
ROS 2 message and service definitions for the PX4 Autopilot.
Overview
px4_msgs is a ROS 2 interface package: it contains only .msg and .srv definitions and the build rules that turn them into the C++/Python interfaces used by ROS 2 applications. The definitions mirror PX4’s internal uORB topics, so that a ROS 2 node can exchange them with the autopilot over the uXRCE-DDS bridge (the uxrce_dds_client running on PX4 talks to the MicroXRCEAgent running on the companion side, which publishes/subscribes these topics on the ROS 2 graph).
Because the definitions come straight from PX4, this package is the single source of truth that keeps a ROS 2 workspace ABI-compatible with a given PX4 firmware version.
Installation
From source (recommended today)
Clone the branch that matches your PX4 version (see Supported versions) into a colcon workspace and build:
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/PX4/px4_msgs.git
cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash # or humble / kilted / rolling
colcon build --packages-select px4_msgs
See Using colcon to build packages and the PX4 ROS 2 User Guide for the full workflow.
From a binary (apt)
Once the package has completed its build-farm release it is installable as a Debian package:
sudo apt install ros-${ROS_DISTRO}-px4-msgs
You can also build a .deb locally — see Building Debian packages.
Usage
After sourcing the workspace, the generated interfaces are available like any other ROS 2 message package:
#include <px4_msgs/msg/vehicle_status.hpp>
// ...
sub_ = create_subscription<px4_msgs::msg::VehicleStatus>(
"/fmu/out/vehicle_status", rclcpp::QoS(10).best_effort(),
[](px4_msgs::msg::VehicleStatus::SharedPtr msg) { /* ... */ });
from px4_msgs.msg import VehicleStatus
Note: PX4 publishes with best-effort QoS; subscribers must use a compatible QoS profile (as above) or they will not receive any data. Topic names and directions (
/fmu/out/...,/fmu/in/...) are documented in the PX4 uXRCE-DDS topic list.
Package layout
px4_msgs/
├── msg/ # message definitions (*.msg), generated from PX4 uORB
├── srv/ # service definitions (*.srv)
├── CMakeLists.txt # globs msg/ and srv/ and calls rosidl_generate_interfaces
└── package.xml # ament_cmake, format 3, member of rosidl_interface_packages
Supported versions and compatibility
px4_msgs is a pure interface package, so the definitions build on any maintained ROS 2 distribution. What ties a checkout to a firmware is the PX4 release line, not the ROS 2 distribution: each PX4 release has its own branch and main tracks PX4 main. Pick the branch that matches the PX4 version you fly, then build it on whichever ROS 2 distribution you run.
PX4 release → px4_msgs branch
| PX4 release | px4_msgs branch |
|---|---|
main (in development) |
main |
| v1.17 | release/1.17 |
| v1.16 | release/1.16 |
| v1.15 | release/1.15 |
| v1.14 | release/1.14 |
| v1.13 | release/1.13 |
ROS 2 distribution → Ubuntu
The ROS 2 distribution fixes the Ubuntu version (REP 2000). CI builds main against every maintained distribution:
| ROS 2 distribution | Ubuntu | Type | Built in CI |
|---|---|---|---|
| Humble | 22.04 (Jammy) | LTS, until 2027 | yes, native runner |
| Jazzy | 24.04 (Noble) | LTS, until 2029 | yes, native runner |
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing
Thanks for your interest in contributing to px4_msgs!
Message and service definitions are auto-generated
Do not commit changes directly to this repository that modify the message or service definitions. All *.msg and *.srv files are generated from the uORB message definitions in the PX4-Autopilot repository.
The definitions here are synchronized automatically: a CI/CD pipeline in PX4-Autopilot pushes the updated ROS message definitions to this repository whenever the upstream definitions change, and a new versioned set is published when a PX4 release is created. As a result, the main branch here is kept in sync with the main branch of PX4-Autopilot.
Any fix or improvement to a message or service definition must therefore be made on the uORB message files in PX4-Autopilot — follow the PX4 contributing guide.
Contributing to the repository infrastructure
Changes to the packaging, build system, CI, or documentation are welcome here. To contribute:
- Fork the repository and create a topic branch off
main. - Make your changes and update the
CHANGELOG.rstwhen appropriate. - Ensure the package still builds and tests pass:
colcon build --packages-select px4_msgs
colcon test --packages-select px4_msgs
- (Optional but recommended) install and run
pre-commit:
pre-commit install
pre-commit run --all-files
- Open a pull request, filling in the pull request template.
Commit conventions
Please write Conventional Commits and sign off your work under the Developer Certificate of Origin using git commit -s.
Code of Conduct
By participating, you are expected to uphold our Code of Conduct.
Release process
Releases are automated end to end:
- The upstream PX4 message-sync bot updates
main/release/**and bumps the package version. TheCreate GitHub releaseworkflow detects a newvX.Y.Zand publishes a GitHub release, with notes auto-generated from the message/service diff against the previous release byscripts/generate_release_notes.sh. - Publishing a release triggers the
Package (.deb)workflow, which builds the Debian packages for every supported ROS 2 distribution and architecture and attaches them to the release. - It also triggers the
Release to rosdistro (bloom)workflow, which opens the release pull request againstros/rosdistroso the package is built by the official ROS build farm.
The in-repo CHANGELOG.rst can be regenerated from the tag history at any time with scripts/generate_changelog.sh --in-place.
One-time setup required
These steps must be done once by a maintainer before the automation is fully operational:
- Releases use a single release repository,
PX4/px4_msgs-release. (The separatePX4/px4_msgs2-releasewas a ROS 2-only split; it has been archived in favour of the singlepx4_msgs-releaseand is not referenced by any current ROS distribution.) Seed a bloom track for each current distribution (humble,jazzy,kilted,rolling) once with an interactivebloom-releaseusingmainas the upstream devel branch, e.g.:
bloom-release --rosdistro jazzy --new-track px4_msgs
- That first run also opens the pull request that adds the
release:block forpx4_msgstoros/rosdistro(today it has onlysource:/doc:, so the package is not yet built as binaries on the farm). After the tracks and therelease:block exist, theRelease to rosdistro (bloom)workflow automates subsequent releases. - Add a
BLOOM_GITHUB_TOKENrepository secret: a token that can push toPX4/px4_msgs-releaseand open a pull request onros/rosdistro. - Add a
RELEASE_TOKENrepository secret (a PAT) so that releases created by the automation cascade into the packaging and bloom workflows. Releases created with the defaultGITHUB_TOKENdo not trigger downstream workflows.