Compare commits

..
59 Commits
Author SHA1 Message Date
Raul Sanchez-Mateos Lizano 4310df3731 Revert "Fix 'microxrcedds_agent' name and dependency (#279) (#280)" (#283)
This reverts commit d2d97bc4a6.
2026-09-04 19:57:54 +02:00
mergify[bot]andDavid Laseca Perez d2d97bc4a6 Fix 'microxrcedds_agent' name and dependency (#279) (#280)
* Fix 'microxrcedds_agent' name and dependency



* Set tag of 'microxrcedds_agent'



---------


(cherry picked from commit 5e42d6ab6f)

Signed-off-by: David Laseca Perez <davidlaseca@eprosima.com>
Co-authored-by: David Laseca Perez <davidlaseca@eprosima.com>
2026-09-03 15:21:49 +02:00
David Laseca Perez 92c512dfad 6.1.1 2026-08-11 11:02:17 +02:00
David Laseca Perez 1cc2c1f66d Changelog
Signed-off-by: David Laseca Perez <davidlaseca@eprosima.com>
2026-08-11 10:58:23 +02:00
David-LP99 0c054f3fad Update maintainers (#275)
Signed-off-by: David Laseca Perez <davidlaseca@eprosima.com>
2026-08-11 10:51:28 +02:00
mergify[bot]andRafal Gorecki f0d809138d Update CMakeLists.txt (#247) (#263)
(cherry picked from commit 52abdf5a98)

Co-authored-by: Rafal Gorecki <126687345+rafal-gorecki@users.noreply.github.com>
2025-09-30 07:55:33 +02:00
Antón Casas e733b4b0a1 Update maintainers (#259) 2025-09-16 09:21:09 +02:00
Antón Casas 3cb79112ce 6.1.0 2025-07-10 12:10:53 +02:00
Antón Casas 7fdcd34283 Changelog
Signed-off-by: Antón Casas <antoncasas@eprosima.com>
2025-07-10 12:09:53 +02:00
Antón Casas cda8e875f6 Use target_link_libraries instead of ament_target_dependencies (#253)
Signed-off-by: Antón Casas <antoncasas@eprosima.com>
2025-06-05 15:12:24 +02:00
Antón Casas 045bd30657 Bump kilted (#252)
Signed-off-by: Antón Casas <antoncasas@eprosima.com>
2025-06-04 12:25:40 +02:00
mergify[bot]andAntón Casas cbc5bf069c Bump setup-ros and action-ros-ci (backport #249) (#250)
* Bump setup-ros and action-ros-ci (#249)

Signed-off-by: Antón Casas <antoncasas@eprosima.com>
(cherry picked from commit 0e6e8e3673)

# Conflicts:
#	.github/workflows/ci.yml

* Merge conflicts

Signed-off-by: Antón Casas <antoncasas@eprosima.com>

---------

Signed-off-by: Antón Casas <antoncasas@eprosima.com>
Co-authored-by: Antón Casas <antoncasas@eprosima.com>
2025-06-03 11:20:46 +02:00
Antón Casas dfa6221e92 Remove fastrtps_cmake_module from CMakeLists.txt (#248)
Signed-off-by: Antón Casas <antoncasas@eprosima.com>
2025-05-06 14:12:06 +02:00
Pablo Garrido 8a7b5baf1b bump Micro XRCE-DDS Agent (#245) 2025-03-18 10:42:49 +01:00
Raul Sanchez-Mateos Lizano 96a24c0fa7 Undo changes in micro-ros agent compilation (#239)
* Remove microxrcedds_agent ros dependency

Signed-off-by: Raul Sanchez-Mateos <raul@eprosima.com>

* Bring old xrceanget name back for superbuild

Signed-off-by: Raul Sanchez-Mateos <raul@eprosima.com>

---------

Signed-off-by: Raul Sanchez-Mateos <raul@eprosima.com>
2025-03-10 07:44:17 +01:00
Pablo Garrido a939d1d407 Update SuperBuild.cmake (#238) 2025-03-10 07:44:10 +01:00
Carlos Espinoza CurtoandPablo Garrido e77dca435b Bump micro-ROS-Agent to Fast DDS v3.0.1 (#237)
* Bump to Fast DDS v3

Signed-off-by: Carlosespicur <carlosespicur@proton.me>

* Fix xrce agent package name and change git tag in SuperBuild.cmake

Signed-off-by: Carlosespicur <carlosespicur@proton.me>

* Bump XRCE Agent version

---------

Signed-off-by: Carlosespicur <carlosespicur@proton.me>
Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2025-03-10 07:43:58 +01:00
Pablo Garrido 904d890366 6.0.0 2024-05-31 09:27:57 +02:00
Pablo Garrido 5edc16903c Changelog 2024-05-31 09:27:53 +02:00
Pablo Garrido dc4a428a75 Bump Micro XRCE-DDS Agent (#226) 2024-05-31 09:12:02 +02:00
Pablo Garrido 7f0af6b953 5.0.1 2024-01-29 16:26:30 +01:00
Pablo Garrido 7372bbe5bd Changelog 2024-01-29 16:26:11 +01:00
mergify[bot]andPablo Garrido a88be1bbbb Fix thread include (#216) (#218)
* Fix thread include

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Update CI

* Revert "Fix thread include"

This reverts commit 1427fb6246.

* fix

* Fix

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

---------

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit cd321caabe)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2024-01-29 16:25:39 +01:00
Antonio Cuadros 92b7343d1a Update CI branch name (#193)
Signed-off-by: acuadros95 <acuadros1995@gmail.com>
2023-06-06 11:36:34 +02:00
acuadros95 e6b928b1e1 5.0.0 2023-06-06 09:25:33 +00:00
acuadros95 4c98e4f9f5 Changelog
Signed-off-by: acuadros95 <acuadros1995@gmail.com>
2023-06-06 09:24:56 +00:00
Antonio Cuadros 964b0aec1a Add empty type key hash to GraphCache (#189)
Signed-off-by: acuadros95 <acuadros1995@gmail.com>
2023-06-06 11:11:24 +02:00
Pablo Garrido 03946126dd 4.0.2 2022-09-28 15:58:41 +02:00
Pablo Garrido 0142528a73 Changelog 2022-09-28 15:58:35 +02:00
mergify[bot]andPablo Garrido 53ff7d409d Fix Datawriter destruction (#169) (#170)
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit 4f686e8dc1)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2022-08-23 13:08:35 +02:00
mergify[bot]andcmraaron 9e9167b0d7 Synchronise predicate (#160) (#165)
* ensure synchronised access to our predicate

Signed-off-by: Aaron <aaron.lipinski@cm-robotics.com>

* release lock before signalling

Signed-off-by: Aaron <aaron.lipinski@cm-robotics.com>

Signed-off-by: Aaron <aaron.lipinski@cm-robotics.com>
(cherry picked from commit d4be840332)

Co-authored-by: cmraaron <102722879+cmraaron@users.noreply.github.com>
2022-08-19 09:27:21 +02:00
Pablo Garrido 93aa9e6a73 4.0.1 2022-06-13 07:45:38 +02:00
Pablo Garrido e62154a1cf Changelog
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
2022-06-13 07:45:07 +02:00
mergify[bot]andPablo Garrido 495733690c Fix memory leak in graph manager (#147) (#148)
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit c89776e1fd)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2022-06-08 14:21:11 +02:00
Pablo Garrido 179ae80b94 4.0.0 2022-05-25 09:10:03 +02:00
Pablo Garrido 5ad09cec70 Update changelog 2022-05-25 09:09:56 +02:00
Pablo Garrido dfd6966cd1 Update CI (#138)
* Update CI

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Fix yml

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Update

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Ensure fastrtps rmw

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Modify approach

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
2022-05-23 09:08:43 +02:00
mergify[bot]andAntonio Cuadros d91c98ab6e Add snap issue to README (#131) (#132)
(cherry picked from commit 0d4fcf8547)

Co-authored-by: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com>
2022-04-19 14:57:19 +02:00
Pablo Garrido 9ed4bb3c15 3.0.1 2022-03-25 11:15:37 +01:00
Pablo Garrido 489dbddced Update changelog
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
2022-03-25 11:15:30 +01:00
mergify[bot]andPablo Garrido ed0402c2dd Add services to graph manager (#127) (#129)
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit 6d67807737)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2022-03-22 10:26:24 +01:00
mergify[bot]andPablo Garrido 5780038fcc Add used missing includes (#116) (#124)
* Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Update CI

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit 2326a201bc)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2022-03-17 08:47:50 +01:00
mergify[bot]andAntonio Cuadros 57bdfc5463 Add system logger flag (#118) (#119)
* Add system logger flag

* Add flag to superbuild

(cherry picked from commit 90545b7184)

Co-authored-by: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com>
2022-01-27 15:35:26 +01:00
mergify[bot]andPablo Garrido 1f1b5842c6 Add condition variable include (#113) (#114)
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

Update

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit 07c460a327)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2022-01-14 08:21:30 +01:00
mergify[bot]andRoland Schwan 6d2d47490a pass system name to xrceagent (#110) (#112)
(cherry picked from commit 8aea206b93)

Co-authored-by: Roland Schwan <RSchwan@users.noreply.github.com>
2022-01-12 12:43:38 +01:00
mergify[bot]andPablo Garrido 61b1e6fc8c Fix memory leak in FastDDS datawriter (#107) (#109)
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit ff2ae91877)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-12-22 10:23:17 +01:00
Your Name d7dab5c671 3.0.0 2021-09-13 12:17:47 +02:00
Pablo Garrido e85eccb7c0 Changelog 2021-09-13 12:14:35 +02:00
Your Name ac9f09b656 1.0.1 2021-09-13 11:45:28 +02:00
Pablo Garrido 7ffd5f0bb6 Changelog 2021-09-13 11:45:14 +02:00
Pablo Garrido ceb1a1436c Remove XRCE dependency and add superbuild (#97)
Update package info


Update


Fix xrceagent paths

Update


Revert "Bump version"

This reverts commit 7b6b713041405a21d701952ef1eb2e8faab2802e.

Initial
2021-09-13 10:39:52 +02:00
mergify[bot]andmecarill c98705319f Fixed launch file by using a list for arguments. Ensures order of items is kept. (#93) (#94)
Co-authored-by: mecarill <mihkailkennerley@gmail.com>
(cherry picked from commit fe1b3ade97)

Co-authored-by: mecarill <62688286+mecarill@users.noreply.github.com>
2021-08-25 09:14:01 +02:00
Antonio Cuadros d149bb7018 Modify argument type (#91) 2021-08-23 13:52:17 +02:00
Pablo Garrido 646ca52aab Fix graph manager datawriters behaviour (#84)
* Fix graph manager datawriters


Fixes


Fix


Fix destruction

* Revert "Fix graph manager datawriters"

This reverts commit 2847a2ebc3.

* Initial
2021-07-09 13:36:31 +02:00
Pablo Garrido 95fecd77ae Graph manager: Fix participant mask for listener callbacks (#81) 2021-07-08 15:21:01 +02:00
Pablo GarridoandYour Name 69f17c28a8 Fix agent launch (#78)
Co-authored-by: Your Name <you@example.com>
2021-07-05 10:49:11 +02:00
Pablo Garrido f6a2aa3b60 Fix graph manager node namespaces (#75)
* Fix graph manager node namespaces

* Update
2021-07-02 13:28:22 +02:00
Pablo Garrido a623308505 Fix graph manager node namespaces (#72) 2021-07-02 09:44:20 +02:00
Pablo Garrido e133754746 Fix Rolling agent (#61)
* Initial

* Remove deprecated FastDDS entities methods


Remove headers

* Add conversion functions
2021-06-21 16:15:47 +02:00
17 changed files with 448 additions and 453 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ assignees: ''
- Hardware description: <!-- hardware where you are using micro-ROS --> - Hardware description: <!-- hardware where you are using micro-ROS -->
- RTOS: <!-- RTOS where you are using micro-ROS --> - RTOS: <!-- RTOS where you are using micro-ROS -->
- Installation type: <!-- micro_ros_setup, modules, etc --> - Installation type: <!-- micro_ros_setup, modules, etc -->
- Version or commit hash: <!-- version of micro-ROS used: foxy, rolling --> - Version or commit hash: <!-- version of micro-ROS used: humble, jazzy, kilted, rolling -->
#### Steps to reproduce the issue #### Steps to reproduce the issue
<!-- Detailed instructions on how to reliably reproduce this issue http://sscce.org/--> <!-- Detailed instructions on how to reliably reproduce this issue http://sscce.org/-->
+10 -11
View File
@@ -3,27 +3,27 @@ name: CI micro-ROS Agent
on: on:
pull_request: pull_request:
branches: branches:
- 'foxy' - 'kilted'
schedule: schedule:
- cron: '33 6 * * *' - cron: '33 6 * * *'
jobs: jobs:
microros_agent_ci: microros_agent_ci:
runs-on: ubuntu-20.04 runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ ubuntu-20.04 ] os: [ ubuntu-latest ]
ros_distribution: [ foxy ] ros_distribution: [ kilted ]
include: include:
- docker_image: ubuntu:20.04 - docker_image: ubuntu:24.04
ros_distribution: foxy ros_distribution: kilted
container: container:
image: ubuntu:20.04 image: ${{ matrix.docker_image }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v4
- uses: ros-tooling/setup-ros@0.3.2 - uses: ros-tooling/setup-ros@0.7.13
with: with:
use-ros2-testing: false use-ros2-testing: false
required-ros-distributions: ${{ matrix.ros_distribution }} required-ros-distributions: ${{ matrix.ros_distribution }}
@@ -31,8 +31,7 @@ jobs:
run: | run: |
apt-get install ros-${{ matrix.ros_distribution }}-micro-ros-msgs apt-get install ros-${{ matrix.ros_distribution }}-micro-ros-msgs
apt-get install ros-${{ matrix.ros_distribution }}-rmw-fastrtps-cpp apt-get install ros-${{ matrix.ros_distribution }}-rmw-fastrtps-cpp
- uses : ros-tooling/action-ros-ci@0.2.5 - uses : ros-tooling/action-ros-ci@0.4.3
with: with:
package-name: "micro_ros_agent" package-name: "micro_ros_agent"
target-ros2-distro: ${{ matrix.ros_distribution }} target-ros2-distro: ${{ matrix.ros_distribution }}
-60
View File
@@ -1,60 +0,0 @@
name: snap
on:
push:
tags:
- '*'
branches:
- foxy
pull_request:
branches:
- foxy
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
outputs:
snap-file: ${{ steps.build-snap.outputs.snap }}
strategy:
matrix:
architecture:
- linux/amd64
- linux/arm64
steps:
- uses: actions/checkout@v2
- uses: snapcore/action-build@v1
id: build-snap
with:
snapcraft-args: '--enable-experimental-extensions'
# Make sure the snap is installable
- run: |
sudo snap install --dangerous ${{ steps.build-snap.outputs.snap }}
# @todo Do some testing with the snap
- run: |
micro-ros-agent udp4
- uses: actions/upload-artifact@v3
with:
name: micro-ros-agent-snap
path: ${{ steps.build-snap.outputs.snap }}
publish:
if: github.ref == 'refs/heads/foxy' || startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: build
strategy:
matrix:
architecture:
- linux/amd64
- linux/arm64
steps:
- uses: actions/download-artifact@v3
with:
name: micro-ros-agent-snap
path: .
- uses: snapcore/action-publish@v1
with:
store_login: ${{ secrets.STORE_LOGIN }}
snap: ${{needs.build.outputs.snap-file}}
release: ${{ startsWith(github.ref, 'refs/tags/') && 'candidate' || 'edge'}}
+1 -1
View File
@@ -55,4 +55,4 @@ see the file [3rd-party-licenses.txt](3rd-party-licenses.txt).
Please notice the following issues/limitations: Please notice the following issues/limitations:
* There is an unknown issue when dealing with serial ports shared with the micro-ROS agent running inside a Docker. Sometimes it works with a remarkable packet loss. * There is an unknown issue when dealing with serial ports shared with the micro-ROS agent running inside a Docker. Sometimes it works with a remarkable packet loss.
* There is an known issues with serial port communication on micro-ros-agent snap version. It is recommended to use the dockerized version or build it from source.
+46 -11
View File
@@ -2,23 +2,58 @@
Changelog for package micro-ros_agent Changelog for package micro-ros_agent
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.5.3 (2022-06-13) 6.1.1 (2026-08-11)
------------------ ------------------
* Fix memory leak in graph manager (`#147 <https://github.com/micro-ROS/micro-ROS-Agent/issues/147>`_) (`#149 <https://github.com/micro-ROS/micro-ROS-Agent/issues/149>`_) * Update maintainers (`#275 <https://github.com/micro-ROS/micro-ROS-Agent/issues/275>`_)
* Update CMakeLists.txt (`#247 <https://github.com/micro-ROS/micro-ROS-Agent/issues/247>`_) (`#263 <https://github.com/micro-ROS/micro-ROS-Agent/issues/263>`_)
1.5.2 (2022-05-25) 6.1.0 (2025-07-10)
------------------
* Use target_link_libraries instead of ament_target_dependencies (`#253 <https://github.com/micro-ROS/micro-ROS-Agent/issues/253>`_)
* Remove fastrtps_cmake_module from CMakeLists.txt (`#248 <https://github.com/micro-ROS/micro-ROS-Agent/issues/248>`_)
* bump Micro XRCE-DDS Agent (`#245 <https://github.com/micro-ROS/micro-ROS-Agent/issues/245>`_)
* Undo changes in micro-ros agent compilation (`#239 <https://github.com/micro-ROS/micro-ROS-Agent/issues/239>`_)
* Update SuperBuild.cmake (`#238 <https://github.com/micro-ROS/micro-ROS-Agent/issues/238>`_)
* Bump micro-ROS-Agent to Fast DDS v3.0.1 (`#237 <https://github.com/micro-ROS/micro-ROS-Agent/issues/237>`_)
6.0.0 (2024-05-31)
------------------
* Bump Micro XRCE-DDS Agent (`#226 <https://github.com/micro-ROS/micro-ROS-Agent/issues/226>`_)
5.0.1 (2024-01-29)
------------------
* Fix thread include (`#216 <https://github.com/micro-ROS/micro-ROS-Agent/issues/216>`_) (`#218 <https://github.com/micro-ROS/micro-ROS-Agent/issues/218>`_)
5.0.0 (2023-06-06)
------------------
* Add empty type key hash to GraphCache (`#189 <https://github.com/micro-ROS/micro-ROS-Agent/issues/189>`_)
* Contributors: Antonio Cuadros
4.0.2 (2022-09-28)
------------------
* Fix Datawriter destruction (`#169 <https://github.com/micro-ROS/micro-ROS-Agent/issues/169>`_) (`#170 <https://github.com/micro-ROS/micro-ROS-Agent/issues/170>`_)
* Synchronise predicate (`#160 <https://github.com/micro-ROS/micro-ROS-Agent/issues/160>`_) (`#165 <https://github.com/micro-ROS/micro-ROS-Agent/issues/165>`_)
4.0.1 (2022-06-13)
------------------
* Fix memory leak in graph manager (`#147 <https://github.com/micro-ROS/micro-ROS-Agent/issues/147>`_) (`#148 <https://github.com/micro-ROS/micro-ROS-Agent/issues/148>`_)
4.0.0 (2022-05-25)
------------------ ------------------
1.5.1 (2022-03-25) 3.0.1 (2022-03-25)
------------------ ------------------
* Add services to graph manager (backport `#127 <https://github.com/micro-ROS/micro-ROS-Agent/issues/127>`_) (`#128 <https://github.com/micro-ROS/micro-ROS-Agent/issues/128>`_) * Add services to graph manager (`#127 <https://github.com/micro-ROS/micro-ROS-Agent/issues/127>`_) (`#129 <https://github.com/micro-ROS/micro-ROS-Agent/issues/129>`_)
* Add used missing includes (`#116 <https://github.com/micro-ROS/micro-ROS-Agent/issues/116>`_) * Add used missing includes (`#116 <https://github.com/micro-ROS/micro-ROS-Agent/issues/116>`_) (`#124 <https://github.com/micro-ROS/micro-ROS-Agent/issues/124>`_)
* Add system logger flag (`#118 <https://github.com/micro-ROS/micro-ROS-Agent/issues/118>`_) (`#120 <https://github.com/micro-ROS/micro-ROS-Agent/issues/120>`_) * Add system logger flag (`#118 <https://github.com/micro-ROS/micro-ROS-Agent/issues/118>`_) (`#119 <https://github.com/micro-ROS/micro-ROS-Agent/issues/119>`_)
* Add condition variable include (`#113 <https://github.com/micro-ROS/micro-ROS-Agent/issues/113>`_) (`#115 <https://github.com/micro-ROS/micro-ROS-Agent/issues/115>`_) * Add condition variable include (`#113 <https://github.com/micro-ROS/micro-ROS-Agent/issues/113>`_) (`#114 <https://github.com/micro-ROS/micro-ROS-Agent/issues/114>`_)
* pass system name to xrceagent (`#110 <https://github.com/micro-ROS/micro-ROS-Agent/issues/110>`_) (`#111 <https://github.com/micro-ROS/micro-ROS-Agent/issues/111>`_) * pass system name to xrceagent (`#110 <https://github.com/micro-ROS/micro-ROS-Agent/issues/110>`_) (`#112 <https://github.com/micro-ROS/micro-ROS-Agent/issues/112>`_)
* Fix memory leak in FastDDS datawriter (`#107 <https://github.com/micro-ROS/micro-ROS-Agent/issues/107>`_) (`#108 <https://github.com/micro-ROS/micro-ROS-Agent/issues/108>`_) * Fix memory leak in FastDDS datawriter (`#107 <https://github.com/micro-ROS/micro-ROS-Agent/issues/107>`_) (`#109 <https://github.com/micro-ROS/micro-ROS-Agent/issues/109>`_)
1.5.0 (2021-09-13) 3.0.0 (2021-09-13)
------------------
1.0.1 (2021-09-13)
------------------ ------------------
* Remove XRCE dependency and add superbuild (`#97 <https://github.com/micro-ROS/micro-ROS-Agent/issues/97>`_) * Remove XRCE dependency and add superbuild (`#97 <https://github.com/micro-ROS/micro-ROS-Agent/issues/97>`_)
* Fixed launch file by using a list for arguments. Ensures order of items is kept. (`#93 <https://github.com/micro-ROS/micro-ROS-Agent/issues/93>`_) (`#94 <https://github.com/micro-ROS/micro-ROS-Agent/issues/94>`_) * Fixed launch file by using a list for arguments. Ensures order of items is kept. (`#93 <https://github.com/micro-ROS/micro-ROS-Agent/issues/93>`_) (`#94 <https://github.com/micro-ROS/micro-ROS-Agent/issues/94>`_)
+12 -14
View File
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.11)
option(UROSAGENT_GENERATE_PROFILE option(UROSAGENT_GENERATE_PROFILE
"Generates agent.refs according to the .msgs provided in the .repos" OFF "Generates agent.refs according to the .msgs provided in the .repos" OFF
@@ -34,8 +34,7 @@ find_package(ament_cmake REQUIRED)
find_package(microxrcedds_agent REQUIRED) find_package(microxrcedds_agent REQUIRED)
find_package(rosidl_cmake REQUIRED) find_package(rosidl_cmake REQUIRED)
find_package(fastcdr REQUIRED) find_package(fastcdr REQUIRED)
find_package(fastrtps REQUIRED) find_package(fastdds REQUIRED)
find_package(fastrtps_cmake_module REQUIRED)
find_package(rmw_dds_common REQUIRED) find_package(rmw_dds_common REQUIRED)
find_package(rmw REQUIRED) find_package(rmw REQUIRED)
find_package(rcutils REQUIRED) find_package(rcutils REQUIRED)
@@ -63,22 +62,21 @@ target_include_directories(${PROJECT_NAME}
include include
) )
ament_target_dependencies(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME}
rosidl_typesupport_fastrtps_cpp ${micro_ros_msgs_TARGETS}
rosidl_runtime_cpp ${rmw_dds_common_TARGETS}
rosidl_typesupport_cpp rmw::rmw
fastcdr rmw_dds_common::rmw_dds_common_library
fastrtps rmw_fastrtps_shared_cpp::rmw_fastrtps_shared_cpp
rmw_dds_common rosidl_runtime_cpp::rosidl_runtime_cpp
rmw rosidl_typesupport_cpp::rosidl_typesupport_cpp
rmw_fastrtps_shared_cpp rosidl_typesupport_fastrtps_cpp::rosidl_typesupport_fastrtps_cpp
micro_ros_msgs
) )
target_link_libraries(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME}
microxrcedds_agent microxrcedds_agent
fastcdr fastcdr
fastrtps fastdds
$<$<BOOL:$<PLATFORM_ID:Linux>>:rt> $<$<BOOL:$<PLATFORM_ID:Linux>>:rt>
$<$<BOOL:$<PLATFORM_ID:Linux>>:dl> $<$<BOOL:$<PLATFORM_ID:Linux>>:dl>
) )
+2 -2
View File
@@ -20,13 +20,13 @@ enable_language(C)
enable_language(CXX) enable_language(CXX)
unset(xrceagent_DIR CACHE) unset(xrceagent_DIR CACHE)
find_package(xrceagent 2 EXACT QUIET) find_package(xrceagent 3 EXACT QUIET)
if(NOT xrceagent_FOUND) if(NOT xrceagent_FOUND)
ExternalProject_Add(xrceagent ExternalProject_Add(xrceagent
GIT_REPOSITORY GIT_REPOSITORY
https://github.com/eProsima/Micro-XRCE-DDS-Agent.git https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
GIT_TAG GIT_TAG
ros2 v3.0.1
PREFIX PREFIX
${PROJECT_BINARY_DIR}/agent ${PROJECT_BINARY_DIR}/agent
INSTALL_DIR INSTALL_DIR
@@ -15,28 +15,25 @@
#ifndef _UROS_AGENT_GRAPH_MANAGER_HPP #ifndef _UROS_AGENT_GRAPH_MANAGER_HPP
#define _UROS_AGENT_GRAPH_MANAGER_HPP #define _UROS_AGENT_GRAPH_MANAGER_HPP
#include "fastrtps/Domain.h" #include "fastdds/dds/topic/TopicDataType.hpp"
#include <fastrtps/TopicDataType.h> #include "fastdds/rtps/attributes/RTPSParticipantAttributes.hpp"
#include "fastrtps/attributes/ParticipantAttributes.h" #include "fastdds/rtps/participant/RTPSParticipant.hpp"
#include "fastrtps/participant/Participant.h" #include "fastdds/rtps/participant/RTPSParticipantListener.hpp"
#include "fastrtps/participant/ParticipantListener.h" #include "fastdds/rtps/RTPSDomain.hpp"
#include "fastrtps/attributes/PublisherAttributes.h"
#include "fastrtps/publisher/Publisher.h"
#include <fastrtps/publisher/PublisherListener.h>
#include <fastrtps/rtps/common/MatchingInfo.h>
#include <fastdds/dds/domain/DomainParticipant.hpp> #include <fastdds/dds/domain/DomainParticipant.hpp>
#include <fastdds/dds/domain/DomainParticipantFactory.hpp> #include <fastdds/dds/domain/DomainParticipantFactory.hpp>
#include <fastdds/dds/domain/DomainParticipantListener.hpp> #include <fastdds/dds/domain/DomainParticipantListener.hpp>
#include <fastdds/dds/domain/qos/DomainParticipantQos.hpp> #include <fastdds/dds/domain/qos/DomainParticipantQos.hpp>
#include <fastdds/dds/publisher/DataWriter.hpp> #include <fastdds/dds/publisher/DataWriter.hpp>
#include <fastdds/dds/publisher/qos/DataWriterQos.hpp>
#include <fastdds/dds/publisher/Publisher.hpp> #include <fastdds/dds/publisher/Publisher.hpp>
#include <fastdds/dds/publisher/PublisherListener.hpp>
#include <fastdds/dds/publisher/qos/DataWriterQos.hpp>
#include <fastdds/dds/subscriber/DataReader.hpp> #include <fastdds/dds/subscriber/DataReader.hpp>
#include <fastdds/dds/subscriber/DataReaderListener.hpp>
#include <fastdds/dds/subscriber/qos/DataReaderQos.hpp> #include <fastdds/dds/subscriber/qos/DataReaderQos.hpp>
#include <fastdds/dds/subscriber/SampleInfo.hpp> #include <fastdds/dds/subscriber/SampleInfo.hpp>
#include <fastdds/dds/subscriber/Subscriber.hpp> #include <fastdds/dds/subscriber/Subscriber.hpp>
#include <fastdds/dds/subscriber/DataReaderListener.hpp> #include <fastdds/rtps/common/MatchingInfo.hpp>
#include "rmw/types.h" #include "rmw/types.h"
#include "rmw/names_and_types.h" #include "rmw/names_and_types.h"
@@ -65,6 +62,7 @@
#include <string> #include <string>
#include <memory> #include <memory>
#include <map> #include <map>
#include <thread>
namespace uros { namespace uros {
namespace agent { namespace agent {
@@ -124,7 +122,7 @@ public:
* @param datawriter Pointer to the datawriter to be added. * @param datawriter Pointer to the datawriter to be added.
*/ */
void add_datawriter( void add_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid, const eprosima::fastdds::rtps::GUID_t& datawriter_guid,
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataWriter* datawriter); const eprosima::fastdds::dds::DataWriter* datawriter);
@@ -137,33 +135,18 @@ public:
* @param writer_qos QOS of the datawriter to be included into the graph tree. * @param writer_qos QOS of the datawriter to be included into the graph tree.
*/ */
void add_datawriter( void add_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid, const eprosima::fastdds::rtps::GUID_t& datawriter_guid,
const std::string& topic_name, const std::string& topic_name,
const std::string& type_name, const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid, const eprosima::fastdds::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::DataWriterQos& writer_qos); const eprosima::fastdds::dds::DataWriterQos& writer_qos);
/**
* @brief Adds a DDS datawriter to the graph tree.
* @param datawriter_guid rtps::GUID_t of the datawriter to be added.
* @param topic_name Name of the topic to which the datawriter sends information to.
* @param type_name Type name of the sent topic.
* @param participant_guid rtps::GUID_t of the participant which owns this datawriter.
* @param writer_qos QOS of the datawriter to be included into the graph tree.
*/
void add_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid,
const std::string& topic_name,
const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::WriterQos& writer_qos);
/** /**
* @brief Removes a DDS datawriter from the graph tree. * @brief Removes a DDS datawriter from the graph tree.
* @param datawriter_guid rtps::GUID_t of the datawriter to be removed. * @param datawriter_guid rtps::GUID_t of the datawriter to be removed.
*/ */
void remove_datawriter( void remove_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid); const eprosima::fastdds::rtps::GUID_t& datawriter_guid);
/** /**
* @brief Adds a DDS datareader to the graph tree. * @brief Adds a DDS datareader to the graph tree.
@@ -172,7 +155,7 @@ public:
* @param datareader Pointer to the datareader to be added. * @param datareader Pointer to the datareader to be added.
*/ */
void add_datareader( void add_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid, const eprosima::fastdds::rtps::GUID_t& datareader_guid,
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataReader* datareader); const eprosima::fastdds::dds::DataReader* datareader);
@@ -182,36 +165,21 @@ public:
* @param topic_name Name of the topic to which the datareader sends information to. * @param topic_name Name of the topic to which the datareader sends information to.
* @param type_name Type name of the sent topic. * @param type_name Type name of the sent topic.
* @param participant_guid rtps::GUID_t of the participant which owns this datareader. * @param participant_guid rtps::GUID_t of the participant which owns this datareader.
* @param writer_qos QOS of the datareader to be included into the graph tree. * @param reader_qos QOS of the datareader to be included into the graph tree.
*/ */
void add_datareader( void add_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid, const eprosima::fastdds::rtps::GUID_t& datareader_guid,
const std::string& topic_name, const std::string& topic_name,
const std::string& type_name, const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid, const eprosima::fastdds::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::DataReaderQos& reader_qos); const eprosima::fastdds::dds::DataReaderQos& reader_qos);
/**
* @brief Adds a DDS datareader to the graph tree.
* @param datareader_guid rtps::GUID_t of the datareader to be added.
* @param topic_name Name of the topic to which the datareader sends information to.
* @param type_name Type name of the sent topic.
* @param participant_guid rtps::GUID_t of the participant which owns this datareader.
* @param writer_qos QOS of the datareader to be included into the graph tree.
*/
void add_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid,
const std::string& topic_name,
const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::ReaderQos& reader_qos);
/** /**
* @brief Removes a DDS datareader from the graph tree. * @brief Removes a DDS datareader from the graph tree.
* @param datareader_guid rtps::GUID_t of the datareader to be removed. * @param datareader_guid rtps::GUID_t of the datareader to be removed.
*/ */
void remove_datareader( void remove_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid); const eprosima::fastdds::rtps::GUID_t& datareader_guid);
/** /**
* @brief Associates a certain DDS entity with a provided participant. * @brief Associates a certain DDS entity with a provided participant.
@@ -220,7 +188,7 @@ public:
* @param entity_kind Kind of the DDS entity. * @param entity_kind Kind of the DDS entity.
*/ */
void associate_entity( void associate_entity(
const eprosima::fastrtps::rtps::GUID_t& entity_guid, const eprosima::fastdds::rtps::GUID_t& entity_guid,
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
const dds::xrce::ObjectKind& entity_kind); const dds::xrce::ObjectKind& entity_kind);
@@ -241,21 +209,28 @@ private:
GraphManager* graph_manager); GraphManager* graph_manager);
private: private:
template <typename Info> template <typename DiscoveryStatus, typename Info>
void process_discovery_info( void process_discovery_info(
DiscoveryStatus reason,
const Info& proxyData); const Info& proxyData);
void on_participant_discovery( void on_participant_discovery(
eprosima::fastdds::dds::DomainParticipant* participant, eprosima::fastdds::dds::DomainParticipant* participant,
eprosima::fastrtps::rtps::ParticipantDiscoveryInfo&& info) override; eprosima::fastdds::rtps::ParticipantDiscoveryStatus reason,
const eprosima::fastdds::dds::ParticipantBuiltinTopicData& info,
bool& should_be_ignored) override;
void on_subscriber_discovery( void on_data_reader_discovery(
eprosima::fastdds::dds::DomainParticipant* /*participant*/, eprosima::fastdds::dds::DomainParticipant* participant,
eprosima::fastrtps::rtps::ReaderDiscoveryInfo&& info) override; eprosima::fastdds::rtps::ReaderDiscoveryStatus reason,
const eprosima::fastdds::dds::SubscriptionBuiltinTopicData& info,
bool& should_be_ignored) override;
void on_publisher_discovery( void on_data_writer_discovery(
eprosima::fastdds::dds::DomainParticipant* /*participant*/, eprosima::fastdds::dds::DomainParticipant* participant,
eprosima::fastrtps::rtps::WriterDiscoveryInfo&& info) override; eprosima::fastdds::rtps::WriterDiscoveryStatus reason,
const eprosima::fastdds::dds::PublicationBuiltinTopicData& info,
bool& should_be_ignored) override;
GraphManager* graphManager_from_; GraphManager* graphManager_from_;
}; };
@@ -335,7 +310,7 @@ private:
// Store a auxiliary publishers and datawriter for each participant created in micro-ROS // Store a auxiliary publishers and datawriter for each participant created in micro-ROS
std::map< std::map<
const eprosima::fastdds::dds::DomainParticipant*, const eprosima::fastdds::dds::DomainParticipant*,
std::unique_ptr<eprosima::fastdds::dds::DataWriter> eprosima::fastdds::dds::DataWriter*
> micro_ros_graph_datawriters_; > micro_ros_graph_datawriters_;
}; };
@@ -15,18 +15,16 @@
#ifndef UROS_AGENT_GRAPH_PARTICIPANTS_TYPESUPPORT_HPP_ #ifndef UROS_AGENT_GRAPH_PARTICIPANTS_TYPESUPPORT_HPP_
#define UROS_AGENT_GRAPH_PARTICIPANTS_TYPESUPPORT_HPP_ #define UROS_AGENT_GRAPH_PARTICIPANTS_TYPESUPPORT_HPP_
#include "fastrtps/Domain.h" #include "fastdds/dds/publisher/Publisher.hpp"
#include <fastrtps/TopicDataType.h> #include "fastdds/dds/topic/TopicDataType.hpp"
#include "fastrtps/attributes/ParticipantAttributes.h" #include "fastdds/rtps/attributes/RTPSParticipantAttributes.hpp"
#include "fastrtps/participant/Participant.h" #include "fastdds/rtps/participant/RTPSParticipant.hpp"
#include "fastrtps/participant/ParticipantListener.h" #include "fastdds/rtps/participant/RTPSParticipantListener.hpp"
#include "fastrtps/attributes/PublisherAttributes.h" #include "fastdds/rtps/RTPSDomain.hpp"
#include "fastrtps/publisher/Publisher.h"
#include <fastrtps/publisher/PublisherListener.h>
#include <fastrtps/rtps/common/MatchingInfo.h>
#include <fastdds/dds/domain/DomainParticipant.hpp> #include <fastdds/dds/domain/DomainParticipant.hpp>
#include <fastdds/dds/domain/qos/DomainParticipantQos.hpp> #include <fastdds/dds/domain/qos/DomainParticipantQos.hpp>
#include <fastdds/dds/publisher/PublisherListener.hpp>
#include <fastdds/rtps/common/MatchingInfo.hpp>
#include "rmw/types.h" #include "rmw/types.h"
#include "rmw/impl/cpp/key_value.hpp" #include "rmw/impl/cpp/key_value.hpp"
@@ -59,24 +57,31 @@ public:
ParticipantEntitiesInfoTypeSupport(); ParticipantEntitiesInfoTypeSupport();
virtual bool serialize( virtual bool serialize(
void* data, const void* const data,
eprosima::fastrtps::rtps::SerializedPayload_t* payload) override; eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastdds::dds::DataRepresentationId_t data_representation) override;
virtual bool deserialize( virtual bool deserialize(
eprosima::fastrtps::rtps::SerializedPayload_t* payload, eprosima::fastdds::rtps::SerializedPayload_t& payload,
void* data) override; void* data) override;
virtual std::function<uint32_t()> getSerializedSizeProvider( virtual uint32_t calculate_serialized_size(
void* data) override; const void* const data,
eprosima::fastdds::dds::DataRepresentationId_t data_representation) override;
virtual void* createData() override; virtual void* create_data() override;
virtual void deleteData(void* data) override; virtual void delete_data(void* data) override;
virtual bool getKey( virtual bool compute_key(
void* data, eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastrtps::rtps::InstanceHandle_t* handle, eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5) override; bool force_md5 = false) override;
virtual bool compute_key(
const void* const data,
eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5 = false) override;
private: private:
@@ -95,24 +100,31 @@ public:
MicrorosGraphInfoTypeSupport(); MicrorosGraphInfoTypeSupport();
virtual bool serialize( virtual bool serialize(
void* data, const void* const data,
eprosima::fastrtps::rtps::SerializedPayload_t* payload) override; eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastdds::dds::DataRepresentationId_t data_representation) override;
virtual bool deserialize( virtual bool deserialize(
eprosima::fastrtps::rtps::SerializedPayload_t* payload, eprosima::fastdds::rtps::SerializedPayload_t& payload,
void* data) override; void* data) override;
virtual std::function<uint32_t()> getSerializedSizeProvider( virtual uint32_t calculate_serialized_size(
void* data) override; const void* const data,
eprosima::fastdds::dds::DataRepresentationId_t data_representation) override;
virtual void* createData() override; virtual void* create_data() override;
virtual void deleteData(void* data) override; virtual void delete_data(void* data) override;
virtual bool getKey( virtual bool compute_key(
void* data, eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastrtps::rtps::InstanceHandle_t* handle, eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5) override; bool force_md5 = false) override;
virtual bool compute_key(
const void* const data,
eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5 = false) override;
private: private:
+3 -3
View File
@@ -2,10 +2,10 @@
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> <?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"> <package format="3">
<name>micro_ros_agent</name> <name>micro_ros_agent</name>
<version>1.5.3</version> <version>6.1.1</version>
<description>micro-ROS Agent package</description> <description>micro-ROS Agent package</description>
<maintainer email="pablogarrido@eprosima.com">Pablo Garrido</maintainer> <maintainer email="eugeniocollado@eprosima.com">Eugenio Collado</maintainer>
<maintainer email="antoniocuadros@eprosima.com">Antonio Cuadros</maintainer> <maintainer email="davidlaseca@eprosima.com">David Laseca</maintainer>
<license>Apache License 2.0</license> <license>Apache License 2.0</license>
<buildtool_depend>ament_cmake</buildtool_depend> <buildtool_depend>ament_cmake</buildtool_depend>
+27 -58
View File
@@ -79,14 +79,9 @@ bool Agent::create(
{ {
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed graph_manager_->add_datawriter(datawriter->guid(), participant, datawriter);
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle =
datawriter->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datawriter_guid =
iHandle2GUID(instance_handle);
graph_manager_->add_datawriter(datawriter_guid, participant, datawriter);
graph_manager_->associate_entity( graph_manager_->associate_entity(
datawriter_guid, participant, dds::xrce::OBJK_DATAWRITER); datawriter->guid(), participant, dds::xrce::OBJK_DATAWRITER);
}); });
xrce_dds_agent_instance_.add_middleware_callback( xrce_dds_agent_instance_.add_middleware_callback(
eprosima::uxr::Middleware::Kind::FASTDDS, eprosima::uxr::Middleware::Kind::FASTDDS,
@@ -106,12 +101,7 @@ bool Agent::create(
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed graph_manager_->remove_datawriter(datawriter->guid());
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle =
datawriter->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datawriter_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle);
graph_manager_->remove_datawriter(datawriter_guid);
}); });
xrce_dds_agent_instance_.add_middleware_callback( xrce_dds_agent_instance_.add_middleware_callback(
@@ -132,10 +122,10 @@ bool Agent::create(
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle = const eprosima::fastdds::rtps::InstanceHandle_t instance_handle =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastdds::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle); eprosima::fastdds::rtps::iHandle2GUID(instance_handle);
graph_manager_->add_datareader(datareader_guid, participant, datareader); graph_manager_->add_datareader(datareader_guid, participant, datareader);
graph_manager_->associate_entity( graph_manager_->associate_entity(
datareader_guid, participant, dds::xrce::OBJK_DATAREADER); datareader_guid, participant, dds::xrce::OBJK_DATAREADER);
@@ -158,10 +148,10 @@ bool Agent::create(
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle = const eprosima::fastdds::rtps::InstanceHandle_t instance_handle =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastdds::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle); eprosima::fastdds::rtps::iHandle2GUID(instance_handle);
graph_manager_->remove_datareader(datareader_guid); graph_manager_->remove_datareader(datareader_guid);
}); });
@@ -184,21 +174,15 @@ bool Agent::create(
{ {
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed graph_manager_->add_datawriter(datawriter->guid(), participant, datawriter);
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dw =
datawriter->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datawriter_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dw);
graph_manager_->add_datawriter(datawriter_guid, participant, datawriter);
graph_manager_->associate_entity( graph_manager_->associate_entity(
datawriter_guid, participant, dds::xrce::OBJK_DATAWRITER); datawriter->guid(), participant, dds::xrce::OBJK_DATAWRITER);
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed // TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr = const eprosima::fastdds::rtps::InstanceHandle_t instance_handle =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastdds::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr); eprosima::fastdds::rtps::iHandle2GUID(instance_handle);
graph_manager_->add_datareader(datareader_guid, participant, datareader); graph_manager_->add_datareader(datareader_guid, participant, datareader);
graph_manager_->associate_entity( graph_manager_->associate_entity(
datareader_guid, participant, dds::xrce::OBJK_DATAREADER); datareader_guid, participant, dds::xrce::OBJK_DATAREADER);
@@ -222,18 +206,13 @@ bool Agent::create(
{ {
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed graph_manager_->remove_datawriter(datawriter->guid());
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dw =
datawriter->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datawriter_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dw);
graph_manager_->remove_datawriter(datawriter_guid);
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed // TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr = const eprosima::fastdds::rtps::InstanceHandle_t instance_handle =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastdds::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr); eprosima::fastdds::rtps::iHandle2GUID(instance_handle);
graph_manager_->remove_datareader(datareader_guid); graph_manager_->remove_datareader(datareader_guid);
}); });
@@ -256,20 +235,15 @@ bool Agent::create(
{ {
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed graph_manager_->add_datawriter(datawriter->guid(), participant, datawriter);
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dw =
datawriter->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datawriter_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dw);
graph_manager_->add_datawriter(datawriter_guid, participant, datawriter);
graph_manager_->associate_entity( graph_manager_->associate_entity(
datawriter_guid, participant, dds::xrce::OBJK_DATAWRITER); datawriter->guid(), participant, dds::xrce::OBJK_DATAWRITER);
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed // TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr = const eprosima::fastdds::rtps::InstanceHandle_t instance_handle =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastdds::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr); eprosima::fastdds::rtps::iHandle2GUID(instance_handle);
graph_manager_->add_datareader(datareader_guid, participant, datareader); graph_manager_->add_datareader(datareader_guid, participant, datareader);
graph_manager_->associate_entity( graph_manager_->associate_entity(
datareader_guid, participant, dds::xrce::OBJK_DATAREADER); datareader_guid, participant, dds::xrce::OBJK_DATAREADER);
@@ -293,18 +267,13 @@ bool Agent::create(
{ {
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id()); auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed graph_manager_->remove_datawriter(datawriter->guid());
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dw =
datawriter->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datawriter_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dw);
graph_manager_->remove_datawriter(datawriter_guid);
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed // TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr = const eprosima::fastdds::rtps::InstanceHandle_t instance_handle =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastdds::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr); eprosima::fastdds::rtps::iHandle2GUID(instance_handle);
graph_manager_->remove_datareader(datareader_guid); graph_manager_->remove_datareader(datareader_guid);
}); });
@@ -16,6 +16,9 @@
#define _UROS_AGENT_GRAPH_MANAGER_CPP #define _UROS_AGENT_GRAPH_MANAGER_CPP
#include <agent/graph_manager/graph_manager.hpp> #include <agent/graph_manager/graph_manager.hpp>
#include <fastdds/dds/core/detail/DDSReturnCode.hpp>
#include <fastdds/rtps/participant/ParticipantDiscoveryInfo.hpp>
#include <fastdds/rtps/reader/ReaderDiscoveryStatus.hpp>
#include <memory> #include <memory>
#include <string> #include <string>
@@ -54,9 +57,9 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
participant_qos.name(enclave); participant_qos.name(enclave);
participant_qos.wire_protocol().builtin.readerHistoryMemoryPolicy = participant_qos.wire_protocol().builtin.readerHistoryMemoryPolicy =
eprosima::fastrtps::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE; eprosima::fastdds::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
participant_qos.wire_protocol().builtin.writerHistoryMemoryPolicy = participant_qos.wire_protocol().builtin.writerHistoryMemoryPolicy =
eprosima::fastrtps::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE; eprosima::fastdds::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
eprosima::fastdds::dds::StatusMask par_mask = eprosima::fastdds::dds::StatusMask::none(); eprosima::fastdds::dds::StatusMask par_mask = eprosima::fastdds::dds::StatusMask::none();
participant_.reset(eprosima::fastdds::dds::DomainParticipantFactory::get_instance()-> participant_.reset(eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->
@@ -91,7 +94,7 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
eprosima::fastdds::dds::HistoryQosPolicyKind::KEEP_LAST_HISTORY_QOS; eprosima::fastdds::dds::HistoryQosPolicyKind::KEEP_LAST_HISTORY_QOS;
datawriter_qos_.history().depth = 1; datawriter_qos_.history().depth = 1;
datawriter_qos_.endpoint().history_memory_policy = datawriter_qos_.endpoint().history_memory_policy =
eprosima::fastrtps::rtps::MemoryManagementPolicy::PREALLOCATED_WITH_REALLOC_MEMORY_MODE; eprosima::fastdds::rtps::MemoryManagementPolicy::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
datawriter_qos_.publish_mode().kind = datawriter_qos_.publish_mode().kind =
eprosima::fastdds::dds::PublishModeQosPolicyKind::ASYNCHRONOUS_PUBLISH_MODE; eprosima::fastdds::dds::PublishModeQosPolicyKind::ASYNCHRONOUS_PUBLISH_MODE;
datawriter_qos_.reliability().kind = datawriter_qos_.reliability().kind =
@@ -113,7 +116,7 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
eprosima::fastdds::dds::HistoryQosPolicyKind::KEEP_LAST_HISTORY_QOS; eprosima::fastdds::dds::HistoryQosPolicyKind::KEEP_LAST_HISTORY_QOS;
datareader_qos.history().depth = 1; datareader_qos.history().depth = 1;
datareader_qos.endpoint().history_memory_policy = datareader_qos.endpoint().history_memory_policy =
eprosima::fastrtps::rtps::MemoryManagementPolicy::PREALLOCATED_WITH_REALLOC_MEMORY_MODE; eprosima::fastdds::rtps::MemoryManagementPolicy::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
datareader_qos.reliability().kind = datareader_qos.reliability().kind =
eprosima::fastdds::dds::ReliabilityQosPolicyKind::RELIABLE_RELIABILITY_QOS; eprosima::fastdds::dds::ReliabilityQosPolicyKind::RELIABLE_RELIABILITY_QOS;
datareader_qos.durability().kind = datareader_qos.durability().kind =
@@ -125,9 +128,11 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
// Set graph cache on change callback function // Set graph cache on change callback function
graphCache_.set_on_change_callback([this]() graphCache_.set_on_change_callback([this]()
{
{ {
std::unique_lock<std::mutex> lock(this->mtx_); std::unique_lock<std::mutex> lock(this->mtx_);
this->graph_changed_ = true; this->graph_changed_ = true;
}
this->cv_.notify_one(); this->cv_.notify_one();
}); });
@@ -144,6 +149,7 @@ inline void GraphManager::publish_microros_graph()
{ {
return this->graph_changed_; return this->graph_changed_;
}); });
graph_changed_ = false;
} }
if (display_on_change_) if (display_on_change_)
@@ -151,7 +157,6 @@ inline void GraphManager::publish_microros_graph()
std::cout << "Updated uros Graph: graph changed" << std::endl; std::cout << "Updated uros Graph: graph changed" << std::endl;
std::cout << graphCache_ << std::endl; std::cout << graphCache_ << std::endl;
} }
graph_changed_ = false;
micro_ros_msgs::msg::Graph graph_message; micro_ros_msgs::msg::Graph graph_message;
@@ -320,11 +325,10 @@ void GraphManager::add_participant(
if (it == micro_ros_graph_datawriters_.end()) if (it == micro_ros_graph_datawriters_.end())
{ {
// Create datawriter // Create datawriter
std::unique_ptr<eprosima::fastdds::dds::DataWriter> datawriter; eprosima::fastdds::dds::DataWriter * datawriter = publisher_->create_datawriter(ros_discovery_topic_.get(), datawriter_qos_);
datawriter.reset(publisher_->create_datawriter(ros_discovery_topic_.get(), datawriter_qos_));
it = micro_ros_graph_datawriters_.insert( it = micro_ros_graph_datawriters_.insert(
std::make_pair(participant, std::move(datawriter))).first; std::make_pair(participant, datawriter)).first;
} }
it->second->write(static_cast<void *>(&info)); it->second->write(static_cast<void *>(&info));
@@ -344,12 +348,13 @@ void GraphManager::remove_participant(
rmw_dds_common::convert_gid_to_msg(&gid, &info.gid); rmw_dds_common::convert_gid_to_msg(&gid, &info.gid);
auto it = micro_ros_graph_datawriters_.find(participant); auto it = micro_ros_graph_datawriters_.find(participant);
it->second->write(static_cast<void *>(&info)); it->second->write(static_cast<void *>(&info));
} publisher_->delete_datawriter(it->second);
micro_ros_graph_datawriters_.erase(participant); micro_ros_graph_datawriters_.erase(participant);
} }
}
void GraphManager::add_datawriter( void GraphManager::add_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid, const eprosima::fastdds::rtps::GUID_t& datawriter_guid,
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataWriter* datawriter) const eprosima::fastdds::dds::DataWriter* datawriter)
{ {
@@ -360,10 +365,10 @@ void GraphManager::add_datawriter(
} }
void GraphManager::add_datawriter( void GraphManager::add_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid, const eprosima::fastdds::rtps::GUID_t& datawriter_guid,
const std::string& topic_name, const std::string& topic_name,
const std::string& type_name, const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid, const eprosima::fastdds::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::DataWriterQos& writer_qos) const eprosima::fastdds::dds::DataWriterQos& writer_qos)
{ {
const rmw_gid_t datawriter_gid = rmw_fastrtps_shared_cpp::create_rmw_gid( const rmw_gid_t datawriter_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
@@ -372,30 +377,12 @@ void GraphManager::add_datawriter(
"rmw_fastrtps_cpp", participant_guid); "rmw_fastrtps_cpp", participant_guid);
const rmw_qos_profile_t qos_profile = fastdds_qos_to_rmw_qos(writer_qos); const rmw_qos_profile_t qos_profile = fastdds_qos_to_rmw_qos(writer_qos);
graphCache_.add_entity(datawriter_gid, topic_name, graphCache_.add_entity(datawriter_gid, topic_name, type_name,
type_name, participant_gid, qos_profile, false); rosidl_get_zero_initialized_type_hash(), participant_gid, qos_profile, false);
}
void GraphManager::add_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid,
const std::string& topic_name,
const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::WriterQos& writer_qos)
{
const rmw_gid_t datawriter_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
"rmw_fastrtps_cpp", datawriter_guid);
const rmw_gid_t participant_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
"rmw_fastrtps_cpp", participant_guid);
rmw_qos_profile_t qos_profile = rmw_qos_profile_unknown;
dds_qos_to_rmw_qos(writer_qos, &qos_profile);
graphCache_.add_entity(datawriter_gid, topic_name,
type_name, participant_gid, qos_profile, false);
} }
void GraphManager::remove_datawriter( void GraphManager::remove_datawriter(
const eprosima::fastrtps::rtps::GUID_t& datawriter_guid) const eprosima::fastdds::rtps::GUID_t& datawriter_guid)
{ {
const rmw_gid_t datawriter_gid = rmw_fastrtps_shared_cpp::create_rmw_gid( const rmw_gid_t datawriter_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
"rmw_fastrtps_cpp", datawriter_guid); "rmw_fastrtps_cpp", datawriter_guid);
@@ -404,7 +391,7 @@ void GraphManager::remove_datawriter(
} }
void GraphManager::add_datareader( void GraphManager::add_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid, const eprosima::fastdds::rtps::GUID_t& datareader_guid,
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataReader* datareader) const eprosima::fastdds::dds::DataReader* datareader)
{ {
@@ -415,10 +402,10 @@ void GraphManager::add_datareader(
} }
void GraphManager::add_datareader( void GraphManager::add_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid, const eprosima::fastdds::rtps::GUID_t& datareader_guid,
const std::string& topic_name, const std::string& topic_name,
const std::string& type_name, const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid, const eprosima::fastdds::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::DataReaderQos& reader_qos) const eprosima::fastdds::dds::DataReaderQos& reader_qos)
{ {
const rmw_gid_t datareader_gid = rmw_fastrtps_shared_cpp::create_rmw_gid( const rmw_gid_t datareader_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
@@ -427,30 +414,17 @@ void GraphManager::add_datareader(
"rmw_fastrtps_cpp", participant_guid); "rmw_fastrtps_cpp", participant_guid);
const rmw_qos_profile_t qos_profile = fastdds_qos_to_rmw_qos(reader_qos); const rmw_qos_profile_t qos_profile = fastdds_qos_to_rmw_qos(reader_qos);
graphCache_.add_entity(datareader_gid, topic_name, // TODO(acuadros95): Use typesupport to calculate type hash on micro-ROS and save and get it from reader_qos.user_data.
type_name, participant_gid, qos_profile, true); // Related PRs:
} // https://github.com/ros2/rmw_dds_common/pull/70
// https://github.com/ros2/rmw_fastrtps/pull/671
void GraphManager::add_datareader( // https://github.com/ros2/rmw_fastrtps/pull/680
const eprosima::fastrtps::rtps::GUID_t& datareader_guid, graphCache_.add_entity(datareader_gid, topic_name, type_name,
const std::string& topic_name, rosidl_get_zero_initialized_type_hash(), participant_gid, qos_profile, true);
const std::string& type_name,
const eprosima::fastrtps::rtps::GUID_t& participant_guid,
const eprosima::fastdds::dds::ReaderQos& reader_qos)
{
const rmw_gid_t datareader_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
"rmw_fastrtps_cpp", datareader_guid);
const rmw_gid_t participant_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
"rmw_fastrtps_cpp", participant_guid);
rmw_qos_profile_t qos_profile = rmw_qos_profile_unknown;
dds_qos_to_rmw_qos(reader_qos, &qos_profile);
graphCache_.add_entity(datareader_gid, topic_name,
type_name, participant_gid, qos_profile, true);
} }
void GraphManager::remove_datareader( void GraphManager::remove_datareader(
const eprosima::fastrtps::rtps::GUID_t& datareader_guid) const eprosima::fastdds::rtps::GUID_t& datareader_guid)
{ {
const rmw_gid_t datareader_gid = rmw_fastrtps_shared_cpp::create_rmw_gid( const rmw_gid_t datareader_gid = rmw_fastrtps_shared_cpp::create_rmw_gid(
"rmw_fastrtps_cpp", datareader_guid); "rmw_fastrtps_cpp", datareader_guid);
@@ -459,7 +433,7 @@ void GraphManager::remove_datareader(
} }
void GraphManager::associate_entity( void GraphManager::associate_entity(
const eprosima::fastrtps::rtps::GUID_t& entity_guid, const eprosima::fastdds::rtps::GUID_t& entity_guid,
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
const dds::xrce::ObjectKind& entity_kind) const dds::xrce::ObjectKind& entity_kind)
{ {
@@ -579,9 +553,9 @@ void GraphManager::update_node_entities_info()
rmw_dds_common::msg::ParticipantEntitiesInfo entities_info; rmw_dds_common::msg::ParticipantEntitiesInfo entities_info;
eprosima::fastdds::dds::SampleInfo sample_info; eprosima::fastdds::dds::SampleInfo sample_info;
if (ros_discovery_datareader_->take_next_sample(&entities_info, &sample_info) == if (ros_discovery_datareader_->take_next_sample(&entities_info, &sample_info) ==
eprosima::fastrtps::types::ReturnCode_t::RETCODE_OK) eprosima::fastdds::dds::RETCODE_OK)
{ {
if (sample_info.instance_state == eprosima::fastdds::dds::InstanceStateKind::ALIVE) if (sample_info.instance_state == eprosima::fastdds::dds::InstanceStateKind::ALIVE_INSTANCE_STATE)
{ {
graphCache_.update_participant_entities(entities_info); graphCache_.update_participant_entities(entities_info);
} }
@@ -633,14 +607,19 @@ GraphManager::ParticipantListener::ParticipantListener(
} }
void GraphManager::ParticipantListener::on_participant_discovery( void GraphManager::ParticipantListener::on_participant_discovery(
eprosima::fastdds::dds::DomainParticipant* /* participant */, eprosima::fastdds::dds::DomainParticipant* participant,
eprosima::fastrtps::rtps::ParticipantDiscoveryInfo&& info) eprosima::fastdds::rtps::ParticipantDiscoveryStatus reason,
const eprosima::fastdds::dds::ParticipantBuiltinTopicData& info,
bool& should_be_ignored)
{ {
switch (info.status) static_cast<void>(participant);
static_cast<void>(should_be_ignored);
switch (reason)
{ {
case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::DISCOVERED_PARTICIPANT: case eprosima::fastdds::rtps::ParticipantDiscoveryStatus::DISCOVERED_PARTICIPANT:
{ {
auto map = rmw::impl::cpp::parse_key_value(info.info.m_userData); auto map = rmw::impl::cpp::parse_key_value(info.user_data);
auto name_found = map.find("enclave"); auto name_found = map.find("enclave");
if (map.end() == name_found) if (map.end() == name_found)
@@ -650,14 +629,14 @@ void GraphManager::ParticipantListener::on_participant_discovery(
const std::string enclave = const std::string enclave =
std::string(name_found->second.begin(), name_found->second.end()); std::string(name_found->second.begin(), name_found->second.end());
const rmw_gid_t gid = rmw_fastrtps_shared_cpp::create_rmw_gid("rmw_fastrtps_cpp", info.info.m_guid); const rmw_gid_t gid = rmw_fastrtps_shared_cpp::create_rmw_gid("rmw_fastrtps_cpp", info.guid);
graphManager_from_->get_graph_cache().add_participant(gid, enclave); graphManager_from_->get_graph_cache().add_participant(gid, enclave);
break; break;
} }
case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::REMOVED_PARTICIPANT: case eprosima::fastdds::rtps::ParticipantDiscoveryStatus::REMOVED_PARTICIPANT:
case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::DROPPED_PARTICIPANT: case eprosima::fastdds::rtps::ParticipantDiscoveryStatus::DROPPED_PARTICIPANT:
{ {
const rmw_gid_t gid = rmw_fastrtps_shared_cpp::create_rmw_gid("rmw_fastrtps_cpp", info.info.m_guid); const rmw_gid_t gid = rmw_fastrtps_shared_cpp::create_rmw_gid("rmw_fastrtps_cpp", info.guid);
graphManager_from_->get_graph_cache().remove_participant(gid); graphManager_from_->get_graph_cache().remove_participant(gid);
break; break;
} }
@@ -668,72 +647,134 @@ void GraphManager::ParticipantListener::on_participant_discovery(
} }
} }
static eprosima::fastdds::dds::DataWriterQos writer_qos_conversion(
const eprosima::fastdds::dds::PublicationBuiltinTopicData& writer_info)
{
eprosima::fastdds::dds::DataWriterQos datawriter_qos;
eprosima::fastdds::dds::RTPSReliableWriterQos reliable_writer_qos;
reliable_writer_qos.disable_positive_acks = writer_info.disable_positive_acks;
datawriter_qos.durability(writer_info.durability);
datawriter_qos.durability_service(writer_info.durability_service);
datawriter_qos.deadline(writer_info.deadline);
datawriter_qos.latency_budget(writer_info.latency_budget);
datawriter_qos.liveliness(writer_info.liveliness);
datawriter_qos.reliability(writer_info.reliability);
datawriter_qos.lifespan(writer_info.lifespan);
datawriter_qos.user_data(writer_info.user_data);
datawriter_qos.ownership(writer_info.ownership);
datawriter_qos.ownership_strength(writer_info.ownership_strength);
datawriter_qos.destination_order(writer_info.destination_order);
datawriter_qos.reliable_writer_qos(reliable_writer_qos);
datawriter_qos.representation(writer_info.representation);
datawriter_qos.data_sharing(writer_info.data_sharing);
return datawriter_qos;
}
static eprosima::fastdds::dds::DataReaderQos reader_qos_conversion(
const eprosima::fastdds::rtps::SubscriptionBuiltinTopicData& reader_info)
{
eprosima::fastdds::dds::DataReaderQos datareader_qos;
eprosima::fastdds::dds::RTPSReliableReaderQos reliable_reader_qos;
reliable_reader_qos.disable_positive_acks = reader_info.disable_positive_acks;
datareader_qos.durability(reader_info.durability);
datareader_qos.deadline(reader_info.deadline);
datareader_qos.latency_budget(reader_info.latency_budget);
datareader_qos.lifespan(reader_info.lifespan);
datareader_qos.liveliness(reader_info.liveliness);
datareader_qos.reliability(reader_info.reliability);
datareader_qos.ownership(reader_info.ownership);
datareader_qos.destination_order(reader_info.destination_order);
datareader_qos.user_data(reader_info.user_data);
datareader_qos.time_based_filter(reader_info.time_based_filter);
datareader_qos.type_consistency(reader_info.type_consistency);
datareader_qos.reliable_reader_qos(reliable_reader_qos);
datareader_qos.representation(reader_info.representation);
datareader_qos.data_sharing(reader_info.data_sharing);
return datareader_qos;
}
template <> template <>
void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastrtps::rtps::ReaderDiscoveryInfo>( void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastdds::rtps::ReaderDiscoveryStatus, eprosima::fastdds::rtps::SubscriptionBuiltinTopicData>(
const eprosima::fastrtps::rtps::ReaderDiscoveryInfo& reader_info) eprosima::fastdds::rtps::ReaderDiscoveryStatus reason,
const eprosima::fastdds::rtps::SubscriptionBuiltinTopicData& reader_info)
{ {
switch (reader_info.status) switch (reason)
{ {
case eprosima::fastrtps::rtps::ReaderDiscoveryInfo::CHANGED_QOS_READER: case eprosima::fastdds::rtps::ReaderDiscoveryStatus::CHANGED_QOS_READER:
{ {
return; return;
} }
case eprosima::fastrtps::rtps::ReaderDiscoveryInfo::DISCOVERED_READER: case eprosima::fastdds::rtps::ReaderDiscoveryStatus::DISCOVERED_READER:
{ {
const std::string topic_name = reader_info.info.topicName().to_string(); const std::string topic_name = reader_info.topic_name.to_string();
const std::string type_name = reader_info.info.typeName().to_string(); const std::string type_name = reader_info.type_name.to_string();
graphManager_from_->add_datareader(reader_info.info.guid(), topic_name, type_name, graphManager_from_->add_datareader(reader_info.guid, topic_name, type_name,
iHandle2GUID(reader_info.info.RTPSParticipantKey()), reader_info.info.m_qos); reader_info.participant_guid, reader_qos_conversion(reader_info));
break; break;
} }
default: default:
{ {
graphManager_from_->remove_datareader(reader_info.info.guid()); graphManager_from_->remove_datareader(reader_info.guid);
break; break;
} }
} }
} }
template <> template <>
void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastrtps::rtps::WriterDiscoveryInfo>( void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastdds::rtps::WriterDiscoveryStatus, eprosima::fastdds::rtps::PublicationBuiltinTopicData>(
const eprosima::fastrtps::rtps::WriterDiscoveryInfo& writer_info) eprosima::fastdds::rtps::WriterDiscoveryStatus reason,
const eprosima::fastdds::rtps::PublicationBuiltinTopicData& writer_info)
{ {
switch (writer_info.status) switch (reason)
{ {
case eprosima::fastrtps::rtps::WriterDiscoveryInfo::CHANGED_QOS_WRITER: case eprosima::fastdds::rtps::WriterDiscoveryStatus::CHANGED_QOS_WRITER:
{ {
return; return;
} }
case eprosima::fastrtps::rtps::WriterDiscoveryInfo::DISCOVERED_WRITER: case eprosima::fastdds::rtps::WriterDiscoveryStatus::DISCOVERED_WRITER:
{ {
const std::string topic_name = writer_info.info.topicName().to_string(); const std::string topic_name = writer_info.topic_name.to_string();
const std::string type_name = writer_info.info.typeName().to_string(); const std::string type_name = writer_info.type_name.to_string();
graphManager_from_->add_datawriter(writer_info.info.guid(), topic_name, type_name, graphManager_from_->add_datawriter(writer_info.guid, topic_name, type_name,
iHandle2GUID(writer_info.info.RTPSParticipantKey()), writer_info.info.m_qos); writer_info.participant_guid, writer_qos_conversion(writer_info));
break; break;
} }
default: default:
{ {
graphManager_from_->remove_datawriter(writer_info.info.guid()); graphManager_from_->remove_datawriter(writer_info.guid);
break; break;
} }
} }
} }
void GraphManager::ParticipantListener::on_subscriber_discovery( void GraphManager::ParticipantListener::on_data_reader_discovery(
eprosima::fastdds::dds::DomainParticipant* /*participant*/, eprosima::fastdds::dds::DomainParticipant* participant,
eprosima::fastrtps::rtps::ReaderDiscoveryInfo&& info) eprosima::fastdds::rtps::ReaderDiscoveryStatus reason,
const eprosima::fastdds::dds::SubscriptionBuiltinTopicData& info,
bool& should_be_ignored)
{ {
process_discovery_info<eprosima::fastrtps::rtps::ReaderDiscoveryInfo>(info); static_cast<void>(participant);
static_cast<void>(should_be_ignored);
process_discovery_info<eprosima::fastdds::rtps::ReaderDiscoveryStatus, eprosima::fastdds::rtps::SubscriptionBuiltinTopicData>(reason, info);
} }
void GraphManager::ParticipantListener::on_publisher_discovery( void GraphManager::ParticipantListener::on_data_writer_discovery(
eprosima::fastdds::dds::DomainParticipant* /*participant*/, eprosima::fastdds::dds::DomainParticipant* participant,
eprosima::fastrtps::rtps::WriterDiscoveryInfo&& info) eprosima::fastdds::rtps::WriterDiscoveryStatus reason,
const eprosima::fastdds::dds::PublicationBuiltinTopicData& info,
bool& should_be_ignored)
{ {
process_discovery_info<eprosima::fastrtps::rtps::WriterDiscoveryInfo>(info); static_cast<void>(participant);
static_cast<void>(should_be_ignored);
process_discovery_info<eprosima::fastdds::rtps::WriterDiscoveryStatus, eprosima::fastdds::rtps::PublicationBuiltinTopicData>(reason, info);
} }
GraphManager::DatareaderListener::DatareaderListener( GraphManager::DatareaderListener::DatareaderListener(
@@ -41,27 +41,30 @@ ParticipantEntitiesInfoTypeSupport::ParticipantEntitiesInfoTypeSupport()
ss << message_namespace << "::"; ss << message_namespace << "::";
} }
ss << "dds_::" << message_name << "_"; ss << "dds_::" << message_name << "_";
this->setName(ss.str().c_str()); this->set_name(ss.str().c_str());
bool full_bounded = true; char full_bounded;
m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); max_serialized_type_size = 4 + callbacks_->max_serialized_size(full_bounded);
} }
bool ParticipantEntitiesInfoTypeSupport::serialize( bool ParticipantEntitiesInfoTypeSupport::serialize(
void * data, const void* const data,
eprosima::fastrtps::rtps::SerializedPayload_t * payload) eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastdds::dds::DataRepresentationId_t data_representation)
{ {
eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload->data), static_cast<void>(data_representation);
payload->max_size);
eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload.data),
payload.max_size);
eprosima::fastcdr::Cdr scdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr scdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
eprosima::fastcdr::Cdr::DDS_CDR); eprosima::fastcdr::DDS_CDR);
scdr.serialize_encapsulation(); scdr.serialize_encapsulation();
if (callbacks_->cdr_serialize(data, scdr)) if (callbacks_->cdr_serialize(data, scdr))
{ {
payload->encapsulation = (scdr.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS) ? payload.encapsulation = (scdr.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS) ?
CDR_BE : CDR_LE; CDR_BE : CDR_LE;
payload->length = static_cast<uint32_t>(scdr.getSerializedDataLength()); payload.length = static_cast<uint32_t>(scdr.get_serialized_data_length());
return true; return true;
} }
else else
@@ -71,47 +74,58 @@ bool ParticipantEntitiesInfoTypeSupport::serialize(
} }
bool ParticipantEntitiesInfoTypeSupport::deserialize( bool ParticipantEntitiesInfoTypeSupport::deserialize(
eprosima::fastrtps::rtps::SerializedPayload_t * payload, eprosima::fastdds::rtps::SerializedPayload_t& payload,
void * data) void * data)
{ {
eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload->data), eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload.data),
payload->length); payload.length);
eprosima::fastcdr::Cdr dcdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr dcdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
eprosima::fastcdr::Cdr::DDS_CDR); eprosima::fastcdr::DDS_CDR);
dcdr.read_encapsulation(); dcdr.read_encapsulation();
return callbacks_->cdr_deserialize(dcdr, data); return callbacks_->cdr_deserialize(dcdr, data);
} }
std::function<uint32_t()> ParticipantEntitiesInfoTypeSupport::getSerializedSizeProvider( uint32_t ParticipantEntitiesInfoTypeSupport::calculate_serialized_size(
void * data) const void* const data,
{ eprosima::fastdds::dds::DataRepresentationId_t data_representation)
return [data, this]() -> uint32_t
{ {
static_cast<void>(data_representation);
return static_cast<uint32_t>(4 + callbacks_->get_serialized_size(data)); return static_cast<uint32_t>(4 + callbacks_->get_serialized_size(data));
};
} }
void * ParticipantEntitiesInfoTypeSupport::createData() void * ParticipantEntitiesInfoTypeSupport::create_data()
{ {
return static_cast<void *>(nullptr); return static_cast<void *>(nullptr);
} }
void ParticipantEntitiesInfoTypeSupport::deleteData( void ParticipantEntitiesInfoTypeSupport::delete_data(
void * data) void * data)
{ {
(void) data; (void) data;
} }
bool ParticipantEntitiesInfoTypeSupport::getKey( bool ParticipantEntitiesInfoTypeSupport::compute_key(
void * data, eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastrtps::rtps::InstanceHandle_t * handle, eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5) bool force_md5 /* = false */)
{
(void) payload;
(void) ihandle;
(void) force_md5;
return is_compute_key_provided;
}
bool ParticipantEntitiesInfoTypeSupport::compute_key(
const void * const data,
eprosima::fastdds::rtps::InstanceHandle_t& handle,
bool force_md5 /* = false */)
{ {
(void) data; (void) data;
(void) handle; (void) handle;
(void) force_md5; (void) force_md5;
return m_isGetKeyDefined; return is_compute_key_provided;
} }
@@ -133,27 +147,30 @@ MicrorosGraphInfoTypeSupport::MicrorosGraphInfoTypeSupport()
ss << message_namespace << "::"; ss << message_namespace << "::";
} }
ss << "dds_::" << message_name << "_"; ss << "dds_::" << message_name << "_";
this->setName(ss.str().c_str()); this->set_name(ss.str().c_str());
bool full_bounded = true; char full_bounded;
m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); max_serialized_type_size = 4 + callbacks_->max_serialized_size(full_bounded);
} }
bool MicrorosGraphInfoTypeSupport::serialize( bool MicrorosGraphInfoTypeSupport::serialize(
void * data, const void* const data,
eprosima::fastrtps::rtps::SerializedPayload_t * payload) eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastdds::dds::DataRepresentationId_t data_representation)
{ {
eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload->data), static_cast<void>(data_representation);
payload->max_size);
eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload.data),
payload.max_size);
eprosima::fastcdr::Cdr scdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr scdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
eprosima::fastcdr::Cdr::DDS_CDR); eprosima::fastcdr::DDS_CDR);
scdr.serialize_encapsulation(); scdr.serialize_encapsulation();
if (callbacks_->cdr_serialize(data, scdr)) if (callbacks_->cdr_serialize(data, scdr))
{ {
payload->encapsulation = (scdr.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS) ? payload.encapsulation = (scdr.endianness() == eprosima::fastcdr::Cdr::BIG_ENDIANNESS) ?
CDR_BE : CDR_LE; CDR_BE : CDR_LE;
payload->length = static_cast<uint32_t>(scdr.getSerializedDataLength()); payload.length = static_cast<uint32_t>(scdr.get_serialized_data_length());
return true; return true;
} }
else else
@@ -163,47 +180,58 @@ bool MicrorosGraphInfoTypeSupport::serialize(
} }
bool MicrorosGraphInfoTypeSupport::deserialize( bool MicrorosGraphInfoTypeSupport::deserialize(
eprosima::fastrtps::rtps::SerializedPayload_t * payload, eprosima::fastdds::rtps::SerializedPayload_t& payload,
void* data) void* data)
{ {
eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload->data), eprosima::fastcdr::FastBuffer fastbuffer(reinterpret_cast<char *>(payload.data),
payload->length); payload.length);
eprosima::fastcdr::Cdr dcdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN, eprosima::fastcdr::Cdr dcdr(fastbuffer, eprosima::fastcdr::Cdr::DEFAULT_ENDIAN,
eprosima::fastcdr::Cdr::DDS_CDR); eprosima::fastcdr::DDS_CDR);
dcdr.read_encapsulation(); dcdr.read_encapsulation();
return callbacks_->cdr_deserialize(dcdr, data); return callbacks_->cdr_deserialize(dcdr, data);
} }
std::function<uint32_t()> MicrorosGraphInfoTypeSupport::getSerializedSizeProvider( uint32_t MicrorosGraphInfoTypeSupport::calculate_serialized_size(
void * data) const void* const data,
{ eprosima::fastdds::dds::DataRepresentationId_t data_representation)
return [data, this]() -> uint32_t
{ {
static_cast<void>(data_representation);
return static_cast<uint32_t>(4 + callbacks_->get_serialized_size(data)); return static_cast<uint32_t>(4 + callbacks_->get_serialized_size(data));
};
} }
void * MicrorosGraphInfoTypeSupport::createData() void * MicrorosGraphInfoTypeSupport::create_data()
{ {
return static_cast<void *>(nullptr); return static_cast<void *>(nullptr);
} }
void MicrorosGraphInfoTypeSupport::deleteData( void MicrorosGraphInfoTypeSupport::delete_data(
void * data) void * data)
{ {
(void) data; (void) data;
} }
bool MicrorosGraphInfoTypeSupport::getKey( bool MicrorosGraphInfoTypeSupport::compute_key(
void * data, eprosima::fastdds::rtps::SerializedPayload_t& payload,
eprosima::fastrtps::rtps::InstanceHandle_t * handle, eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5) bool force_md5 /* = false */)
{
(void) payload;
(void) ihandle;
(void) force_md5;
return is_compute_key_provided;
}
bool MicrorosGraphInfoTypeSupport::compute_key(
const void* const data,
eprosima::fastdds::rtps::InstanceHandle_t& ihandle,
bool force_md5 /* = false */)
{ {
(void) data; (void) data;
(void) handle; (void) ihandle;
(void) force_md5; (void) force_md5;
return m_isGetKeyDefined; return is_compute_key_provided;
} }
} // namespace graph_manager } // namespace graph_manager
-19
View File
@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles" >
<transport_descriptors>
<transport_descriptor>
<transport_id>CustomUdpTransport</transport_id>
<type>UDPv4</type>
</transport_descriptor>
</transport_descriptors>
<participant profile_name="participant_profile" is_default_profile="true">
<rtps>
<userTransports>
<transport_id>CustomUdpTransport</transport_id>
</userTransports>
<useBuiltinTransports>false</useBuiltinTransports>
</rtps>
</participant>
</profiles>
+1 -1
View File
@@ -24,4 +24,4 @@ if [ -n "$p2p_port" ]; then
set -- --p2p "$p2p_port" "$@" set -- --p2p "$p2p_port" "$@"
fi fi
exec "$SNAP/opt/ros/snap/lib/micro_ros_agent/micro_ros_agent" "$transport" "$@" exec "$SNAP/lib/micro_ros_agent/micro_ros_agent" "$transport" "$@"
+38 -21
View File
@@ -4,7 +4,9 @@ version: git
summary: Bridge between Micro ROS client applications and ROS 2 summary: Bridge between Micro ROS client applications and ROS 2
description: | description: |
Micro-ROS, whose default implementation is based on eProsima's Micro-ROS, whose default implementation is based on eProsima's
Micro XRCE-DDS middleware, is composed of client applications which interact with the ROS 2 world by means of an Agent. This agent keeps tracks of the entities created by means of Micro XRCE-DDS middleware, is composed of client applications
which interact with the ROS 2 world by means of an Agent.
This agent keeps tracks of the entities created by means of
requests performed on the microcontroller side, and uses them requests performed on the microcontroller side, and uses them
to communicate with the ROS 2 dataspace. to communicate with the ROS 2 dataspace.
@@ -69,6 +71,16 @@ description: |
$ snap set micro-ros-agent device="device path" $ snap set micro-ros-agent device="device path"
If connecting the micro-ROS Agent using an IP based connection mode,
that is, `udp4`, `udp6`, `tcp4` or `tcp6`, care must be taken to
connect first the `micro-ros-agent-shm-netplug` plug.
This is due to the fact that ROS 2 Foxy is using Fast-DDS as the
default DDS middleware, and Fast-DDS comes with *shared memory transport*.
Thus, this plugin must be enabled, in order to gain access to the
`/dev/shm` folder from the snap image, prior to running it:
$ sudo snap connect micro-ros-agent:micro-ros-agent-shm-netplug
When using the snap with a serial device, some steps need to be taken When using the snap with a serial device, some steps need to be taken
in order to establish a successful connection: in order to establish a successful connection:
@@ -109,20 +121,21 @@ architectures:
- build-on: ppc64el - build-on: ppc64el
parts: parts:
uros-agent: uros-agent:
plugin: colcon plugin: colcon
source: . source: .
colcon-cmake-args: override-build: |
- -DMICROROSAGENT_SUPERBUILD=ON set +u
- --cmake-force-configure git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git -b $ROS_DISTRO
override-pull: | git clone https://github.com/eProsima/Micro-CDR.git -b $ROS_DISTRO
snapcraftctl pull git clone https://github.com/micro-ROS/micro_ros_msgs.git -b $ROS_DISTRO
git clone https://github.com/micro-ROS/rosidl_typesupport_microxrcedds.git -b $ROS_DISTRO
version="$(git describe --always --tags| sed -e 's/^v//;s/-/+git/;y/-/./')" git clone https://github.com/micro-ROS/rmw-microxrcedds.git -b $ROS_DISTRO
[ -n "$(echo $version | grep "+git")" ] && grade=devel || grade=stable git clone https://github.com/micro-ROS/micro-ROS-Agent.git -b $ROS_DISTRO
snapcraftctl set-version "$version" . /opt/ros/$ROS_DISTRO/setup.sh
snapcraftctl set-grade "$grade" colcon build --merge-install --install-base $SNAPCRAFT_PRIME --cmake-args "-DUAGENT_BUILD_EXECUTABLE=OFF -DUAGENT_USE_SYSTEM_FASTDDS=ON" --packages-up-to micro_ros_agent
set -u
build-packages: [make, gcc, g++] build-packages: [make, gcc, g++]
stage-packages: [ros-foxy-ros2launch] stage-packages: [ros-foxy-ros2launch]
@@ -130,22 +143,26 @@ parts:
plugin: dump plugin: dump
source: snap/local/ source: snap/local/
organize: organize:
'micro-ros-agent-daemon': usr/bin/ '*': usr/bin/
'fastdds_no_shared_memory.xml': usr/share/
plugs:
micro-ros-agent-shm-netplug:
interface: system-files
allow-auto-connection: true
write:
- /dev/shm
apps: apps:
micro-ros-agent: micro-ros-agent:
command: opt/ros/snap/lib/micro_ros_agent/micro_ros_agent command: lib/micro_ros_agent/micro_ros_agent
environment: environment:
FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP/lib"
plugs: [network, network-bind, serial-port] plugs: [network, network-bind, serial-port, micro-ros-agent-shm-netplug]
extensions: [ros2-foxy] extensions: [ros2-foxy]
daemon: daemon:
command: usr/bin/micro-ros-agent-daemon command: usr/bin/micro-ros-agent-daemon
environment: environment:
FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP/lib"
daemon: simple daemon: simple
plugs: [network, network-bind, serial-port] plugs: [network, network-bind, serial-port, micro-ros-agent-shm-netplug]
extensions: [ros2-foxy]