From d04b1920d15ee4f3244ace8791ff62376e8d629d Mon Sep 17 00:00:00 2001 From: xtkuang <87661715@qq.com> Date: Thu, 2 Jul 2026 17:33:22 +0800 Subject: [PATCH] delete agv connect and disconnect interfaces --- cmvr-es/common/types/agv/agv_types.h | 12 ---- .../agv/{agv.pb.txt => src1100.pb.txt} | 2 +- cmvr-es/config/manager/device_manager.pb.txt | 8 +-- cmvr-es/devices/agv/abstract_agv.h | 17 ----- .../devices/agv/src1100/include/src1100_agv.h | 5 +- .../devices/agv/src1100/src/src1100_agv.cpp | 65 +++++++++++-------- .../service/grpc/include/grpc_agv_service.h | 6 -- cmvr-es/service/grpc/src/grpc_agv_service.cpp | 42 ------------ protos/cmvr/api/agv_command.proto | 12 ---- protos/cmvr/api/agv_service.proto | 2 - 10 files changed, 46 insertions(+), 125 deletions(-) rename cmvr-es/config/devices/agv/{agv.pb.txt => src1100.pb.txt} (94%) diff --git a/cmvr-es/common/types/agv/agv_types.h b/cmvr-es/common/types/agv/agv_types.h index 12f53b3f..4c9986e1 100644 --- a/cmvr-es/common/types/agv/agv_types.h +++ b/cmvr-es/common/types/agv/agv_types.h @@ -165,18 +165,6 @@ struct AgvAdapterParams { } }; -/** - * @brief AGV 驱动连接信息。 - * - * 简单设备可只使用 ip/port。多端口、认证信息或其他连接参数可通过 - * adapter_params 传给具体实现。 - */ -struct AgvConnectionOptions { - std::string ip; - int port{0}; - AgvAdapterParams adapter_params; -}; - /** * @brief 作为 AgvRuntimeState 一部分暴露的电池信息。 */ diff --git a/cmvr-es/config/devices/agv/agv.pb.txt b/cmvr-es/config/devices/agv/src1100.pb.txt similarity index 94% rename from cmvr-es/config/devices/agv/agv.pb.txt rename to cmvr-es/config/devices/agv/src1100.pb.txt index 44b94ba7..64790217 100644 --- a/cmvr-es/config/devices/agv/agv.pb.txt +++ b/cmvr-es/config/devices/agv/src1100.pb.txt @@ -8,7 +8,7 @@ agv { } agvs { - id: "agv_src1100" + id: "src1100" src1100_agv { ip: "192.168.192.5" enable: false diff --git a/cmvr-es/config/manager/device_manager.pb.txt b/cmvr-es/config/manager/device_manager.pb.txt index ad9c4633..bcf234b8 100644 --- a/cmvr-es/config/manager/device_manager.pb.txt +++ b/cmvr-es/config/manager/device_manager.pb.txt @@ -49,7 +49,7 @@ device_manager { id: "huayan_arm" type: DEVICE_TYPE_ROBOT_ARM config_file: "devices/arm/huayan_arm.pb.txt" - enable: true + enable: false } devices { @@ -67,9 +67,9 @@ device_manager { } devices { - id: "agv_src1100" + id: "src1100" type: DEVICE_TYPE_AGV - config_file: "devices/agv/agv.pb.txt" - enable: false + config_file: "devices/agv/src1100.pb.txt" + enable: true } } diff --git a/cmvr-es/devices/agv/abstract_agv.h b/cmvr-es/devices/agv/abstract_agv.h index 3811283e..0e2af167 100644 --- a/cmvr-es/devices/agv/abstract_agv.h +++ b/cmvr-es/devices/agv/abstract_agv.h @@ -37,23 +37,6 @@ public: */ virtual AgvNavigationStatus navigationStatus() const { return {}; } - /** - * @brief 建立与 AGV 的通信连接。 - */ - virtual AgvResult connect(const AgvConnectionOptions& options = {}) - { - (void)options; - return AgvResult::failure(AgvErrorCode::UnsupportedCommand, "connect not implemented"); - } - - /** - * @brief 关闭与 AGV 的通信连接。 - */ - virtual AgvResult disconnect() - { - return AgvResult::failure(AgvErrorCode::UnsupportedCommand, "disconnect not implemented"); - } - /** * @brief 触发 AGV 急停行为。 */ diff --git a/cmvr-es/devices/agv/src1100/include/src1100_agv.h b/cmvr-es/devices/agv/src1100/include/src1100_agv.h index 4e52af69..d86a92f8 100644 --- a/cmvr-es/devices/agv/src1100/include/src1100_agv.h +++ b/cmvr-es/devices/agv/src1100/include/src1100_agv.h @@ -27,8 +27,6 @@ public: AgvRuntimeState runtimeState() const override; AgvNavigationStatus navigationStatus() const override; - AgvResult connect(const AgvConnectionOptions& options = {}) override; - AgvResult disconnect() override; AgvResult emergencyStop() override; AgvResult clearFault() override; @@ -63,6 +61,8 @@ private: int push{19301}; }; + AgvResult connect_(); + AgvResult disconnect_(); AgvResult connectSocket_(int& sock, int port); void closeSocket_(int& sock) const; bool connected_() const; @@ -85,7 +85,6 @@ private: config::Src1100AgvConfig config_; std::string ip_; - bool enable_{true}; int recv_timeout_ms_{1000}; Ports ports_; diff --git a/cmvr-es/devices/agv/src1100/src/src1100_agv.cpp b/cmvr-es/devices/agv/src1100/src/src1100_agv.cpp index 65c07fc5..9eb5d216 100644 --- a/cmvr-es/devices/agv/src1100/src/src1100_agv.cpp +++ b/cmvr-es/devices/agv/src1100/src/src1100_agv.cpp @@ -116,7 +116,6 @@ AgvTaskType toTaskType(const int value) Src1100Agv::Src1100Agv(const config::Src1100AgvConfig& cfg) : config_(cfg), ip_(cfg.ip()), - enable_(cfg.enable()), recv_timeout_ms_(cfg.recv_timeout_ms() > 0 ? cfg.recv_timeout_ms() : 1000) { id_ = cfg.id(); @@ -126,11 +125,19 @@ Src1100Agv::Src1100Agv(const config::Src1100AgvConfig& cfg) if (cfg.port_config() > 0) ports_.config = cfg.port_config(); if (cfg.port_other() > 0) ports_.other = cfg.port_other(); if (cfg.port_push() > 0) ports_.push = cfg.port_push(); + + const auto result = connect_(); + if (!result.ok()) { + CMVR_LOG(ERROR) << "[Src1100Agv] Auto connect failed" + << ", id=" << id_ + << ", ip=" << ip_ + << ", error=" << result.message; + } } Src1100Agv::~Src1100Agv() { - (void)disconnect(); + (void)disconnect_(); } bool Src1100Agv::init() @@ -140,15 +147,12 @@ bool Src1100Agv::init() bool Src1100Agv::start() { - if (!enable_) { - return true; - } - return connect().ok(); + return true; } bool Src1100Agv::stop() { - return disconnect().ok(); + return true; } bool Src1100Agv::update() @@ -216,22 +220,9 @@ AgvNavigationStatus Src1100Agv::navigationStatus() const return status; } -AgvResult Src1100Agv::connect(const AgvConnectionOptions& options) +AgvResult Src1100Agv::connect_() { std::lock_guard lock(mutex_); - if (!options.ip.empty()) { - ip_ = options.ip; - } - if (options.port > 0) { - ports_.control = options.port; - } - ports_.status = optionalInt_(options.adapter_params, "port_status", ports_.status); - ports_.control = optionalInt_(options.adapter_params, "port_control", ports_.control); - ports_.navigation = optionalInt_(options.adapter_params, "port_nav", ports_.navigation); - ports_.config = optionalInt_(options.adapter_params, "port_config", ports_.config); - ports_.other = optionalInt_(options.adapter_params, "port_other", ports_.other); - ports_.push = optionalInt_(options.adapter_params, "port_push", ports_.push); - closeSocket_(sock_status_); closeSocket_(sock_control_); closeSocket_(sock_navigation_); @@ -243,14 +234,36 @@ AgvResult Src1100Agv::connect(const AgvConnectionOptions& options) return AgvResult::failure(AgvErrorCode::InvalidArgument, "SRC1100 AGV ip is empty"); } - if (auto result = connectSocket_(sock_status_, ports_.status); !result.ok()) return result; - if (auto result = connectSocket_(sock_control_, ports_.control); !result.ok()) return result; - if (auto result = connectSocket_(sock_navigation_, ports_.navigation); !result.ok()) return result; - if (auto result = connectSocket_(sock_config_, ports_.config); !result.ok()) return result; + const auto close_all = [this]() { + closeSocket_(sock_status_); + closeSocket_(sock_control_); + closeSocket_(sock_navigation_); + closeSocket_(sock_config_); + closeSocket_(sock_other_); + closeSocket_(sock_push_); + }; + + if (auto result = connectSocket_(sock_status_, ports_.status); !result.ok()) { + close_all(); + return result; + } + if (auto result = connectSocket_(sock_control_, ports_.control); !result.ok()) { + close_all(); + return result; + } + if (auto result = connectSocket_(sock_navigation_, ports_.navigation); !result.ok()) { + close_all(); + return result; + } + if (auto result = connectSocket_(sock_config_, ports_.config); !result.ok()) { + close_all(); + return result; + } + last_error_.clear(); return AgvResult::success(); } -AgvResult Src1100Agv::disconnect() +AgvResult Src1100Agv::disconnect_() { std::lock_guard lock(mutex_); closeSocket_(sock_status_); diff --git a/cmvr-es/service/grpc/include/grpc_agv_service.h b/cmvr-es/service/grpc/include/grpc_agv_service.h index 8158a710..26195986 100644 --- a/cmvr-es/service/grpc/include/grpc_agv_service.h +++ b/cmvr-es/service/grpc/include/grpc_agv_service.h @@ -18,12 +18,6 @@ public: grpc::Status getNavigationStatus(grpc::ServerContext* context, const api::AgvNavigationStatusCommand_Request* request, api::AgvNavigationStatusCommand_Feedback* response) override; - grpc::Status connect(grpc::ServerContext* context, - const api::AgvConnectCommand_Request* request, - api::AgvConnectCommand_Feedback* response) override; - grpc::Status disconnect(grpc::ServerContext* context, - const api::CommandHeader_Request* request, - api::CommandHeader_Feedback* response) override; grpc::Status emergencyStop(grpc::ServerContext* context, const api::CommandHeader_Request* request, api::CommandHeader_Feedback* response) override; diff --git a/cmvr-es/service/grpc/src/grpc_agv_service.cpp b/cmvr-es/service/grpc/src/grpc_agv_service.cpp index a8c16945..200adf6e 100644 --- a/cmvr-es/service/grpc/src/grpc_agv_service.cpp +++ b/cmvr-es/service/grpc/src/grpc_agv_service.cpp @@ -66,15 +66,6 @@ device::AgvAdapterParams toAdapterParams(const msgs::AgvAdapterParams& src) return dst; } -device::AgvConnectionOptions toConnectionOptions(const api::AgvConnectCommand_Request& src) -{ - device::AgvConnectionOptions dst; - dst.ip = src.ip(); - dst.port = src.port(); - dst.adapter_params = toAdapterParams(src.adapter_params()); - return dst; -} - device::AgvMotionOptions toMotionOptions(const msgs::AgvMotionOptions& src) { device::AgvMotionOptions dst; @@ -208,39 +199,6 @@ grpc::Status gRPCAgvServiceImpl::getNavigationStatus(grpc::ServerContext*, } } -grpc::Status gRPCAgvServiceImpl::connect(grpc::ServerContext*, - const api::AgvConnectCommand_Request* request, - api::AgvConnectCommand_Feedback* response) -{ - try { - const std::string device_id = request->header().device_id(); - auto agv = dmgr_.getDevice(device_id); - if (!agv) { - return setDeviceNotFound(response, device_id); - } - return setResponseResult(response, agv->connect(toConnectionOptions(*request))); - } catch (const std::exception& e) { - fillFeedback(response->mutable_header(), false, e.what()); - return grpc::Status(grpc::StatusCode::INTERNAL, e.what()); - } -} - -grpc::Status gRPCAgvServiceImpl::disconnect(grpc::ServerContext*, - const api::CommandHeader_Request* request, - api::CommandHeader_Feedback* response) -{ - try { - auto agv = dmgr_.getDevice(request->device_id()); - if (!agv) { - return setDeviceNotFound(response, request->device_id()); - } - return setResponseResult(response, agv->disconnect()); - } catch (const std::exception& e) { - fillFeedback(response, false, e.what()); - return grpc::Status(grpc::StatusCode::INTERNAL, e.what()); - } -} - grpc::Status gRPCAgvServiceImpl::emergencyStop(grpc::ServerContext*, const api::CommandHeader_Request* request, api::CommandHeader_Feedback* response) diff --git a/protos/cmvr/api/agv_command.proto b/protos/cmvr/api/agv_command.proto index 48a40f16..a7e7f76b 100644 --- a/protos/cmvr/api/agv_command.proto +++ b/protos/cmvr/api/agv_command.proto @@ -25,18 +25,6 @@ message AgvNavigationStatusCommand { } } -message AgvConnectCommand { - message Request { - CommandHeader.Request header = 1; - string ip = 2; - int32 port = 3; - cmvr.msgs.AgvAdapterParams adapter_params = 4; - } - message Feedback { - CommandHeader.Feedback header = 1; - } -} - message AgvNavigateToPoseCommand { message Request { CommandHeader.Request header = 1; diff --git a/protos/cmvr/api/agv_service.proto b/protos/cmvr/api/agv_service.proto index 55d485de..a460e146 100644 --- a/protos/cmvr/api/agv_service.proto +++ b/protos/cmvr/api/agv_service.proto @@ -8,8 +8,6 @@ import "cmvr/api/agv_command.proto"; service AgvService { rpc getRuntimeState(AgvRuntimeStateCommand.Request) returns (AgvRuntimeStateCommand.Feedback); rpc getNavigationStatus(AgvNavigationStatusCommand.Request) returns (AgvNavigationStatusCommand.Feedback); - rpc connect(AgvConnectCommand.Request) returns (AgvConnectCommand.Feedback); - rpc disconnect(CommandHeader.Request) returns (CommandHeader.Feedback); rpc emergencyStop(CommandHeader.Request) returns (CommandHeader.Feedback); rpc clearFault(CommandHeader.Request) returns (CommandHeader.Feedback); rpc navigateToPose(AgvNavigateToPoseCommand.Request) returns (AgvNavigateToPoseCommand.Feedback);