feat: developing.........

This commit is contained in:
li-shihao-code
2026-03-06 17:41:41 +08:00
parent 18d6500d04
commit 01960271f7
3 changed files with 30 additions and 21 deletions
+28 -19
View File
@@ -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()