Code Monkey home page Code Monkey logo

embeddedrtps's Introduction

embeddedRTPS

This repository contains source code for embeddedRTPS, a portable and open-source C++ implementation of the Real-Time Publish-Subscribe Protocol (RTPS) for embedded system. RTPS is based on the publish-subscribe mechanism and is at the core of the Data Distribution Service (DDS). DDS is used, among many other applications, in Robot Operating System 2 (ROS2) and is also part of the AUTOSAR Adaptive platform. embeddedRTPS allows to integrate Ethernet-capable microcontrollers into DDS-based systems as first-class participants.

embeddedRTPS is portable, as it only consumes lightweightIP and FreeRTOS APIs, which are available for a large number of embedded systems. embeddedRTPS avoids dynamic memory allocation once endpoints are constructed possible. Please note that embeddedRTPS only implements rudimentary Quality-of-Service (QoS) policies and is far from a complete RTPS implementation.

More information is provided in our ITSC'2019 publication [1], which we kindly ask you to consider citing if you find embeddedRTPS helpful for your work.

Features

Discovery Simple Participant Discovery Protocol (SPDP) as well as Simple Endpoint Discovery Protocol (SEDP) are implemented.

Interoperability We have sucessfully tested interoperability with FastDDS 2.3.1

QoS Policies Both reliable as well as best-effort endpoints are implemented.

UDP Multicast Our implementation supports multicast locators.

Message Size Message size is currently limited by lwIP buffer size and are not split up among multiple buffers

Supported Platforms

We have successfully ported embeddedRTPS on the following platforms:

  • Infineon Aurix
  • Xilinx UltraScale+ Cortex R5
  • STM32F767ZI

Due to license issues, we can only make source code available for the STM32.

Examples

The following repository provides code examples for running embeddedRTPS on the STM32F767ZI

Runnig on Linux & Unittests

The following repository allow to compile and run embeddedRTPS on Linux for development purposes. This repository also contains unittests for embeddedRTPS.

Third Party Libraries

embeddedRTPS makes use of the following third party libraries:

Performance

Round-trip-times (RTT) for different platforms and packet sizes are depicted in the tables below.

Table 1 2x Infineon Aurix TC277 running embeddedRTPS.

Table 2 STM32F7 running embeddedRTPS connected to an Intel NUC running eProsima FastRTPS 1.8.0.

Acknowledgment

embeddedRTPS has been developed at i11 - Embedded Software, RWTH Aachen University in the context of the UNICARagil project.

This research is accomplished within the project “UNICARagil” (FKZ EM2ADIS002). We acknowledge the financial support for the project by the Federal Ministry of Education and Research of Germany (BMBF).

References

[1] A. Kampmann, A. Wüstenberg, B. Alrifaee and S. Kowalewski, "A Portable Implementation of the Real-Time Publish-Subscribe Protocol for Microcontrollers in Distributed Robotic Applications," 2019 IEEE Intelligent Transportation Systems Conference (ITSC), Auckland, New Zealand, 2019, pp. 443-448. doi: 10.1109/ITSC.2019.8916835

@INPROCEEDINGS{8916835, 
author={A. {Kampmann} and A. {Wüstenberg} and B. {Alrifaee} and S. {Kowalewski}}, 
booktitle={2019 IEEE Intelligent Transportation Systems Conference (ITSC)}, 
title={A Portable Implementation of the Real-Time Publish-Subscribe Protocol for Microcontrollers in Distributed Robotic Applications}, 
year={2019}, 
volume={}, 
number={}, 
pages={443-448}, 
keywords={automobiles;intelligent transportation systems;microcontrollers;middleware;operating systems (computers);protocols;robot programming;Robot Operating System 2;microcontrollers;distributed automotive applications;distributed robotic applications;Data Distribution Service;DDS;open-source RTPS implementations;publish-subscribe protocol;AUTOSAR Adaptive platform;Protocols;Automotive engineering;Message systems;Real-time systems;Microcontrollers;Middleware;Operating systems}, 
doi={10.1109/ITSC.2019.8916835}, 
ISSN={null}, 
month={Oct},}

embeddedrtps's People

Contributors

akampmann avatar andreaswuestenberg avatar apokorny avatar benediktconze avatar takasehideki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

embeddedrtps's Issues

Infineon Aurix

Please, can you share the Infineon Aurix example with me?

please add a license

This repository don't have a LICENSE.
Without a copyright license, nobody is legally allowed to use this code. Please choose a license.

We plan to use the product you have achieved for our R&D activity.
If we may suggest it, the Apache 2.0 license is good choice because this permissive the license that also grant patent rights. And Apache 2.0 prevents you from being able to sue your users over patent infringement claims.

[Question] NuttX support?

