Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.
Repository Summary
| Checkout URI | https://github.com/tier4/agnocast.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-02-20 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| agnocast_cie_config_msgs | 2.2.0 |
| agnocast_cie_thread_configurator | 2.2.0 |
| agnocast_components | 2.2.0 |
| agnocast_e2e_test | 2.2.0 |
| agnocast_ioctl_wrapper | 2.2.0 |
| agnocast_sample_application | 2.2.0 |
| agnocast_sample_interfaces | 2.2.0 |
| agnocastlib | 2.2.0 |
| ros2agnocast | 2.2.0 |
README
ROS 2 Agnocast
An rclcpp-compatible true zero-copy IPC middleware that supports all ROS message types, including message structs already generated by rosidl.
This middleware is based on the following paper and the corresponding prototype. The paper has been accepted to IEEE ISORC 2025 (pdf).
- T. Ishikawa–Aso and S. Kato, “ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC,” in Proc. 28th Int. Symp. Real-Time Distributed Computing (ISORC), 2025, pp. 1–10.
BibTeX
```bibtex @inproceedings{ishikawa2025ros, title={ROS 2 Agnocast: Supporting Unsized Message Types for True Zero-Copy Publish/Subscribe IPC}, author={Ishikawa--Aso, Takahiro and Kato, Shinpei}, booktitle={2025 28th International Symposium on Real-Time Distributed Computing (ISORC)}, pages={01--10}, year={2025}, organization={IEEE} } ```Table of Contents
Supported Environments
Agnocast is currently available in the following environments. This reflects the current status, and support is expected to expand in the future.
| Category | Supported Versions / Notes |
|---|---|
| ROS 2 | Humble / Jazzy (only with rclcpp client library) |
| Linux Distribution | Ubuntu 22.04 (Jammy) / Ubuntu 24.04 (Noble) |
| Linux Kernel | 5.x / 6.x series (detailed version matrix not yet available) |
Warning: Agnocast service/client is not officially supported yet and the API may change in the future. Use at your own risk.
For Users
Clone the repository
Since ROS packages under src/ such as agnocastlib are not yet distributed from the ROS build farm, a source build is currently required.
Therefore, to perform the source build, first check out the specific version as follows:
git clone --branch 2.2.0 https://github.com/tier4/agnocast.git
cd agnocast
System Configuration
Agnocast uses POSIX message queues for inter-process notification. The following system parameters may need adjustment.
msg_max: Maximum number of messages per queue (Required)
Agnocast requires increasing the system limit for the maximum number of messages in a queue.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.msg_max=256
Permanent setting:
echo "fs.mqueue.msg_max=256" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
queues_max: Maximum number of message queues system-wide (Optional)
Agnocast creates a message queue for each subscriber, so the total number of message queues grows with the number of topics and subscribers. The system default for queues_max is typically 256, which may not be sufficient for large-scale deployments.
You can check the current limit with:
cat /proc/sys/fs/mqueue/queues_max
If you encounter mq_open failed: No space left on device, you may need to increase this limit.
Temporary setting (Current session only):
sudo sysctl -w fs.mqueue.queues_max=1024
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to Agnocast
Thank you for your interest in contributing to Agnocast!
Pull Request Requirements
Version Update Labels (Required)
Every pull request must have exactly one of the following labels:
-
need-major-update: User API breaking changes - requires MAJOR version update -
need-minor-update: Internal API breaking changes (heaphook/kmod/agnocastlib compatibility) - requires MINOR version update -
need-patch-update: Bug fixes and other changes - requires PATCH version update
Important notes:
- PRs without a version label or with multiple version labels will not be mergeable due to automated checks.
-
PR Title Convention: If you need
need-major-updateorneed-minor-update, please include this in the PR title as well.- Example:
fix(foo)[needs major version update]: bar - Example:
feat(baz)[needs minor version update]: qux
- Example:
-
Build Test Requirement: After receiving approval from reviewers, add the
run-build-testlabel. The PR can only be merged after the build tests pass.
Versioning Rules
Agnocast follows a modified semantic versioning scheme:
MAJOR version (need-major-update)
Increment when you make breaking changes to the User API.
Examples:
- Changing public API function signatures
- Removing or renaming user-facing APIs
- Modifying behavior that affects users of the library
MINOR version (need-minor-update)
Increment when you make breaking changes to internal APIs or component compatibility.
This includes changes that affect compatibility between:
- heaphook
- kmod
- agnocastlib
Examples:
- Removing or renaming ioctl commands
- Modifying data structures used in ioctl interfaces
- Changing shared data structures between heaphook/kmod/agnocastlib
- Breaking changes to internal APIs not exposed to end users
PATCH version (need-patch-update)
Increment for bug fixes and other changes that don’t fall into the above categories.
Examples:
- Bug fixes
- Documentation updates
- Performance improvements (without API changes)
- Refactoring (without API changes)
- Test additions or improvements
Testing Requirements
Before submitting a PR, please ensure the following tests pass:
- Autoware (required)
-
bash scripts/test/e2e_test_1to1(required) -
bash scripts/test/e2e_test_2to2(required) - kunit tests (required when modifying the kernel module)
Questions?
If you’re unsure which version label to use, feel free to ask in the PR comments or open a discussion.