From 01960271f72f6a8a22525113f7d6af15515aaf59 Mon Sep 17 00:00:00 2001 From: li-shihao-code <2469171725@qq.com> Date: Fri, 6 Mar 2026 17:41:41 +0800 Subject: [PATCH] feat: developing......... --- .../src/agv_calib_core/CMakeLists.txt | 2 +- .../src/win_ubuntu_bridge/CMakeLists.txt | 2 +- agv_calib_eu/scripts/mock_windows_agv.py | 47 +++++++++++-------- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/agv_calib_brain/src/agv_calib_core/CMakeLists.txt b/agv_calib_brain/src/agv_calib_core/CMakeLists.txt index ca27910..48d21a3 100644 --- a/agv_calib_brain/src/agv_calib_core/CMakeLists.txt +++ b/agv_calib_brain/src/agv_calib_core/CMakeLists.txt @@ -39,7 +39,7 @@ rclcpp_components_register_node(brain_node # 4. 安装工程中所有的核心文件夹 (不可遗漏!) install(TARGETS brain_node brain_node_exe ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib/${PROJECT_NAME} + LIBRARY DESTINATION lib RUNTIME DESTINATION lib/${PROJECT_NAME} ) diff --git a/agv_calib_brain/src/win_ubuntu_bridge/CMakeLists.txt b/agv_calib_brain/src/win_ubuntu_bridge/CMakeLists.txt index bf62849..9851b47 100644 --- a/agv_calib_brain/src/win_ubuntu_bridge/CMakeLists.txt +++ b/agv_calib_brain/src/win_ubuntu_bridge/CMakeLists.txt @@ -148,7 +148,7 @@ install(TARGETS sensor_gateway_node sensor_gateway_node_exe master_node brain_node ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib/${PROJECT_NAME} + LIBRARY DESTINATION lib/ RUNTIME DESTINATION lib/${PROJECT_NAME} ) diff --git a/agv_calib_eu/scripts/mock_windows_agv.py b/agv_calib_eu/scripts/mock_windows_agv.py index 7fed2ff..1069b80 100644 --- a/agv_calib_eu/scripts/mock_windows_agv.py +++ b/agv_calib_eu/scripts/mock_windows_agv.py @@ -2,48 +2,57 @@ import grpc from concurrent import futures import time -# 导入刚才生成的 3 个 Python 契约库 import agv_calib_chassis_pb2 as chassis_pb2, agv_calib_chassis_pb2_grpc as chassis_grpc import agv_calib_control_pb2 as control_pb2, agv_calib_control_pb2_grpc as control_grpc import agv_calib_sensor_pb2 as sensor_pb2, agv_calib_sensor_pb2_grpc as sensor_grpc -# 1. 伪装物理底盘 class FakeChassis(chassis_grpc.AgvCalibChassisServiceServicer): def SetDiagnosticMode(self, request, context): mode = "纯物理直驱" if request.target_mode == 1 else "正常算法" print(f"\n[⚙️ 底盘硬件] 收到 Linux 夺权指令!切换至: {mode}模式") return chassis_pb2.StandardResponse(success=True, message="底盘已交出控制权") - - def StreamHardwareTelemetry(self, request, context): - print("[🌊 底盘硬件] 开始向 Linux 推送 50Hz 硬件裸数据流...") - while context.is_active(): - # 疯狂发送假脉冲数据 - yield chassis_pb2.HardwareState(hardware_timestamp_us=int(time.time()*1000000), encoder_ticks_fl=1024, current_fl_amp=2.5) - time.sleep(0.02) # 50Hz - -# 2. 伪装运控大脑 -class FakeControl(control_grpc.AgvCalibControlServiceServicer): - def InjectTuningParameters(self, request, context): - print(f"\n[🧠 运控大脑] 收到 AI 热注入参数!Kp 被修改为: {request.pid_kp_lateral}") - return control_pb2.StandardResponse(success=True, message="PID参数已瞬间写入内存") -# 3. 伪装传感器代理 +class FakeControl(control_grpc.AgvCalibControlServiceServicer): + pass # 暂未调用,保持空壳即可 + class FakeSensor(sensor_grpc.SensorCalibrationServiceServicer): def TriggerSyncCapture(self, request, context): print(f"\n[📷 传感器代理] 收到冻结指令!要求拍摄: {request.sensor_ids}") - time.sleep(0.5) # 模拟硬件快门延迟 + time.sleep(0.5) print("[📷 传感器代理] 咔嚓!照片和点云已锁存。取件码: 999888777") + # 🚨 吐出取件码给行为树! return sensor_pb2.CaptureResponse(success=True, capture_timestamp_us=999888777) + # 🚨 终极大招:模拟 2MB 大文件的流式分块发送! + def DownloadImage(self, request, context): + print(f"\n[📥 传感器代理] 收到大文件拉取请求!取件码: {request.capture_timestamp_us}, 传感器: {request.sensor_id}") + print("[🌊 传感器代理] 正在切割 2MB 的无损 PNG 假图片,以 512KB 碎片流式发往 Linux...") + + chunk_size = 512 * 1024 # 每次切 512KB + total_chunks = 4 # 发 4 次,共 2MB + + for i in range(total_chunks): + is_last = (i == total_chunks - 1) + # 伪造一点假二进制数据 (带个 PNG 文件头,否则后续 OpenCV 可能会报格式错) + dummy_data = b'\x89PNG\r\n\x1a\n' + b'\x00' * (chunk_size - 8) if i == 0 else b'\x00' * chunk_size + + yield sensor_pb2.FileChunk( + chunk_data=dummy_data, + is_last_chunk=is_last, + format_ext="png" + ) + time.sleep(0.3) # 故意制造网络延迟,观察网关如何应对 + + print("[📥 传感器代理] ✅ 2MB 碎片流全部分发完毕!") + def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - # 三大假硬件全挂载到同一个网络端口! chassis_grpc.add_AgvCalibChassisServiceServicer_to_server(FakeChassis(), server) control_grpc.add_AgvCalibControlServiceServicer_to_server(FakeControl(), server) sensor_grpc.add_SensorCalibrationServiceServicer_to_server(FakeSensor(), server) server.add_insecure_port('[::]:50051') - print("🚀 [全能 Windows 假车端] 已启动,正在监听 50051 端口,等待 ROS 2 召唤...") + print("🚀 [全能 Windows 假车端] 已启动,监听 50051 端口,等待 ROS 2 召唤...") server.start() server.wait_for_termination()