Compare commits

..
Author SHA1 Message Date
Pablo Garrido e2d5e6699e 1.5.4 2022-09-28 15:58:10 +02:00
Pablo Garrido 5c23d99726 Changelog 2022-09-28 15:58:07 +02:00
mergify[bot]andPablo Garrido 2857b2e620 Fix Datawriter destruction (#169) (#171)
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:41 +02:00
mergify[bot]andcmraaron cb0e5e4ec9 Synchronise predicate (#160) (#167)
* 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:28:19 +02:00
Antonio Cuadros 096d54a5e9 Restore Snap publish (#154) 2022-06-13 15:09:07 +02:00
Antonio Cuadros 70f9cf7ddb Fix snap arch build (#151)
* Update snapcraft CI

* Update args

* Disable destructive mode

* Disable arm64 snap arch

* Restore experimental flag

* Remove publish job
2022-06-13 08:29:21 +02:00
Pablo Garrido ccc177d276 1.5.3 2022-06-13 07:46:55 +02:00
Pablo Garrido 648081f77f Changelog
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
2022-06-13 07:46:49 +02:00
Guillaume Beuzeboc b317a906dc Fix/snap (#141)
* fix(snap): build snap using explicitly pulled dependency

* ci(snap): add snap workflow

* feat(CI): snap publication channel depending on tags

* fix(CI): push tagged snap to candidate instead of stable

* fix(snap): use MICROROSAGENT_SUPERBUILD
2022-06-08 16:23:20 +02:00
mergify[bot]andPablo Garrido 200f750a76 Fix memory leak in graph manager (#147) (#149)
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:17 +02:00
Pablo Garrido 4dd8ffe63b 1.5.2 2022-05-25 09:08:16 +02:00
Pablo Garrido 375bf3e674 Update changelog 2022-05-25 09:07:52 +02:00
1325442eb5 Update CI (backport #135) (#139)
* Humble release (#135)

* Modify CI

* Update

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

* Update

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

* Update .github/workflows/ci.yml

* Update .github/workflows/ci.yml

* Modify CI

* Update to ubuntu latest

* Use pre-release repository

* Use ubuntu-20.04

* Fix

* Revert changes

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
(cherry picked from commit b0ebf5ab3f)

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

* Update with foxy

* Update .github/workflows/ci.yml

Co-authored-by: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com>
Co-authored-by: acuadros95 <acuadros1995@gmail.com>
2022-05-23 07:57:01 +02:00
mergify[bot]andAntonio Cuadros b17a6ef959 Add snap issue to README (#131) (#133)
(cherry picked from commit 0d4fcf8547)

Co-authored-by: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com>
2022-04-19 15:11:36 +02:00
Pablo Garrido fd5d6adc00 1.5.1 2022-03-25 11:14:32 +01:00
Pablo Garrido 1904c562ef Update changelog
Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
2022-03-25 11:14:09 +01:00
mergify[bot]andPablo Garrido 726692af04 Add services to graph manager (backport #127) (#128)
* Add services to graph manager (#127)

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

* Revert "Add services to graph manager (#127)"

This reverts commit 3738c3b121.

* Fix incompatibilities

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

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2022-03-22 10:35:14 +01:00
Pablo Garrido 2326a201bc Add used missing includes (#116)
* Signed-off-by: Pablo Garrido <pablogs9@gmail.com>

* Update CI

Signed-off-by: Pablo Garrido <pablogs9@gmail.com>
2022-03-17 08:36:50 +01:00
mergify[bot]andAntonio Cuadros 5b566f7b4f Add system logger flag (#118) (#120)
* 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:46 +01:00
mergify[bot]andPablo Garrido 0af992145e Add condition variable include (#113) (#115)
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:25 +01:00
mergify[bot]andRoland Schwan f9e6daf6bf pass system name to xrceagent (#110) (#111)
(cherry picked from commit 8aea206b93)

Co-authored-by: Roland Schwan <RSchwan@users.noreply.github.com>
2022-01-12 12:43:21 +01:00
mergify[bot]andPablo Garrido e356e14e84 Fix memory leak in FastDDS datawriter (#107) (#108)
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:20 +01:00
Your Name 37885214e1 1.5.0 2021-09-13 14:14:06 +02:00
Pablo Garrido 820bcdb5f6 changelog 2021-09-13 14:13:51 +02:00
mergify[bot]andPablo Garrido fd5bc39536 Remove XRCE dependency and add superbuild (#97) (#99)
Update package info

Update

Fix xrceagent paths

Update

Revert "Bump version"

This reverts commit 7b6b713041405a21d701952ef1eb2e8faab2802e.

Initial

(cherry picked from commit ceb1a1436c)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-09-13 10:49:08 +02:00
mecarillandmecarill fe1b3ade97 Fixed launch file by using a list for arguments. Ensures order of items is kept. (#93)
Co-authored-by: mecarill <mihkailkennerley@gmail.com>
2021-08-25 08:55:11 +02:00
mergify[bot]andPablo Garrido 7f3f560bc7 Fix graph manager datawriters behaviour (#84) (#86)
* Fix graph manager datawriters

Fixes

Fix

Fix destruction

* Revert "Fix graph manager datawriters"

This reverts commit 2847a2ebc3.

* Initial

(cherry picked from commit 646ca52aab)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-07-09 13:41:52 +02:00
mergify[bot]andPablo Garrido 80916d4949 Graph manager: Fix participant mask for listener callbacks (#81) (#83)
(cherry picked from commit 95fecd77ae)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-07-08 15:33:20 +02:00
mergify[bot]andPablo Garrido d1e851ba4e Fix agent launch (#78) (#79)
Co-authored-by: Your Name <you@example.com>
(cherry picked from commit 69f17c28a8)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-07-05 10:56:24 +02:00
mergify[bot]andPablo Garrido 6047f7135d Fix graph manager node namespaces (#75) (#76)
* Fix graph manager node namespaces

* Update

(cherry picked from commit f6a2aa3b60)

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-07-02 13:42:03 +02:00
mergify[bot]andPablo Garrido 9d3fbc63a0 Fix graph manager node namespaces (backport #72) (#73)
* Fix graph manager node namespaces (#72)

(cherry picked from commit a623308505)

# Conflicts:
#	micro_ros_agent/src/agent/graph_manager/graph_manager.cpp

* Update graph_manager.cpp

Co-authored-by: Pablo Garrido <pablogs9@gmail.com>
2021-07-02 09:51:40 +02:00
19 changed files with 584 additions and 393 deletions
+29 -29
View File
@@ -2,37 +2,37 @@ name: CI micro-ROS Agent
on: on:
pull_request: pull_request:
branches: branches:
- '**' - 'foxy'
schedule:
- cron: '33 6 * * *'
jobs: jobs:
microros_agent_ci: microros_agent_ci:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
container: microros/base:rolling strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
ros_distribution: [ foxy ]
include:
- docker_image: ubuntu:20.04
ros_distribution: foxy
container:
image: ubuntu:20.04
steps:
- uses: actions/checkout@v2
- uses: ros-tooling/setup-ros@0.3.2
with:
use-ros2-testing: false
required-ros-distributions: ${{ matrix.ros_distribution }}
- name : Download and install dependencies
run: |
apt-get install ros-${{ matrix.ros_distribution }}-micro-ros-msgs
apt-get install ros-${{ matrix.ros_distribution }}-rmw-fastrtps-cpp
- uses : ros-tooling/action-ros-ci@0.2.5
with:
package-name: "micro_ros_agent"
target-ros2-distro: ${{ matrix.ros_distribution }}
steps:
- uses: actions/checkout@v2
with:
path: urosagent
- name: Download dependencies
run: |
apt update
cd /uros_ws
. /opt/ros/$ROS_DISTRO/setup.sh
. install/local_setup.sh
rosdep update
ros2 run micro_ros_setup create_agent_ws.sh
- name: Patch branch
run: |
rm -rf /uros_ws/src/uros/micro-ROS-Agent/*
cp -R urosagent/* /uros_ws/src/uros/micro-ROS-Agent/
- name: Build
run: |
cd /uros_ws
. /opt/ros/$ROS_DISTRO/setup.sh
. install/local_setup.sh
ros2 run micro_ros_setup build_agent.sh
+50
View File
@@ -0,0 +1,50 @@
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 }}
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
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
View File
@@ -55,3 +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.
+37
View File
@@ -2,6 +2,43 @@
Changelog for package micro-ros_agent Changelog for package micro-ros_agent
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.5.4 (2022-09-28)
------------------
* Fix Datawriter destruction (`#169 <https://github.com/micro-ROS/micro-ROS-Agent/issues/169>`_) (`#171 <https://github.com/micro-ROS/micro-ROS-Agent/issues/171>`_)
* Synchronise predicate (`#160 <https://github.com/micro-ROS/micro-ROS-Agent/issues/160>`_) (`#167 <https://github.com/micro-ROS/micro-ROS-Agent/issues/167>`_)
1.5.3 (2022-06-13)
------------------
* 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>`_)
1.5.2 (2022-05-25)
------------------
1.5.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 used missing includes (`#116 <https://github.com/micro-ROS/micro-ROS-Agent/issues/116>`_)
* 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 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>`_)
* 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>`_)
* 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>`_)
1.5.0 (2021-09-13)
------------------
* 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>`_)
* Modify argument type (`#91 <https://github.com/micro-ROS/micro-ROS-Agent/issues/91>`_)
* Fix graph manager datawriters behaviour (`#84 <https://github.com/micro-ROS/micro-ROS-Agent/issues/84>`_)
* Graph manager: Fix participant mask for listener callbacks (`#81 <https://github.com/micro-ROS/micro-ROS-Agent/issues/81>`_)
* Fix agent launch (`#78 <https://github.com/micro-ROS/micro-ROS-Agent/issues/78>`_)
* Fix graph manager node namespaces (`#75 <https://github.com/micro-ROS/micro-ROS-Agent/issues/75>`_)
* Fix Rolling agent (`#61 <https://github.com/micro-ROS/micro-ROS-Agent/issues/61>`_)
* Add multi domain graph manager (`#69 <https://github.com/micro-ROS/micro-ROS-Agent/issues/69>`_)
* Add ros2 launch capabilities and example launch file (`#47 <https://github.com/micro-ROS/micro-ROS-Agent/issues/47>`_)
* Snap build for the micro-ROS-Agent (`#43 <https://github.com/micro-ROS/micro-ROS-Agent/issues/43>`_)
* Create graph manager after checking passed CLI arguments and launch xrce-dds server (`#41 <https://github.com/micro-ROS/micro-ROS-Agent/issues/41>`_)
* Contributors: Antonio Cuadros, Jose Antonio Moral, Pablo Garrido, mergify[bot]
0.0.1 (2019-04-24) 0.0.1 (2019-04-24)
----------------- -----------------
* Initial release * Initial release
+40 -105
View File
@@ -14,15 +14,21 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.5)
option(BUILD_SHARED_LIBS "Control shared/static building." ON)
option(UBUILD_AGENT_EXECUTABLE "Control shared/static building." ON)
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
) )
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*) set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
project(micro_ros_agent LANGUAGES CXX) option(MICROROSAGENT_SUPERBUILD "Enable superbuild compilation." ON)
option(UAGENT_USE_SYSTEM_LOGGER "Force use of system installed spdlog logger on superbuild." OFF)
if(NOT MICROROSAGENT_SUPERBUILD)
project(micro_ros_agent LANGUAGES CXX)
else()
project(uagent_superbuild NONE)
include(${PROJECT_SOURCE_DIR}/cmake/SuperBuild.cmake)
return()
endif()
find_package(ament_cmake REQUIRED) find_package(ament_cmake REQUIRED)
find_package(microxrcedds_agent REQUIRED) find_package(microxrcedds_agent REQUIRED)
@@ -44,26 +50,15 @@ find_package(ament_cmake_gtest REQUIRED)
find_package(micro_ros_msgs REQUIRED) find_package(micro_ros_msgs REQUIRED)
include(GNUInstallDirs) add_executable(${PROJECT_NAME}
set(BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for binaries") src/main.cpp
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for C headers")
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
set(DATA_INSTALL_DIR ${CMAKE_INSTALL_DATADIR} CACHE PATH "Installation directory for data")
# Set source files
set(SRCS
src/agent/Agent.cpp src/agent/Agent.cpp
src/agent/graph_manager/graph_manager.cpp src/agent/graph_manager/graph_manager.cpp
src/agent/graph_manager/graph_typesupport.cpp src/agent/graph_manager/graph_typesupport.cpp
src/agent/utils/demangle.cpp src/agent/utils/demangle.cpp
) )
# Library target_include_directories(${PROJECT_NAME}
add_library(${PROJECT_NAME} ${SRCS})
target_include_directories(${PROJECT_NAME} BEFORE
PUBLIC
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
PRIVATE PRIVATE
include include
) )
@@ -90,9 +85,9 @@ target_link_libraries(${PROJECT_NAME}
target_compile_options(${PROJECT_NAME} target_compile_options(${PROJECT_NAME}
PRIVATE PRIVATE
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wall> $<$<C_COMPILER_ID:GNU>:-Wall>
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wextra> $<$<C_COMPILER_ID:GNU>:-Wextra>
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wpedantic> $<$<C_COMPILER_ID:GNU>:-pedantic>
) )
set_target_properties(${PROJECT_NAME} PROPERTIES set_target_properties(${PROJECT_NAME} PROPERTIES
@@ -102,98 +97,38 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
YES YES
) )
# Install agent lib set_target_properties(${PROJECT_NAME} PROPERTIES
install( CXX_STANDARD
TARGETS 14
${PROJECT_NAME} CXX_STANDARD_REQUIRED
EXPORT YES
${PROJECT_NAME}Targets
RUNTIME DESTINATION
${BIN_INSTALL_DIR}
LIBRARY DESTINATION
${LIB_INSTALL_DIR}
ARCHIVE DESTINATION
${LIB_INSTALL_DIR}
COMPONENT
libraries
)
# Install includes
install(
DIRECTORY
${PROJECT_SOURCE_DIR}/include/agent
DESTINATION
${INCLUDE_INSTALL_DIR}
FILES_MATCHING
PATTERN "*.hpp"
PATTERN "*.h"
)
# Export library
install(
EXPORT
${PROJECT_NAME}Targets
DESTINATION
${DATA_INSTALL_DIR}/${PROJECT_NAME}/cmake
) )
# Package configuration target_compile_options(${PROJECT_NAME}
include(CMakePackageConfigHelpers) PRIVATE
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wall>
configure_package_config_file( $<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wextra>
${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in $<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-Wpedantic>
${PROJECT_BINARY_DIR}/cmake/config/${PROJECT_NAME}Config.cmake
INSTALL_DESTINATION
${DATA_INSTALL_DIR}/${PROJECT_NAME}/cmake
PATH_VARS
BIN_INSTALL_DIR
INCLUDE_INSTALL_DIR
LIB_INSTALL_DIR
DATA_INSTALL_DIR
)
install(
FILES
${PROJECT_BINARY_DIR}/cmake/config/${PROJECT_NAME}Config.cmake
DESTINATION
${DATA_INSTALL_DIR}/${PROJECT_NAME}/cmake
) )
if(UBUILD_AGENT_EXECUTABLE)
add_executable(micro_ros_agent_bin
${SRCS}
src/main.cpp
)
target_include_directories(micro_ros_agent_bin
PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
)
target_link_libraries(micro_ros_agent_bin ${PROJECT_NAME})
set_target_properties(micro_ros_agent_bin
PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
install(
TARGETS
micro_ros_agent_bin
DESTINATION
lib/${PROJECT_NAME}
)
install(
DIRECTORY
launch
DESTINATION
share/${PROJECT_NAME}
)
endif()
ament_export_dependencies(microxrcedds_agent) ament_export_dependencies(microxrcedds_agent)
ament_package() ament_package()
install(
TARGETS
${PROJECT_NAME}
DESTINATION
lib/${PROJECT_NAME}
)
install(
DIRECTORY
launch
DESTINATION
share/${PROJECT_NAME}
)
if(UROSAGENT_GENERATE_PROFILE) if(UROSAGENT_GENERATE_PROFILE)
set(_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/python") set(_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/python")
-32
View File
@@ -1,32 +0,0 @@
# Copyright 2016 Proyectos y Sistemas de Mantenimiento SL (eProsima).
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
set(@PROJECT_NAME@_VERSION @PROJECT_VERSION@)
@PACKAGE_INIT@
if(MSVC OR MSVC_IDE)
set_and_check(@PROJECT_NAME@_BIN_DIR "@PACKAGE_BIN_INSTALL_DIR@")
endif()
set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
set_and_check(@PROJECT_NAME@_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")
set_and_check(@PROJECT_NAME@_DATA_DIR "@PACKAGE_DATA_INSTALL_DIR@")
foreach(d @_deps@)
list(GET d 0 _name)
list(GET d 1 _version)
find_package(${_name} ${_version} REQUIRED)
endforeach()
include(${@PROJECT_NAME@_DATA_DIR}/@PROJECT_NAME@/cmake/@PROJECT_NAME@Targets.cmake)
+68
View File
@@ -0,0 +1,68 @@
# Copyright 2019 Proyectos y Sistemas de Mantenimiento SL (eProsima).
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
include(ExternalProject)
unset(_deps)
enable_language(C)
enable_language(CXX)
unset(xrceagent_DIR CACHE)
find_package(xrceagent 2 EXACT QUIET)
if(NOT xrceagent_FOUND)
ExternalProject_Add(xrceagent
GIT_REPOSITORY
https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
GIT_TAG
ros2
PREFIX
${PROJECT_BINARY_DIR}/agent
INSTALL_DIR
${CMAKE_INSTALL_PREFIX}
CMAKE_CACHE_ARGS
-DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DCMAKE_C_FLAGS:STRING=${CMAKE_C_FLAGS}
-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS}
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-DCMAKE_PREFIX_PATH:PATH=<INSTALL_DIR>
-DCMAKE_SYSTEM_NAME:STRING=${CMAKE_SYSTEM_NAME}
-DUAGENT_USE_SYSTEM_FASTDDS:BOOL=ON
-DUAGENT_USE_SYSTEM_FASTCDR:BOOL=ON
-DUAGENT_USE_SYSTEM_LOGGER:BOOL=${UAGENT_USE_SYSTEM_LOGGER}
-DUAGENT_CED_PROFILE:BOOL=OFF
-DUAGENT_P2P_PROFILE:BOOL=OFF
-DUAGENT_BUILD_EXECUTABLE:BOOL=OFF
-DUAGENT_ISOLATED_INSTALL:BOOL=OFF
)
endif()
# Main project.
ExternalProject_Add(micro_ros_agent
SOURCE_DIR
${PROJECT_SOURCE_DIR}
BINARY_DIR
${CMAKE_CURRENT_BINARY_DIR}
CMAKE_CACHE_ARGS
-DMICROROSAGENT_SUPERBUILD:BOOL=OFF
INSTALL_COMMAND
""
DEPENDS
xrceagent
)
+11 -24
View File
@@ -20,32 +20,21 @@
#include <uxr/agent/middleware/utils/Callbacks.hpp> #include <uxr/agent/middleware/utils/Callbacks.hpp>
#include <agent/graph_manager/graph_manager.hpp> #include <agent/graph_manager/graph_manager.hpp>
#include <map>
#include <memory>
// TODO(jamoralp): class Documentation // TODO(jamoralp): class Documentation
namespace uros { namespace uros {
namespace agent { namespace agent {
class Agent class Agent
{ {
private: public:
Agent(); Agent();
~Agent() ~Agent() = default;
{
stop();
}
Agent(const Agent &) = delete;
Agent(Agent &&) = delete;
Agent& operator =(
const Agent &) = delete;
Agent& operator =(
Agent &&) = delete;
public:
static Agent& getInstance();
bool create( bool create(
int argc, int argc,
@@ -53,14 +42,12 @@ public:
void run(); void run();
void stop();
private: private:
bool initialized = false;
eprosima::uxr::AgentInstance& xrce_dds_agent_instance_;
std::map<eprosima::fastdds::dds::DomainId_t, graph_manager::GraphManager> graph_manager_map_;
graph_manager::GraphManager* find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id); eprosima::uxr::AgentInstance& xrce_dds_agent_instance_;
std::map<eprosima::fastdds::dds::DomainId_t, std::shared_ptr<graph_manager::GraphManager>> graph_manager_map_;
std::shared_ptr<graph_manager::GraphManager> find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id);
}; };
} // namespace agent } // namespace agent
@@ -12,6 +12,9 @@
// 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.
#ifndef _UROS_AGENT_GRAPH_MANAGER_HPP
#define _UROS_AGENT_GRAPH_MANAGER_HPP
#include "fastrtps/Domain.h" #include "fastrtps/Domain.h"
#include <fastrtps/TopicDataType.h> #include <fastrtps/TopicDataType.h>
#include "fastrtps/attributes/ParticipantAttributes.h" #include "fastrtps/attributes/ParticipantAttributes.h"
@@ -58,8 +61,10 @@
#include <agent/graph_manager/graph_typesupport.hpp> #include <agent/graph_manager/graph_typesupport.hpp>
#include <agent/utils/demangle.hpp> #include <agent/utils/demangle.hpp>
#ifndef _UROS_AGENT_GRAPH_MANAGER_HPP #include <condition_variable>
#define _UROS_AGENT_GRAPH_MANAGER_HPP #include <string>
#include <memory>
#include <map>
namespace uros { namespace uros {
namespace agent { namespace agent {
@@ -82,28 +87,6 @@ public:
*/ */
~GraphManager() = default; ~GraphManager() = default;
void stop()
{
if (microros_graph_publisher_.joinable())
{
exit = true;
cv_.notify_one();
microros_graph_publisher_.join();
}
subscriber_->delete_datareader(ros_discovery_datareader_);
publisher_->delete_datawriter(ros_to_microros_graph_datawriter_);
participant_->delete_subscriber(subscriber_);
participant_->delete_publisher(publisher_);
// Delete topics
participant_->delete_topic(ros_discovery_topic_);
participant_->delete_topic(ros_to_microros_graph_topic_);
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->delete_participant(participant_);
}
/** /**
* @brief Implementation of the notification logic that updates the micro-ROS graph. * @brief Implementation of the notification logic that updates the micro-ROS graph.
*/ */
@@ -128,6 +111,12 @@ public:
const eprosima::fastdds::dds::DomainParticipant* participant, const eprosima::fastdds::dds::DomainParticipant* participant,
bool from_microros = true); bool from_microros = true);
/**
* @brief Getter for the graph cache.
* @return Reference to inner graph cache
*/
rmw_dds_common::GraphCache& get_graph_cache() { return graphCache_; }
/** /**
* @brief Adds a DDS datawriter to the graph tree. * @brief Adds a DDS datawriter to the graph tree.
* @param datawriter_guid rtps::GUID_t of the datawriter to be added. * @param datawriter_guid rtps::GUID_t of the datawriter to be added.
@@ -154,6 +143,21 @@ public:
const eprosima::fastrtps::rtps::GUID_t& participant_guid, const eprosima::fastrtps::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.
@@ -187,6 +191,21 @@ public:
const eprosima::fastrtps::rtps::GUID_t& participant_guid, const eprosima::fastrtps::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.
@@ -296,24 +315,23 @@ private:
std::thread microros_graph_publisher_; std::thread microros_graph_publisher_;
std::mutex mtx_; std::mutex mtx_;
std::condition_variable cv_; std::condition_variable cv_;
volatile bool exit = false;
eprosima::fastdds::dds::DataWriterQos datawriter_qos_; eprosima::fastdds::dds::DataWriterQos datawriter_qos_;
rmw_dds_common::GraphCache graphCache_; rmw_dds_common::GraphCache graphCache_;
std::unique_ptr<ParticipantListener> participant_listener_;
std::unique_ptr<DatareaderListener> datareader_listener_;
ParticipantListener participant_listener_; std::unique_ptr<eprosima::fastdds::dds::TypeSupport> participant_info_typesupport_;
DatareaderListener datareader_listener_; std::unique_ptr<eprosima::fastdds::dds::TypeSupport> microros_graph_info_typesupport_;
std::unique_ptr<eprosima::fastdds::dds::DomainParticipant> participant_;
std::unique_ptr<eprosima::fastdds::dds::Publisher> publisher_;
std::unique_ptr<eprosima::fastdds::dds::Subscriber> subscriber_;
std::unique_ptr<eprosima::fastdds::dds::Topic> ros_discovery_topic_;
std::unique_ptr<eprosima::fastdds::dds::Topic> ros_to_microros_graph_topic_;
std::unique_ptr<eprosima::fastdds::dds::DataWriter> ros_to_microros_graph_datawriter_;
std::unique_ptr<eprosima::fastdds::dds::DataReader> ros_discovery_datareader_;
eprosima::fastdds::dds::TypeSupport participant_info_typesupport_;
eprosima::fastdds::dds::TypeSupport microros_graph_info_typesupport_;
eprosima::fastdds::dds::DomainParticipant* participant_;
eprosima::fastdds::dds::Publisher* publisher_;
eprosima::fastdds::dds::Subscriber* subscriber_;
eprosima::fastdds::dds::Topic* ros_discovery_topic_;
eprosima::fastdds::dds::Topic* ros_to_microros_graph_topic_;
eprosima::fastdds::dds::DataWriter* ros_to_microros_graph_datawriter_;
eprosima::fastdds::dds::DataReader* ros_discovery_datareader_;
// 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*,
@@ -7,6 +7,6 @@ def generate_launch_description():
package='micro_ros_agent', package='micro_ros_agent',
executable='micro_ros_agent', executable='micro_ros_agent',
name='micro_ros_agent', name='micro_ros_agent',
arguments={"udp4", "-p", "8888", "-v6"} arguments=["udp4", "-p", "8888", "-v6"]
) )
]) ])
+4 -4
View File
@@ -2,9 +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>0.0.1</version> <version>1.5.4</version>
<description>DDS-XCRE agent implementation </description> <description>micro-ROS Agent package</description>
<maintainer email="borjaouterelo@eprosima.com">Borja Outerelo</maintainer> <maintainer email="pablogarrido@eprosima.com">Pablo Garrido</maintainer>
<maintainer email="antoniocuadros@eprosima.com">Antonio Cuadros</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>
@@ -14,7 +15,6 @@
<test_depend>ament_lint_auto</test_depend> <test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend> <test_depend>ament_lint_common</test_depend>
<depend>microxrcedds_agent</depend>
<depend>rmw</depend> <depend>rmw</depend>
<depend>rcutils</depend> <depend>rcutils</depend>
<depend>rmw_fastrtps_shared_cpp</depend> <depend>rmw_fastrtps_shared_cpp</depend>
+157 -26
View File
@@ -17,6 +17,9 @@
#include <agent/Agent.hpp> #include <agent/Agent.hpp>
#include <utility>
#include <memory>
namespace uros { namespace uros {
namespace agent { namespace agent {
@@ -25,22 +28,13 @@ Agent::Agent()
{ {
} }
Agent& Agent::getInstance()
{
static Agent instance;
return instance;
}
bool Agent::create( bool Agent::create(
int argc, int argc,
char** argv) char** argv)
{ {
bool result = xrce_dds_agent_instance_.create(argc, argv); bool result = xrce_dds_agent_instance_.create(argc, argv);
if (result)
if (result && !initialized)
{ {
initialized = true;
/** /**
* Add CREATE_PARTICIPANT callback. * Add CREATE_PARTICIPANT callback.
*/ */
@@ -175,6 +169,149 @@ bool Agent::create(
eprosima::uxr::Middleware::Kind::FASTDDS, eprosima::uxr::Middleware::Kind::FASTDDS,
eprosima::uxr::middleware::CallbackKind::DELETE_DATAREADER, eprosima::uxr::middleware::CallbackKind::DELETE_DATAREADER,
std::move(on_delete_datareader)); std::move(on_delete_datareader));
/**
* Add CREATE_REQUESTER callback.
*/
std::function<void (
const eprosima::fastdds::dds::DomainParticipant *,
const eprosima::fastdds::dds::DataWriter *,
const eprosima::fastdds::dds::DataReader *)> on_create_requester
([&](
const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataWriter* datawriter,
const eprosima::fastdds::dds::DataReader * datareader) -> void
{
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
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(
datawriter_guid, participant, dds::xrce::OBJK_DATAWRITER);
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
graph_manager_->add_datareader(datareader_guid, participant, datareader);
graph_manager_->associate_entity(
datareader_guid, participant, dds::xrce::OBJK_DATAREADER);
});
xrce_dds_agent_instance_.add_middleware_callback(
eprosima::uxr::Middleware::Kind::FASTDDS,
eprosima::uxr::middleware::CallbackKind::CREATE_REQUESTER,
std::move(on_create_requester));
/**
* Add DELETE_REQUESTER callback.
*/
std::function<void (
const eprosima::fastdds::dds::DomainParticipant *,
const eprosima::fastdds::dds::DataWriter *,
const eprosima::fastdds::dds::DataReader *)> on_delete_requester
([&](
const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataWriter* datawriter,
const eprosima::fastdds::dds::DataReader * datareader) -> void
{
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
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
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
graph_manager_->remove_datareader(datareader_guid);
});
xrce_dds_agent_instance_.add_middleware_callback(
eprosima::uxr::Middleware::Kind::FASTDDS,
eprosima::uxr::middleware::CallbackKind::DELETE_REQUESTER,
std::move(on_delete_requester));
/**
* Add CREATE_REPLIER callback.
*/
std::function<void (
const eprosima::fastdds::dds::DomainParticipant *,
const eprosima::fastdds::dds::DataWriter *,
const eprosima::fastdds::dds::DataReader *)> on_create_replier
([&](
const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataWriter* datawriter,
const eprosima::fastdds::dds::DataReader * datareader) -> void
{
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
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(
datawriter_guid, participant, dds::xrce::OBJK_DATAWRITER);
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
graph_manager_->add_datareader(datareader_guid, participant, datareader);
graph_manager_->associate_entity(
datareader_guid, participant, dds::xrce::OBJK_DATAREADER);
});
xrce_dds_agent_instance_.add_middleware_callback(
eprosima::uxr::Middleware::Kind::FASTDDS,
eprosima::uxr::middleware::CallbackKind::CREATE_REPLIER,
std::move(on_create_replier));
/**
* Add DELETE_REPLIER callback.
*/
std::function<void (
const eprosima::fastdds::dds::DomainParticipant *,
const eprosima::fastdds::dds::DataWriter *,
const eprosima::fastdds::dds::DataReader *)> on_delete_replier
([&](
const eprosima::fastdds::dds::DomainParticipant* participant,
const eprosima::fastdds::dds::DataWriter* datawriter,
const eprosima::fastdds::dds::DataReader * datareader) -> void
{
auto graph_manager_ = find_or_create_graph_manager(participant->get_domain_id());
// TODO(pablogs): Workaround for Fast-DDS bug #9977. Remove when fixed
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
const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
graph_manager_->remove_datareader(datareader_guid);
});
xrce_dds_agent_instance_.add_middleware_callback(
eprosima::uxr::Middleware::Kind::FASTDDS,
eprosima::uxr::middleware::CallbackKind::DELETE_REPLIER,
std::move(on_delete_replier));
} }
return result; return result;
@@ -182,29 +319,23 @@ bool Agent::create(
void Agent::run() void Agent::run()
{ {
xrce_dds_agent_instance_.run(); return xrce_dds_agent_instance_.run();
} }
void Agent::stop() std::shared_ptr<graph_manager::GraphManager> Agent::find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id)
{ {
xrce_dds_agent_instance_.stop();
for (auto & element : graph_manager_map_) auto it = graph_manager_map_.find(domain_id);
{
element.second.stop();
}
graph_manager_map_.clear();
}
graph_manager::GraphManager* Agent::find_or_create_graph_manager(eprosima::fastdds::dds::DomainId_t domain_id)
{
auto it = graph_manager_map_.find(domain_id);
if (it != graph_manager_map_.end()) { if (it != graph_manager_map_.end()) {
return &it->second; return it->second;
}else{ }else{
return &graph_manager_map_.emplace(domain_id, domain_id).first->second; return graph_manager_map_.insert(
std::make_pair(
domain_id,
std::make_shared<graph_manager::GraphManager>(domain_id)
)
).first->second;
} }
} }
@@ -17,6 +17,11 @@
#include <agent/graph_manager/graph_manager.hpp> #include <agent/graph_manager/graph_manager.hpp>
#include <memory>
#include <string>
#include <utility>
#include <vector>
namespace uros { namespace uros {
namespace agent { namespace agent {
namespace graph_manager { namespace graph_manager {
@@ -28,16 +33,15 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
, mtx_() , mtx_()
, cv_() , cv_()
, graphCache_() , graphCache_()
, participant_listener_(this) , participant_listener_(std::make_unique<ParticipantListener>(this))
, datareader_listener_(this) , datareader_listener_(std::make_unique<DatareaderListener>(this))
, participant_info_typesupport_() , participant_info_typesupport_(std::make_unique<
, microros_graph_info_typesupport_() eprosima::fastdds::dds::TypeSupport>(new graph_manager::ParticipantEntitiesInfoTypeSupport()))
, microros_graph_info_typesupport_(std::make_unique<
eprosima::fastdds::dds::TypeSupport>(new graph_manager::MicrorosGraphInfoTypeSupport()))
{ {
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->load_profiles(); eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->load_profiles();
participant_info_typesupport_ = (eprosima::fastdds::dds::TypeSupport) new graph_manager::ParticipantEntitiesInfoTypeSupport();
microros_graph_info_typesupport_ = (eprosima::fastdds::dds::TypeSupport) new graph_manager::MicrorosGraphInfoTypeSupport();
// Create DomainParticipant // Create DomainParticipant
eprosima::fastdds::dds::DomainParticipantQos participant_qos = eprosima::fastdds::dds::DomainParticipantQos participant_qos =
eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->get_default_participant_qos(); eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->get_default_participant_qos();
@@ -55,30 +59,29 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
eprosima::fastrtps::rtps::PREALLOCATED_WITH_REALLOC_MEMORY_MODE; eprosima::fastrtps::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_ = eprosima::fastdds::dds::DomainParticipantFactory::get_instance()-> create_participant(domain_id_, participant_qos, participant_listener_.get(), par_mask));
create_participant(domain_id_, participant_qos, &participant_listener_, par_mask);
// Register participant within typesupport // Register participant within typesupport
participant_->register_type(participant_info_typesupport_); participant_->register_type(*participant_info_typesupport_);
participant_->register_type(microros_graph_info_typesupport_); participant_->register_type(*microros_graph_info_typesupport_);
// Create publisher // Create publisher
publisher_ = participant_->create_publisher( publisher_.reset(participant_->create_publisher(
eprosima::fastdds::dds::PUBLISHER_QOS_DEFAULT); eprosima::fastdds::dds::PUBLISHER_QOS_DEFAULT));
// Create subscriber // Create subscriber
subscriber_ = participant_->create_subscriber( subscriber_.reset(participant_->create_subscriber(
eprosima::fastdds::dds::SUBSCRIBER_QOS_DEFAULT); eprosima::fastdds::dds::SUBSCRIBER_QOS_DEFAULT));
// Create topics // Create topics
ros_discovery_topic_ = participant_->create_topic("ros_discovery_info", ros_discovery_topic_.reset(participant_->create_topic("ros_discovery_info",
participant_info_typesupport_.get_type_name(), participant_info_typesupport_->get_type_name(),
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT); eprosima::fastdds::dds::TOPIC_QOS_DEFAULT));
ros_to_microros_graph_topic_ = participant_->create_topic("ros_to_microros_graph", ros_to_microros_graph_topic_.reset(participant_->create_topic("ros_to_microros_graph",
microros_graph_info_typesupport_.get_type_name(), microros_graph_info_typesupport_->get_type_name(),
eprosima::fastdds::dds::TOPIC_QOS_DEFAULT); eprosima::fastdds::dds::TOPIC_QOS_DEFAULT));
// Create datawriters // Create datawriters
datawriter_qos_ = datawriter_qos_ =
@@ -98,10 +101,9 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
eprosima::fastdds::dds::DataWriterQos ros_to_microros_datawriter_qos_ = datawriter_qos_; eprosima::fastdds::dds::DataWriterQos ros_to_microros_datawriter_qos_ = datawriter_qos_;
ros_to_microros_datawriter_qos_.history().kind = ros_to_microros_datawriter_qos_.history().kind =
eprosima::fastdds::dds::HistoryQosPolicyKind::KEEP_ALL_HISTORY_QOS; eprosima::fastdds::dds::HistoryQosPolicyKind::KEEP_LAST_HISTORY_QOS;
ros_to_microros_graph_datawriter_.reset(
ros_to_microros_graph_datawriter_ = publisher_->create_datawriter(ros_to_microros_graph_topic_.get(), ros_to_microros_datawriter_qos_));
publisher_->create_datawriter(ros_to_microros_graph_topic_, ros_to_microros_datawriter_qos_);
// Create datareaders // Create datareaders
@@ -117,15 +119,17 @@ GraphManager::GraphManager(eprosima::fastdds::dds::DomainId_t domain_id)
datareader_qos.durability().kind = datareader_qos.durability().kind =
eprosima::fastdds::dds::DurabilityQosPolicyKind::TRANSIENT_LOCAL_DURABILITY_QOS; eprosima::fastdds::dds::DurabilityQosPolicyKind::TRANSIENT_LOCAL_DURABILITY_QOS;
ros_discovery_datareader_ = ros_discovery_datareader_.reset(
subscriber_->create_datareader(ros_discovery_topic_, subscriber_->create_datareader(ros_discovery_topic_.get(),
datareader_qos, &datareader_listener_); datareader_qos, datareader_listener_.get()));
// 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_); {
this->graph_changed_ = true; std::unique_lock<std::mutex> lock(this->mtx_);
this->graph_changed_ = true;
}
this->cv_.notify_one(); this->cv_.notify_one();
}); });
@@ -140,13 +144,9 @@ inline void GraphManager::publish_microros_graph()
std::unique_lock<std::mutex> lock(mtx_); std::unique_lock<std::mutex> lock(mtx_);
cv_.wait(lock, [this]() cv_.wait(lock, [this]()
{ {
return this->graph_changed_ || exit; return this->graph_changed_;
}); });
} graph_changed_ = false;
if (exit)
{
break;
} }
if (display_on_change_) if (display_on_change_)
@@ -154,7 +154,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;
@@ -323,11 +322,10 @@ void GraphManager::add_participant(
if (it == micro_ros_graph_datawriters_.end()) if (it == micro_ros_graph_datawriters_.end())
{ {
// Create datawriter // Create datawriter
eprosima::fastdds::dds::DataWriter* datawriter; eprosima::fastdds::dds::DataWriter * datawriter = publisher_->create_datawriter(ros_discovery_topic_.get(), datawriter_qos_);
datawriter = publisher_->create_datawriter(ros_discovery_topic_, 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));
@@ -347,7 +345,6 @@ 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); publisher_->delete_datawriter(it->second);
micro_ros_graph_datawriters_.erase(participant); micro_ros_graph_datawriters_.erase(participant);
} }
@@ -381,6 +378,24 @@ void GraphManager::add_datawriter(
type_name, participant_gid, qos_profile, false); type_name, 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::fastrtps::rtps::GUID_t& datawriter_guid)
{ {
@@ -418,6 +433,24 @@ void GraphManager::add_datareader(
type_name, participant_gid, qos_profile, true); type_name, participant_gid, qos_profile, true);
} }
void GraphManager::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)
{
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::fastrtps::rtps::GUID_t& datareader_guid)
{ {
@@ -550,7 +583,7 @@ void GraphManager::update_node_entities_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::fastrtps::types::ReturnCode_t::RETCODE_OK)
{ {
if (sample_info.instance_state == eprosima::fastdds::dds::InstanceStateKind::ALIVE_INSTANCE_STATE) if (sample_info.instance_state == eprosima::fastdds::dds::InstanceStateKind::ALIVE)
{ {
graphCache_.update_participant_entities(entities_info); graphCache_.update_participant_entities(entities_info);
} }
@@ -602,7 +635,7 @@ 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::fastrtps::rtps::ParticipantDiscoveryInfo&& info)
{ {
switch (info.status) switch (info.status)
@@ -619,13 +652,15 @@ 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());
graphManager_from_->add_participant(participant, false, enclave); const rmw_gid_t gid = rmw_fastrtps_shared_cpp::create_rmw_gid("rmw_fastrtps_cpp", info.info.m_guid);
graphManager_from_->get_graph_cache().add_participant(gid, enclave);
break; break;
} }
case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::REMOVED_PARTICIPANT: case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::REMOVED_PARTICIPANT:
case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::DROPPED_PARTICIPANT: case eprosima::fastrtps::rtps::ParticipantDiscoveryInfo::DROPPED_PARTICIPANT:
{ {
graphManager_from_->remove_participant(participant, false); const rmw_gid_t gid = rmw_fastrtps_shared_cpp::create_rmw_gid("rmw_fastrtps_cpp", info.info.m_guid);
graphManager_from_->get_graph_cache().remove_participant(gid);
break; break;
} }
default: default:
@@ -635,52 +670,6 @@ void GraphManager::ParticipantListener::on_participant_discovery(
} }
} }
static eprosima::fastdds::dds::DataWriterQos writer_qos_conversion(
const eprosima::fastdds::dds::WriterQos& writer_qos)
{
eprosima::fastdds::dds::DataWriterQos datawriter_qos;
datawriter_qos.durability(writer_qos.m_durability);
datawriter_qos.durability_service(writer_qos.m_durabilityService);
datawriter_qos.deadline(writer_qos.m_deadline);
datawriter_qos.latency_budget(writer_qos.m_latencyBudget);
datawriter_qos.liveliness(writer_qos.m_liveliness);
datawriter_qos.reliability(writer_qos.m_reliability);
datawriter_qos.destination_order(writer_qos.m_destinationOrder);
datawriter_qos.lifespan(writer_qos.m_lifespan);
datawriter_qos.user_data(writer_qos.m_userData);
datawriter_qos.ownership(writer_qos.m_ownership);
datawriter_qos.ownership_strength(writer_qos.m_ownershipStrength);
datawriter_qos.publish_mode(writer_qos.m_publishMode);
datawriter_qos.representation(writer_qos.representation);
datawriter_qos.data_sharing(writer_qos.data_sharing);
return datawriter_qos;
}
static eprosima::fastdds::dds::DataReaderQos reader_qos_conversion(
const eprosima::fastdds::dds::ReaderQos& reader_qos)
{
eprosima::fastdds::dds::DataReaderQos datareader_qos;
datareader_qos.durability(reader_qos.m_durability);
datareader_qos.deadline(reader_qos.m_deadline);
datareader_qos.latency_budget(reader_qos.m_latencyBudget);
datareader_qos.liveliness(reader_qos.m_liveliness);
datareader_qos.reliability(reader_qos.m_reliability);
datareader_qos.destination_order(reader_qos.m_destinationOrder);
datareader_qos.user_data(reader_qos.m_userData);
datareader_qos.ownership(reader_qos.m_ownership);
datareader_qos.time_based_filter(reader_qos.m_timeBasedFilter);
datareader_qos.lifespan(reader_qos.m_lifespan);
datareader_qos.durability_service(reader_qos.m_durabilityService);
eprosima::fastdds::dds::TypeConsistencyQos consistency;
consistency.type_consistency = reader_qos.type_consistency;
datareader_qos.type_consistency(consistency);
datareader_qos.data_sharing(reader_qos.data_sharing);
return datareader_qos;
}
template <> template <>
void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastrtps::rtps::ReaderDiscoveryInfo>( void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastrtps::rtps::ReaderDiscoveryInfo>(
const eprosima::fastrtps::rtps::ReaderDiscoveryInfo& reader_info) const eprosima::fastrtps::rtps::ReaderDiscoveryInfo& reader_info)
@@ -697,7 +686,7 @@ void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastrtp
const std::string type_name = reader_info.info.typeName().to_string(); const std::string type_name = reader_info.info.typeName().to_string();
graphManager_from_->add_datareader(reader_info.info.guid(), topic_name, type_name, graphManager_from_->add_datareader(reader_info.info.guid(), topic_name, type_name,
iHandle2GUID(reader_info.info.RTPSParticipantKey()), reader_qos_conversion(reader_info.info.m_qos)); iHandle2GUID(reader_info.info.RTPSParticipantKey()), reader_info.info.m_qos);
break; break;
} }
default: default:
@@ -724,7 +713,7 @@ void GraphManager::ParticipantListener::process_discovery_info<eprosima::fastrtp
const std::string type_name = writer_info.info.typeName().to_string(); const std::string type_name = writer_info.info.typeName().to_string();
graphManager_from_->add_datawriter(writer_info.info.guid(), topic_name, type_name, graphManager_from_->add_datawriter(writer_info.info.guid(), topic_name, type_name,
iHandle2GUID(writer_info.info.RTPSParticipantKey()), writer_qos_conversion(writer_info.info.m_qos)); iHandle2GUID(writer_info.info.RTPSParticipantKey()), writer_info.info.m_qos);
break; break;
} }
default: default:
@@ -766,4 +755,4 @@ void GraphManager::DatareaderListener::on_data_available(
} // namespace agent } // namespace agent
} // namespace uros } // namespace uros
#endif // _UROS_AGENT_GRAPH_MANAGER_CPP #endif // _UROS_AGENT_GRAPH_MANAGER_CPP
@@ -17,6 +17,8 @@
#include <agent/graph_manager/graph_typesupport.hpp> #include <agent/graph_manager/graph_typesupport.hpp>
#include <string>
namespace uros { namespace uros {
namespace agent { namespace agent {
namespace graph_manager { namespace graph_manager {
+4 -1
View File
@@ -14,9 +14,12 @@
#include <agent/Agent.hpp> #include <agent/Agent.hpp>
#include <string>
#include <vector>
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
uros::agent::Agent& micro_ros_agent = micro_ros_agent.getInstance(); uros::agent::Agent micro_ros_agent;
/** Bypass '--ros-args' flag, as we use our own CLI parser. /** Bypass '--ros-args' flag, as we use our own CLI parser.
* As a workaround for launch files, arguments will be passed from * As a workaround for launch files, arguments will be passed from
+1 -1
View File
@@ -101,4 +101,4 @@ case "$daemon" in
echo "'$daemon' is not a valid boolean for daemon" >&2 echo "'$daemon' is not a valid boolean for daemon" >&2
return 1 return 1
;; ;;
esac esac
+19
View File
@@ -0,0 +1,19 @@
<?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/lib/micro_ros_agent/micro_ros_agent" "$transport" "$@" exec "$SNAP/opt/ros/snap/lib/micro_ros_agent/micro_ros_agent" "$transport" "$@"
+21 -38
View File
@@ -4,9 +4,7 @@ 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 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
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.
@@ -71,16 +69,6 @@ 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:
@@ -121,21 +109,20 @@ architectures:
- build-on: ppc64el - build-on: ppc64el
parts: parts:
uros-agent: uros-agent:
plugin: colcon plugin: colcon
source: . source: .
override-build: | colcon-cmake-args:
set +u - -DMICROROSAGENT_SUPERBUILD=ON
git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git -b $ROS_DISTRO - --cmake-force-configure
git clone https://github.com/eProsima/Micro-CDR.git -b $ROS_DISTRO override-pull: |
git clone https://github.com/micro-ROS/micro_ros_msgs.git -b $ROS_DISTRO snapcraftctl pull
git clone https://github.com/micro-ROS/rosidl_typesupport_microxrcedds.git -b $ROS_DISTRO
git clone https://github.com/micro-ROS/rmw-microxrcedds.git -b $ROS_DISTRO version="$(git describe --always --tags| sed -e 's/^v//;s/-/+git/;y/-/./')"
git clone https://github.com/micro-ROS/micro-ROS-Agent.git -b $ROS_DISTRO [ -n "$(echo $version | grep "+git")" ] && grade=devel || grade=stable
. /opt/ros/$ROS_DISTRO/setup.sh snapcraftctl set-version "$version"
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 snapcraftctl set-grade "$grade"
set -u
build-packages: [make, gcc, g++] build-packages: [make, gcc, g++]
stage-packages: [ros-foxy-ros2launch] stage-packages: [ros-foxy-ros2launch]
@@ -143,26 +130,22 @@ parts:
plugin: dump plugin: dump
source: snap/local/ source: snap/local/
organize: organize:
'*': usr/bin/ 'micro-ros-agent-daemon': 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: lib/micro_ros_agent/micro_ros_agent command: opt/ros/snap/lib/micro_ros_agent/micro_ros_agent
environment: environment:
LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP/lib" FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml
plugs: [network, network-bind, serial-port, micro-ros-agent-shm-netplug] plugs: [network, network-bind, serial-port]
extensions: [ros2-foxy] extensions: [ros2-foxy]
daemon: daemon:
command: usr/bin/micro-ros-agent-daemon command: usr/bin/micro-ros-agent-daemon
environment: environment:
LD_LIBRARY_PATH: "$LD_LIBRARY_PATH:$SNAP/lib" FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml
daemon: simple daemon: simple
plugs: [network, network-bind, serial-port, micro-ros-agent-shm-netplug] plugs: [network, network-bind, serial-port]
extensions: [ros2-foxy]