Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REP 2003: Sensor Data and Map QoS Settings #212

Merged
merged 18 commits into from
Jan 9, 2024
Merged
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 76 additions & 0 deletions rep-2003.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
REP: 2003
Title: Sensor Data and Map QoS Settings
Author: Steve Macenski <stevenmacenski at gmail.com>
Status: Draft
Type: Standards Track
Content-Type: text/x-rst
Created: 08-Nov-2019
ROS-Version: Dashing
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
Post-History: 08-Nov-2019

Abstract
========

This REP covers the standards surrounding Quality of Service (QoS) settings for common needs in ROS2.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
This includes sensor drivers and map representations to standardize interfaces of not only message types outlined by REPs such as REP 118, 138, and 145, but also QoS to ensure ROS2 interoperability.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved

Specification
=============

Map Quality of Service
mjcarroll marked this conversation as resolved.
Show resolved Hide resolved
----------------------

Map providers such as map servers and SLAM implementations are expected to provide all maps over a reliable local-transient topic.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
This is to allow for reliable transmission of map data and provide the map information to any new map clients without delay.
The depth of the transient-local storage depth is left to the designer, however a single map depth is a reasonable choice for static or globally-updated dynamic map serving applications.
Map clients are also expected to receive maps over a reliable local-transient topic with variable depth.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved

This specification does not prescribe any particular map representation but rather applies to all shared map representations, including but not limited to: occupancy grids, feature maps and dense representations.

Sensor Driver Quality of Service
--------------------------------

Sensor data provided by a sensor driver from a camera, inertial measurement unit, laser scanner, GPS, depth, or range finder are expected to be provided over a `SensorDataQoS` quality of service as provided by the implemented ROS2 version API.
This is to allow for unreliable transmission of sensor data directly from source to its first processing stage(s).
These processing stage(s) are also expected to receive a sensor reading using the SensorDataQoS provided QoS profile implemented by the ROS2 version API.

This specification does not enforce QoS settings for sensor data transmitted or received by stage(s) after the sensor driver.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some sensor drivers may produce data only "on change" rather than at a fixed, usually fast, period.
these topics should use transient local reliable publication

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That doesn't seem like raw sensor feeds to me, but the output of a node that is doing some pre-processing (e.g. stage). The REP calls out that we only consider raw sensor data and aren't covering between stages which might have other operating contexts. I think that should cover it unless there are actual "on change" raw sensor data inputs - which I can't think of an example of


Rationale
=========

Why Specify QoS Settings
------------------------

Unlike ROS1, ROS2's QoS settings chosen by an application can affect the ability for data to be transmitted from a publisher to a subscriber.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
There exists several combinations of QoS settings that will not transmit data from one node to another even while composed in a single process.
SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved
By specifying QoS settings for common interfaces, the aim is to ensure all sensor data and map sources can be interchangable with each other at run-time.

Why Not Specify Later Stage Sensor QoS Settings
-----------------------------------------------

There exist numerous requirements and uses of pre-processed sensor data.
It would be presumptuous of this REP to equally treat data transmissions in safety critical or best-effort pipelines.

SteveMacenski marked this conversation as resolved.
Show resolved Hide resolved

Backward Compatibility
=======================

It is up to the maintainer of a sensor driver or map source provider to determine if the provider should be updated to follow this REP.
If a maintainer chooses to update, the current usage should at minimum follow a tick tock pattern where the old usage is deprecated and warns the user, followed by removal of the old usage.
The maintainer may choose to support both standard and custom usage, as well as extend this usage or implement this usage partially depending on the specifics of the interface.

Copyright
=========

This document has been placed in the public domain.


..
Local Variables:
mode: indented-text
indent-tabs-mode: nil
sentence-end-double-space: t
fill-column: 70
coding: utf-8
End: