Added link layer "tags". Tags add filter criteria to individual queues for restricting/allowing traffic during certain slots
-
Review changes -
-
Download -
Patches
-
Plain diff
- Significant refactoring of
message_queue_node.py
. Added a ton of comments in-line.
Breaking Changes
- Changes to the following message types:
-
TdmaStatus.msg
,TdmaAdvancedStatus.msg
,TdmaScriptedStatus.msg
,TdmaSlottedAlohaStatus.msg
:- added
require_tags: str[]
- added
exclude_tags: str[]
- added
-
New Features / Improvements
- New feature added called "tags".
- all TDMA MAC types support tags. For TDMA, the tags are associated with a slot. The rosparam is:
~slot_tags
. -
message_queue_node
now supports tags:- on link layer queues and dynamic queues.
- added Optional
tag
attr toQueueParams
dataclass (list of strings).
- all TDMA MAC types support tags. For TDMA, the tags are associated with a slot. The rosparam is:
Bugfixes
-
message_queue_node
:- fixed bug in
query_dynamic_queues
. Now checks ifdest_address
isNone
- now check that the highest priority packet codec can fit in the available space with the overhead
- fixed bug in
Notes:
We have created a tool called "tags". Tags are used for adding context to individual queues that can then be used for filtering while building a packet. The TDMA MAC uses tags slightly differently. Rather than a list of tags, TDMA creates a ~slot_tags
structure which associates require_tags
and/or exclude_tags
(also includes optional minimum_priority
) with a specific slot or range of slots. When TDMA is ready to build a packet for transmit, it will pass the tag information for the current slot to message_queue
in the call to get_next_packet_data()
.
When TDMA makes the call to get_next_packet_data()
it includes the set of require_tags
and exclude_tags
for THIS slot. For message_queue
these are the setting it will use for the packet it returns from get_next_packet_data()
.
Tags are supported in dynamic_queues
. The difference is, we don't manage those queues directly so we pass the tags information in the dynamic_queue query call for the client to manage directly.
Our current MAC type is TDMA but, this paradigm could be expanded to fit MACs other than TDMA. The service endpoints defined in GetNextPacketData.srv
and GetNextQueuedMessage.srv
defines the API for using tags.
How tag exclusion criteria works:
queue excluded | has tag in require_tags
|
has tag in exclude_tags
|
---|---|---|
True | True | True |
True | False | True |
False ** | False | False |
False | True | False |
** Would be: True if there were require_tags
this slot.
MAC Configuration:
Example of a ~slot_tags
configuration:
slot_tags:
- slots: 0-11 # settings for slots 0-11 (no tags in this one, just priority)
minimum_priority: 10 # ** this minimum_priority will be overwritten in tagged slots below this one
- slots: 2 # this is a set of tags for slot 2 (tags that cover slot ranges will be combined)
minimum_priority: 50 # this will set the minimum priority for this slot (this will overwrite minimum_priority: 10 set ^^)
exclude_tags: # any queues with these tag(s) will not be transmitted in this slot
- 'low_priority'
- 'images'
- slots: 4-11 # this set of slot tags will be used for slots 4-11
require_tags: # any queues with these tag(s) WILL be transmitted in this slot (IF they don't have any on exclude list)
- 'chat'
- slots: 4-11:2 # this set of slot tags will be used for slots 4-11:2 == (4,6,8,10)
exclude_tags: # any queues with these tag(s) will not be transmitted in this slot
- 'images'
- slots: 4,6,7 # this set of slot tags will be used for slots 4,6,7
require_tags: # any queues with these tag(s) WILL be transmitted in this slot (IF they don't have any on exclude list)
- 'some_aloha'
exclude_tags: # any queues with these tag(s) will not be transmitted in this slot
- 'images'
Codec Configuration:
Example of tags
defined for a specific queue in a codec yaml:
- id: 100
message_codec: default
subscribe_topic: "chat_msgs"
publish_topic: "from_acomms"
ros_type: "std_msgs/Int8"
default_dest: 121
queue_order: fifo
queue_maxsize: 10
priority: 50
tags:
- 'chat'
fields:
data:
codec: int8
- id: 101
message_codec: default
subscribe_topic: "chat_images"
publish_topic: "from_acomms"
ros_type: "std_msgs/Int8"
default_dest: 121
queue_order: fifo
queue_maxsize: 10
priority: 50
tags:
- 'chat'
- 'images'
fields:
data:
codec: int8
- id: 102
message_codec: default
subscribe_topic: "low_priority"
publish_topic: "from_acomms"
ros_type: "std_msgs/Int8"
default_dest: 121
queue_order: fifo
queue_maxsize: 10
priority: 50
tags:
- 'low_priority'
fields:
data:
codec: int8
Merge request reports
- version 202525fefb
- version 1972870d9f
- version 18c0064901
- version 17e87e3609
- version 165d695e30
- version 15e547f7e9
- version 14cf247e73
- version 13ffa4a510
- version 128e854702
- version 1135c11ac1
- version 1061c9b18b
- version 97efaea5a
- version 8eff9e301
- version 78df14d98
- version 6bb071e1a
- version 56729d87b
- version 44c60808c
- version 3cb9746d9
- version 2518f5a67
- version 155b3bad4
- devel (base)
- latest version0447391a29 commits,
- version 202525fefb28 commits,
- version 1972870d9f26 commits,
- version 18c006490125 commits,
- version 17e87e360924 commits,
- version 165d695e3023 commits,
- version 15e547f7e922 commits,
- version 14cf247e7321 commits,
- version 13ffa4a51020 commits,
- version 128e85470219 commits,
- version 1135c11ac118 commits,
- version 1061c9b18b17 commits,
- version 97efaea5a16 commits,
- version 8eff9e30115 commits,
- version 78df14d9814 commits,
- version 6bb071e1a13 commits,
- version 56729d87b12 commits,
- version 44c60808c11 commits,
- version 3cb9746d910 commits,
- version 2518f5a679 commits,
- version 155b3bad48 commits,
- Side-by-side
- Inline