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
andFragmentationStatus
messages - Removes associated unit tests
- Removes the
allow_fragmentation
parameter 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.msg
on~acoustic_range_topic
(default=acoustic_range
).
- New message
- 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)
- Lowered the log verbosity for
- 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
.
- 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.py
will automatically publishAcousticRange.msg
on the topic:~acoustic_range
e.g.,modem_sim_node/acoustic_range
,<private_node_ns>/acoustic_range
for every reception, usingdistance
andowtt
from 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.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
).
- Listens on
- 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 themsg.sound_speed
field (if it has it) to update thesound_speed
value. - Once the
sound_speed
has been updated this way, we track the last update and age out thesound_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 thanSPEED_OF_SOUND_SOURCE_TOPIC
- Can update
sound_speed
manually by publishing astd_msgs/Float32
to 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_switcher
will only have ONEmac_namespace
active at a time. It usessoftware_mute
to keep all other macssoftware_mute:True
. (tdma macs MUST inherit fromtdma_advanced
to 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_switcher
is 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_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 themanaged_mac_namespaces
node xml tag
- probably a good idea to add
-
~managed_mac_heartbeat_timeout_sec
if set > 0, clients ofmac_switcher
must publish astd_msgs/Bool
to/<platform>/<mac_switcher_name>/<managed_mac_ns>/heartbeat
at minimummanaged_mac_heartbeat_timeout_sec
or themac_switcher
will revert to the default MAC namespace - by default
~managed_mac_heartbeat_timeout_sec
is set to -1 and MAC namespaces inmanaged_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.
MacSwitcherNode
instance
Tutorial: Select and switch between multiple macs using a 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/Bool
data=True
to the topic/<platform>/<mac_switcher_name>/tdma_A/select
- to select
'tdma_B'
, ('tdma_A' --> 'tdma_B'
) publish astd_msgs/Bool
data=True
to the topic/<platform>/<mac_switcher_name>/tdma_B/select
- to select
'tdma_C'
, ('tdma_B' --> 'tdma_C'
) publish astd_msgs/Bool
data=True
to the topic/<platform>/<mac_switcher_name>/tdma_C/select
- to select
'tdma_D'
, ('tdma_C' --> 'tdma_D'
) publish astd_msgs/Bool
data=True
to the topic/<platform>/<tdma_manager_name>/tdma_D/select
- to de-select
'tdma_D'
, ('tdma_D' --> 'tdma'
) publish astd_msgs/Bool
data=False
to the topic/<platform>/<mac_switcher_name>/tdma_D/select
, this will put you back in thedefault_mac_namespace
.