From 90b332339aa27115c9e9ad0e676180b32ef0ba79 Mon Sep 17 00:00:00 2001 From: Matthew Barulic Date: Wed, 3 Jun 2026 02:07:49 -0400 Subject: [PATCH 1/2] Re-enables packet version check --- .../src/radio_bridge_node.cpp | 29 +++++++++---------- .../test/launch_tests/bridge_command_test.py | 5 ++++ .../test/launch_tests/version_helpers.py | 3 +- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/radio/ateam_radio_bridge/src/radio_bridge_node.cpp b/radio/ateam_radio_bridge/src/radio_bridge_node.cpp index c402013a..54e8cb35 100644 --- a/radio/ateam_radio_bridge/src/radio_bridge_node.cpp +++ b/radio/ateam_radio_bridge/src/radio_bridge_node.cpp @@ -419,22 +419,19 @@ class RadioBridgeNode : public rclcpp::Node HelloRequest hello_data = std::get(data_variant); - // Commented out until firmware implements git hash populating - - // const uint32_t incoming_coms_hash = hello_data.coms_hash[0] | (hello_data.coms_hash[1] << 8) | - // (hello_data.coms_hash[2] << 16) | (hello_data.coms_hash[3] << 24); - // if (incoming_coms_hash != ateam_radio_msgs::kComsHash) { - // RCLCPP_WARN(get_logger(), "Ignoring discovery packet. Packet version hash mismatch."); - // return; - // } - - // if (ateam_radio_msgs::kComsDirty) { - // RCLCPP_WARN(get_logger(), "Local packet version is dirty. Compatibility check may be unreliable."); - // } - - // if (hello_data.coms_repo_dirty) { - // RCLCPP_WARN(get_logger(), "Remote robot's packet version is dirty. Compatibility check may be unreliable."); - // } + const uint32_t incoming_coms_hash = hello_data.coms_hash[0] << 24 | hello_data.coms_hash[1] << 16 | hello_data.coms_hash[2] << 8 | hello_data.coms_hash[3]; + if (incoming_coms_hash != ateam_radio_msgs::kComsHash) { + RCLCPP_WARN(get_logger(), "Ignoring discovery packet. Packet version hash mismatch. Robot: %x Local: %x", incoming_coms_hash, ateam_radio_msgs::kComsHash); + return; + } + + if (ateam_radio_msgs::kComsDirty) { + RCLCPP_WARN(get_logger(), "Local packet version is dirty. Compatibility check may be unreliable."); + } + + if (hello_data.coms_repo_dirty) { + RCLCPP_WARN(get_logger(), "Remote robot's packet version is dirty. Compatibility check may be unreliable."); + } if (!(game_controller_listener_.GetTeamColor() == ateam_common::TeamColor::Blue && hello_data.color == TC_BLUE) && diff --git a/radio/ateam_radio_bridge/test/launch_tests/bridge_command_test.py b/radio/ateam_radio_bridge/test/launch_tests/bridge_command_test.py index ef3760d0..069d6001 100644 --- a/radio/ateam_radio_bridge/test/launch_tests/bridge_command_test.py +++ b/radio/ateam_radio_bridge/test/launch_tests/bridge_command_test.py @@ -107,6 +107,7 @@ def test_2_vision_updates(self): vis_msg.pose.orientation.y = 0.0 vis_msg.pose.orientation.z = 0.707 vis_msg.pose.orientation.w = 0.707 + vis_msg.visible = True self.vis_pub.publish(vis_msg) timeout = time.time() + 1 @@ -118,10 +119,12 @@ def test_2_vision_updates(self): self.vis_pub.publish(vis_msg) last_packet = self.robot.getLastCmdMessage() if len(last_packet) != 64: + print(f'unexpected packet length: {len(last_packet)}') continue # Extract vision updates vision_update_flag = struct.unpack(" Date: Wed, 3 Jun 2026 02:08:20 -0400 Subject: [PATCH 2/2] Fixes cmake config dependencies for coms submodule --- radio/ateam_radio_msgs/cmake/generate_conversion_code.cmake | 6 ++++++ radio/ateam_radio_msgs/cmake/generate_msgs.cmake | 6 ++++++ radio/ateam_radio_msgs/cmake/generate_version_header.cmake | 5 +++++ 3 files changed, 17 insertions(+) diff --git a/radio/ateam_radio_msgs/cmake/generate_conversion_code.cmake b/radio/ateam_radio_msgs/cmake/generate_conversion_code.cmake index 7fe37fea..f721b549 100644 --- a/radio/ateam_radio_msgs/cmake/generate_conversion_code.cmake +++ b/radio/ateam_radio_msgs/cmake/generate_conversion_code.cmake @@ -19,6 +19,8 @@ # THE SOFTWARE. function(generate_conversion_code) + message(STATUS "Generating conversion code...") + set(oneValueArgs SOURCE DESTINATION) set(multiValueArgs STRUCTS) cmake_parse_arguments(PARSE_ARGV 0 arg "" "${oneValueArgs}" "${multiValueArgs}") @@ -53,4 +55,8 @@ function(generate_conversion_code) if(result) message(FATAL_ERROR "Failed to generate conversion code: ${error}") endif() + + cmake_path(GET arg_SOURCE PARENT_PATH _header_dir) + file(GLOB _source_files "${_header_dir}/**/*") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${_source_files}) endfunction() diff --git a/radio/ateam_radio_msgs/cmake/generate_msgs.cmake b/radio/ateam_radio_msgs/cmake/generate_msgs.cmake index 67aa2a0d..71f2ddb9 100644 --- a/radio/ateam_radio_msgs/cmake/generate_msgs.cmake +++ b/radio/ateam_radio_msgs/cmake/generate_msgs.cmake @@ -19,6 +19,8 @@ # THE SOFTWARE. function(generate_msgs) + message(STATUS "Generating ROS message types...") + set(oneValueArgs SOURCE DESTINATION) set(multiValueArgs STRUCTS) cmake_parse_arguments(PARSE_ARGV 0 arg "" "${oneValueArgs}" "${multiValueArgs}") @@ -50,4 +52,8 @@ function(generate_msgs) if(result) message(FATAL_ERROR "Failed to generate messages: ${error}") endif() + + cmake_path(GET arg_SOURCE PARENT_PATH _header_dir) + file(GLOB _source_files "${_header_dir}/**/*") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${_source_files}) endfunction() diff --git a/radio/ateam_radio_msgs/cmake/generate_version_header.cmake b/radio/ateam_radio_msgs/cmake/generate_version_header.cmake index ff246e6c..2c8d7622 100644 --- a/radio/ateam_radio_msgs/cmake/generate_version_header.cmake +++ b/radio/ateam_radio_msgs/cmake/generate_version_header.cmake @@ -20,6 +20,8 @@ function(generate_version_header) + message(STATUS "Generating version header...") + set(SOFT_COMS_SUBMODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/software-communication") find_package(Git REQUIRED) @@ -55,4 +57,7 @@ function(generate_version_header) @ONLY ) + file(GLOB submodule_files "${SOFT_COMS_SUBMODULE_DIR}/**/*") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${submodule_files}) + endfunction()