Closed
Milestone
v11.0
Breaking Changes
- Removed legacy link-layer fragmentation (!142 (merged))
- This functionality is now provided by
ros_acomms_net, or by using dynamic queues to implement a new transport layer - Removes
EncodedAckandFragmentationStatusmessages - Removes associated unit tests
- Removes the
allow_fragmentationparameter from message codecs
- This functionality is now provided by
New Features / Improvements
- Add acoustic range features, including node that publishes acoustic range automatically for pings (with sim and hardware support) (!144 (merged))
- New message
AcousticRange.msg - New node
acoustic_range_node.py: Generates a range for every ping reply (modem ping OR remus transponder ping) using OWTT and~sound_speed. PublishesAcousticRange.msgon~acoustic_range_topic(default=acoustic_range).
- New message
- Logging improvements (!144 (merged))
- Lowered the log verbosity for
tdma_advanced - Added mechanism to
tdma_nodefor caching the rosnode log level during init (then available to subclasses)
- Lowered the log verbosity for
- New
mac_switchernode to handle switching among multiple MAC nodes using software mute (!145 (merged), !146 (merged), !147 (merged))- New node
MacSwitcherNode - New message
MacSwitcherStatus.msg - Includes "dead man switch" to revert control to "default" MAC node (!146 (merged))
- Example launch file:
ros_acomms/ros_acomms_tests/launch/test_mac_switcher.launch.
- New node
Bugfixes
-
modem_sim_node.py: modem location topic name now uses the rosparam~modem_location_topic. It was hard coded tolocation. (!144 (merged))
Notes and Examples
Acoustic range features
See !144 (merged)
-
modem_sim_node.pywill automatically publishAcousticRange.msgon the topic:~acoustic_rangee.g.,modem_sim_node/acoustic_range,<private_node_ns>/acoustic_rangefor every reception, usingdistanceandowttfrom the simulator to calculatespeed_of_sound. (This is primarily an engineering tool for testing acoustic propagation simulation, not for testing navigation.) - The
acoustic_range_node:- Generates a range for every ping reply (modem ping OR remus transponder ping) using OWTT and
~sound_speed. PublishesAcousticRange.msgon~acoustic_range_topic(default=acoustic_range).- Listens on
~ping_reply_topic(default=ping_reply) and~ping_transponders_reply_topic(default=ping_transponders_reply).
- Listens on
- Can update the
sound_speeddynamically, using~sound_speed_topic(default=ctd).- When a msg of any type (
AnyMsg) is published on~sound_speed_topic, we use themsg.sound_speedfield (if it has it) to update thesound_speedvalue. - Once the
sound_speedhas been updated this way, we track the last update and age out thesound_speedafter~sound_speed_max_age_sec,default=500. When we haven't gotten an update in more than~sound_speed_max_age_sec,AcousticRange.speed_of_sound_source == SPEED_OF_SOUND_SOURCE_INVALIDrather thanSPEED_OF_SOUND_SOURCE_TOPIC - Can update
sound_speedmanually by publishing astd_msgs/Float32to a topic named with rosparam~manual_sound_speed_topic(default=~manual_sound_speed). the node treats these updates the same ason_sound_speed_update()
- When a msg of any type (
- Generates a range for every ping reply (modem ping OR remus transponder ping) using OWTT and
MAC Switcher
See !145 (merged) and !146 (merged)
The MacSwitcherNode (called mac_switcher in the example test_mac_switcher.launch) allows you to configure and switch between N MAC instances of different types and configs.
- the
mac_switcherwill only have ONEmac_namespaceactive at a time. It usessoftware_muteto keep all other macssoftware_mute:True. (tdma macs MUST inherit fromtdma_advancedto getsoftware_mute. Only the base tdma cannot be managed bytdma_multi_mac) -
~default_mac_namespace: MUST be set to string with mac namespace relative to groupmac_switcheris in to start and use as the default MAC. -
~managed_mac_namespaces: List of strings with namespaces relative tomac_switcher. These MAC nodes MUST exist and not crash or themac_switcherwill be blocked waiting for it to come up before being active! - if you specify the managed MAC nodes out of order from the list passed to
mac_switcher~managed_mac_namespacesrosparam, unexpected behavior happens due to the serial nature of the initialization on the MacSwitcher (going through each MAC node at a time, blocking until that node is up and we have set it to mute and confirmed on the param server. An out of order launch file will cause the initial period before all MAC nodes are nominal to behave unpredictably). - make sure the
~managed_mac_namespacesdo not overlap and are all unique.- probably a good idea to add
clear_params="true"to themanaged_mac_namespacesnode xml tag
- probably a good idea to add
-
~managed_mac_heartbeat_timeout_secif set > 0, clients ofmac_switchermust publish astd_msgs/Boolto/<platform>/<mac_switcher_name>/<managed_mac_ns>/heartbeatat minimummanaged_mac_heartbeat_timeout_secor themac_switcherwill revert to the default MAC namespace - by default
~managed_mac_heartbeat_timeout_secis set to -1 and MAC namespaces inmanaged_mac_namespaceswill not timeout by default. This param MUST be set to a value greater than 0 to have an effect (and only on the managed macs. Not the default mac. The default cannot timeout) -
mac_switcherpublishes status here:/<platform>/mac_switcher_status. This is a great source of info for the currently active mac. This is a latched topic so you'll get the last msg whenever subscribe happens.
Tutorial: Select and switch between multiple macs using a MacSwitcherNode instance
say we have a list of managed_mac_namespaces and a default_mac_namespace of:
default_mac_namespace: 'tdma'
managed_mac_namespaces:
- 'tdma_A'
- 'tdma_B'
- 'tdma_C'
- 'tdma_D'
- to select
'tdma_A', ('tdma' --> 'tdma_A') publish astd_msgs/Booldata=Trueto the topic/<platform>/<mac_switcher_name>/tdma_A/select - to select
'tdma_B', ('tdma_A' --> 'tdma_B') publish astd_msgs/Booldata=Trueto the topic/<platform>/<mac_switcher_name>/tdma_B/select - to select
'tdma_C', ('tdma_B' --> 'tdma_C') publish astd_msgs/Booldata=Trueto the topic/<platform>/<mac_switcher_name>/tdma_C/select - to select
'tdma_D', ('tdma_C' --> 'tdma_D') publish astd_msgs/Booldata=Trueto the topic/<platform>/<tdma_manager_name>/tdma_D/select - to de-select
'tdma_D', ('tdma_D' --> 'tdma') publish astd_msgs/Booldata=Falseto the topic/<platform>/<mac_switcher_name>/tdma_D/select, this will put you back in thedefault_mac_namespace.
Loading
Loading
Loading
Loading