#include #include #include #include // 包含刚才手动翻译出的头文件 #include "agv_calib_control.grpc.pb.h" using namespace agv::calibration::control; // 继承并实现定义在 .proto 里的服务契约 class AgvCalibServiceImpl final : public AgvCalibControlService::Service { // 覆盖接管控制权的方法 grpc::Status SetControlMode(grpc::ServerContext* context, const ModeRequest* request, StandardResponse* reply) override { if (request->target_mode() == ModeRequest::OPEN_LOOP_MODE) { std::cout << "\n[Windows底层] 收到 Linux 指令: 进入开环提线木偶模式" << std::endl; // TODO: 在这里调用 Windows 原有的底盘驱动 DLL 或 CAN 接口,切断避障算法 reply->set_success(true); reply->set_message("Windows 已交出控制权,避障与运动学逆解已关闭"); } return grpc::Status::OK; } // TODO: 接着 override 实现 ExecuteOpenLoopCmd 等其他函数... }; void RunServer() { // 🚨 关键排雷:必须绑定 0.0.0.0,千万不要写 localhost 或 127.0.0.1,否则 ROS2 连不上! std::string server_address("0.0.0.0:50051"); AgvCalibServiceImpl service; grpc::ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr server(builder.BuildAndStart()); std::cout << "🚀 Windows 车端 gRPC 代理已启动,监听外部请求: " << server_address << std::endl; server->Wait(); } int main() { RunServer(); return 0; }