Compare commits

..
32 Commits
Author SHA1 Message Date
Guillaume Beuzeboc e0d3e01909 Fix/snap version (#162)
* fix(snap): grade and version should be from the part

* CI(snap): need git history for latest git tag

* ci(snap): use new action-publish crendential system

* ignore snap
2023-01-20 07:29:25 +01:00
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
11 changed files with 219 additions and 123 deletions
+7 -6
View File
@@ -3,24 +3,24 @@ name: CI micro-ROS Agent
on: on:
pull_request: pull_request:
branches: branches:
- 'humble' - 'foxy'
schedule: schedule:
- cron: '33 6 * * *' - cron: '33 6 * * *'
jobs: jobs:
microros_agent_ci: microros_agent_ci:
runs-on: ubuntu-latest runs-on: ubuntu-20.04
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ ubuntu-20.04 ] os: [ ubuntu-20.04 ]
ros_distribution: [ humble ] ros_distribution: [ foxy ]
include: include:
- docker_image: ubuntu:jammy - docker_image: ubuntu:20.04
ros_distribution: humble ros_distribution: foxy
container: container:
image: ubuntu:jammy image: ubuntu:20.04
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: ros-tooling/setup-ros@0.3.2 - uses: ros-tooling/setup-ros@0.3.2
@@ -35,3 +35,4 @@ jobs:
with: with:
package-name: "micro_ros_agent" package-name: "micro_ros_agent"
target-ros2-distro: ${{ matrix.ros_distribution }} target-ros2-distro: ${{ matrix.ros_distribution }}
+54
View File
@@ -0,0 +1,54 @@
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
with:
# full history for latest tag name
fetch-depth: 0
- 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
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.STORE_LOGIN }}
with:
snap: ${{needs.build.outputs.snap-file}}
release: ${{ startsWith(github.ref, 'refs/tags/') && 'candidate' || 'edge'}}
+4
View File
@@ -33,3 +33,7 @@
# End of https://www.gitignore.io/api/qtcreator # End of https://www.gitignore.io/api/qtcreator
CMakeLists.txt.user CMakeLists.txt.user
# snaps
*.snap
+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.
+16 -14
View File
@@ -2,26 +2,28 @@
Changelog for package micro-ros_agent Changelog for package micro-ros_agent
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3.0.3 (2022-06-13) 1.5.4 (2022-09-28)
------------------ ------------------
* Fix memory leak in graph manager (`#147 <https://github.com/micro-ROS/micro-ROS-Agent/issues/147>`_) * 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>`_)
3.0.2 (2022-05-25) 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)
------------------ ------------------
3.0.1 (2022-03-25) 1.5.1 (2022-03-25)
------------------ ------------------
* 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 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>`_) (`#124 <https://github.com/micro-ROS/micro-ROS-Agent/issues/124>`_) * 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>`_) (`#119 <https://github.com/micro-ROS/micro-ROS-Agent/issues/119>`_) * 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>`_) (`#114 <https://github.com/micro-ROS/micro-ROS-Agent/issues/114>`_) * 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>`_) (`#112 <https://github.com/micro-ROS/micro-ROS-Agent/issues/112>`_) * 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>`_) (`#109 <https://github.com/micro-ROS/micro-ROS-Agent/issues/109>`_) * 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>`_)
3.0.0 (2021-09-13) 1.5.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>`_)
@@ -143,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.
@@ -176,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.
@@ -305,7 +335,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_;
}; };
+1 -1
View File
@@ -2,7 +2,7 @@
<?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>3.0.3</version> <version>1.5.4</version>
<description>micro-ROS Agent package</description> <description>micro-ROS Agent package</description>
<maintainer email="pablogarrido@eprosima.com">Pablo Garrido</maintainer> <maintainer email="pablogarrido@eprosima.com">Pablo Garrido</maintainer>
<maintainer email="antoniocuadros@eprosima.com">Antonio Cuadros</maintainer> <maintainer email="antoniocuadros@eprosima.com">Antonio Cuadros</maintainer>
+48 -17
View File
@@ -79,9 +79,14 @@ 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());
graph_manager_->add_datawriter(datawriter->guid(), participant, datawriter); // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
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,
@@ -101,7 +106,12 @@ 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());
graph_manager_->remove_datawriter(datawriter->guid()); // TODO(jamoralp): Workaround for Fast-DDS bug #9977. Remove when fixed
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(
@@ -174,15 +184,21 @@ 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());
graph_manager_->add_datawriter(datawriter->guid(), participant, datawriter); // 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( 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 = const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle); eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
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);
@@ -206,13 +222,18 @@ 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());
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_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 = const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle); eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
graph_manager_->remove_datareader(datareader_guid); graph_manager_->remove_datareader(datareader_guid);
}); });
@@ -235,15 +256,20 @@ 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());
graph_manager_->add_datawriter(datawriter->guid(), participant, datawriter); // 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( 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 = const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle); eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
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);
@@ -267,13 +293,18 @@ 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());
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_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 = const eprosima::fastrtps::rtps::InstanceHandle_t instance_handle_dr =
datareader->get_instance_handle(); datareader->get_instance_handle();
const eprosima::fastrtps::rtps::GUID_t datareader_guid = const eprosima::fastrtps::rtps::GUID_t datareader_guid =
eprosima::fastrtps::rtps::iHandle2GUID(instance_handle); eprosima::fastrtps::rtps::iHandle2GUID(instance_handle_dr);
graph_manager_->remove_datareader(datareader_guid); graph_manager_->remove_datareader(datareader_guid);
}); });
@@ -126,8 +126,10 @@ 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_); {
this->graph_changed_ = true; std::unique_lock<std::mutex> lock(this->mtx_);
this->graph_changed_ = true;
}
this->cv_.notify_one(); this->cv_.notify_one();
}); });
@@ -144,6 +146,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 +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;
@@ -320,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
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,8 +345,9 @@ 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(
@@ -376,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)
{ {
@@ -413,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)
{ {
@@ -545,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);
} }
@@ -632,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)
@@ -694,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:
@@ -721,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:
@@ -763,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
@@ -43,7 +43,7 @@ ParticipantEntitiesInfoTypeSupport::ParticipantEntitiesInfoTypeSupport()
ss << "dds_::" << message_name << "_"; ss << "dds_::" << message_name << "_";
this->setName(ss.str().c_str()); this->setName(ss.str().c_str());
char full_bounded; bool full_bounded = true;
m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded);
} }
@@ -135,7 +135,7 @@ MicrorosGraphInfoTypeSupport::MicrorosGraphInfoTypeSupport()
ss << "dds_::" << message_name << "_"; ss << "dds_::" << message_name << "_";
this->setName(ss.str().c_str()); this->setName(ss.str().c_str());
char full_bounded; bool full_bounded = true;
m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded);
} }
+6 -24
View File
@@ -1,12 +1,10 @@
name: micro-ros-agent name: micro-ros-agent
adopt-info: uros-agent # parse metadata from the uros-agent part
base: core20 base: core20
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.
@@ -101,7 +99,6 @@ description: |
After this, you can execute your snap as usual, After this, you can execute your snap as usual,
using `sudo micro-ros-agent serial -d <serial-dev>`. using `sudo micro-ros-agent serial -d <serial-dev>`.
grade: stable
confinement: strict confinement: strict
architectures: architectures:
@@ -110,22 +107,7 @@ architectures:
- build-on: armhf - build-on: armhf
- build-on: ppc64el - build-on: ppc64el
package-repositories:
- components: [main]
formats: [deb]
key-id: C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
key-server: keyserver.ubuntu.com
suites: [focal]
type: apt
url: http://repo.ros2.org/ubuntu/main
parts: parts:
ros2-foxy-extension:
build-packages: [ros-foxy-ros-core]
override-build: install -D -m 0755 launch ${SNAPCRAFT_PART_INSTALL}/snap/command-chain/ros2-launch
plugin: nil
source: $SNAPCRAFT_EXTENSIONS_DIR/ros2
uros-agent: uros-agent:
plugin: colcon plugin: colcon
source: . source: .
@@ -140,11 +122,8 @@ parts:
snapcraftctl set-version "$version" snapcraftctl set-version "$version"
snapcraftctl set-grade "$grade" snapcraftctl set-grade "$grade"
build-packages: [make, gcc, g++] build-packages: [make, gcc, g++, git]
stage-packages: [ros-foxy-ros2launch] stage-packages: [ros-foxy-ros2launch]
build-environment:
- ROS_VERSION: '2'
- ROS_DISTRO: foxy
runner: runner:
plugin: dump plugin: dump
@@ -159,6 +138,7 @@ apps:
environment: environment:
FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml
plugs: [network, network-bind, serial-port] plugs: [network, network-bind, serial-port]
extensions: [ros2-foxy]
daemon: daemon:
command: usr/bin/micro-ros-agent-daemon command: usr/bin/micro-ros-agent-daemon
@@ -166,3 +146,5 @@ apps:
FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml FASTRTPS_DEFAULT_PROFILES_FILE: ${SNAP}/usr/share/fastdds_no_shared_memory.xml
daemon: simple daemon: simple
plugs: [network, network-bind, serial-port] plugs: [network, network-bind, serial-port]
extensions: [ros2-foxy]