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 EncodedAck and FragmentationStatus messages
    • Removes associated unit tests
    • Removes the allow_fragmentation parameter from message codecs

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. Publishes AcousticRange.msg on ~acoustic_range_topic (default=acoustic_range).
  • Logging improvements (!144 (merged))
    • Lowered the log verbosity for tdma_advanced
    • Added mechanism to tdma_node for caching the rosnode log level during init (then available to subclasses)
  • New mac_switcher node 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.

Bugfixes

  • modem_sim_node.py: modem location topic name now uses the rosparam ~modem_location_topic. It was hard coded to location. (!144 (merged))

Notes and Examples

Acoustic range features

See !144 (merged)

  • modem_sim_node.py will automatically publish AcousticRange.msg on the topic: ~acoustic_range e.g., modem_sim_node/acoustic_range, <private_node_ns>/acoustic_range for every reception, using distance and owtt from the simulator to calculate speed_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. Publishes AcousticRange.msg on ~acoustic_range_topic (default=acoustic_range).
      • Listens on ~ping_reply_topic (default=ping_reply) and ~ping_transponders_reply_topic (default=ping_transponders_reply).
    • Can update the sound_speed dynamically, using ~sound_speed_topic (default=ctd).
      • When a msg of any type (AnyMsg) is published on ~sound_speed_topic, we use the msg.sound_speed field (if it has it) to update the sound_speed value.
      • Once the sound_speed has been updated this way, we track the last update and age out the sound_speed after ~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_INVALID rather than SPEED_OF_SOUND_SOURCE_TOPIC
      • Can update sound_speed manually by publishing a std_msgs/Float32 to a topic named with rosparam ~manual_sound_speed_topic (default=~manual_sound_speed). the node treats these updates the same as on_sound_speed_update()

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_switcher will only have ONE mac_namespace active at a time. It uses software_mute to keep all other macs software_mute:True. (tdma macs MUST inherit from tdma_advanced to get software_mute. Only the base tdma cannot be managed by tdma_multi_mac)
  • ~default_mac_namespace: MUST be set to string with mac namespace relative to group mac_switcher is in to start and use as the default MAC.
  • ~managed_mac_namespaces: List of strings with namespaces relative to mac_switcher. These MAC nodes MUST exist and not crash or the mac_switcher will 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_namespaces rosparam, 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_namespaces do not overlap and are all unique.
    • probably a good idea to add clear_params="true" to the managed_mac_namespaces node xml tag
  • ~managed_mac_heartbeat_timeout_sec if set > 0, clients of mac_switcher must publish a std_msgs/Bool to /<platform>/<mac_switcher_name>/<managed_mac_ns>/heartbeat at minimum managed_mac_heartbeat_timeout_sec or the mac_switcher will revert to the default MAC namespace
  • by default ~managed_mac_heartbeat_timeout_sec is set to -1 and MAC namespaces in managed_mac_namespaces will 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_switcher publishes 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 a std_msgs/Bool data=True to the topic /<platform>/<mac_switcher_name>/tdma_A/select
  • to select 'tdma_B', ('tdma_A' --> 'tdma_B') publish a std_msgs/Bool data=True to the topic /<platform>/<mac_switcher_name>/tdma_B/select
  • to select 'tdma_C', ('tdma_B' --> 'tdma_C') publish a std_msgs/Bool data=True to the topic /<platform>/<mac_switcher_name>/tdma_C/select
  • to select 'tdma_D', ('tdma_C' --> 'tdma_D') publish a std_msgs/Bool data=True to the topic /<platform>/<tdma_manager_name>/tdma_D/select
  • to de-select 'tdma_D', ('tdma_D' --> 'tdma') publish a std_msgs/Bool data=False to the topic /<platform>/<mac_switcher_name>/tdma_D/select, this will put you back in the default_mac_namespace.
  • Work items 0
  • Merge requests 6
  • Participants 0
  • Labels 0
Loading
Loading
Loading
Loading
0% complete
0%
Start date
No start date
None
Due date
No due date
0
Work items 0 New issue
Open: 0 Closed: 0
6
Merge requests 6
Open: 0 Closed: 0 Merged: 6
1
Release
v11.0.0
Reference: acomms/ros_acomms%"v11.0"