We can see that it depends on lightweightIP (lwip) as network stack, but is there any plan to support NuttX as well?
NuttX uses mIP (micro IP) network stack instead of lwip, so that it will not be straight-forward to do that with current software stack.
we would like to bring the question if there is any plan or request for supporting NuttX.

Motivation is basically for more isolation as distributed system w/o agent(server/client architecture) with embedded micro-controllers.

Question about handling Micro-CDR

This is not an issue but question to developer team.

embeddedRTPS uses eProsima Micro-CDR as the third party library. In this repository, the file for Micro-CDR was copied directly and managed as it is, not the submodule feature by git (.gitmodules).
https://github.com/embedded-software-laboratory/embeddedRTPS/tree/master/thirdparty/Micro-CDR

I understand why you did so is that you need to tune some code in Micro-CDR for the embeddedRTPS.
https://github.com/embedded-software-laboratory/embeddedRTPS/commits/master/thirdparty/Micro-CDR

However, many meaningful improvements have been committed to the Micro-CDR original repository. They may be also useful for embeddedRTPS. I think making Micro-CDR a git submodule becomes useful to follow the update about it.


So I have two questions.

Q1: which is the version you copied and located to this repository from the original repository of Micro-CDR?

Q2: Can we consider making Micro-CDR a git submodule and following the latest commits in it?
If you agree with this idea, your action item is just forking Micro-CDR repository to your Organization (embedded-software-laboratory). Then, I will try to tune the forked repository to fit the use of embeddedRTPS.
If no, I want to send PR that includes the change of file name to Micro-CDR/include/ucdr/types/string.h. We are working on mbed support for embeddedRTPS along with mROS2, but we are facing an issue due to this filename. Note that this file is no longer appeared in the latest version of Micro-CDR.
mROS-base#6 (comment)

Unable to receive data at subscriber using embedded RTPS with FreeRTOS used two ESP32 devices as Publisher & Subscriber

Hello @akampmann ,

I tried this Embedded RTPS component with micro ros for both subscriber and publisher with two ESP32 Devices but problem is My publisher ESP32 publishing the data and My Subscriber ESP32 not receiving it but both are connected to same wifi-router.

Could you please help me here if I am missing anything or any configuration updated related to IP and Ports etc.

I am thinking that this communication will happen through by joining a IGMP Group with LWIP Where i could see that it is joining into group 239.255.0.1 based on udpdriver.c file prints but still there is no communication between them.

I have used same topic name for subscriber and publisher but still no luck.

Kindly please help in this. I am struggling with this issue from many days and also I am not less aware of this LWIP and RTPS components.

Thank you in advance.

statement incomplete

src\messages\MessageTypes.cpp line 213
Code:
size_t num_bitfields = msg.header.octetsToNextHeader - 4 - 4 - 8 - 8 - 4;
remainingSizeAtBeginning - (currentPos - info.getPointerToCurrentPos()); // <-- statement incomplete

Unexpected memory access error when changing PARTICIPANT_START_ID to 1

Unexpected memory access error when changing PARTICIPANT_START_ID to 1.

I am getting an error below process.
https://github.com/embedded-software-laboratory/embeddedRTPS/blob/master/src/entities/Domain.cpp#L60

Shouldn't the PARTICIPANT_START_ID be subtracted in this process?
Or do you intend not to subtract?

I think the process should be the same as below.
https://github.com/embedded-software-laboratory/embeddedRTPS/blob/master/src/entities/Domain.cpp#L83

https://github.com/embedded-software-laboratory/embeddedRTPS/blob/master/src/entities/Domain.cpp#L94

sorry if i use it wrong.
I wrote an issue for the first time. sorry if i broke the rules.

Does this Embedded RTPS supports with Publish and Subscribe within a MCU running different tasks

Hi @akampmann

I have following use case i would like to know whether embeddedRTPS support or not ?

Usecase1 : I have built my application by replacing Micro-ROS XRCE DDS with your embeddedRTPS. Micro-ROS XRCE DDS has below functinalties . does embeddedRTPS supports the same ?

                 1. Shared memory functionalities - this will allow Internally a MCU Publish and subscribe on same topic
                 2. Multi thread functionalities   -   this will allow multiple threads/task running with publish and subscribe within mcu 
                 3. Custom Transport Functionality  - this will allow to replace UDP/TCP transport to serial transport etc.

Please clarify on these. I could not see above options enabling config files in embeddedRTPS compared to Micro-ROS XRCE DDS.

If not please let me know if there is any way to have publisher and subscriber within a mcu to establish communication between two different tasks one as publisher and other as subscriber on same topic ?

Please mention if there is any limitations while using embeddedRTPS.

Information from you is really helpful to me. Please reply ASAP. Thank you in advance

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.