Files
AutoCalib-Workshop/agv_calib_eu/main.cpp
T

47 lines
1.7 KiB
C++

#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
// 包含刚才手动翻译出的头文件
#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<grpc::Server> server(builder.BuildAndStart());
std::cout << "🚀 Windows 车端 gRPC 代理已启动,监听外部请求: " << server_address << std::endl;
server->Wait();
}
int main() {
RunServer();
return 0;
}