delete agv connect and disconnect interfaces

This commit is contained in:
xtkuang 2026-07-02 17:33:22 +08:00
parent f217ce96c4
commit d04b1920d1
10 changed files with 46 additions and 125 deletions

View File

@ -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 * @brief AgvRuntimeState
*/ */

View File

@ -8,7 +8,7 @@ agv {
} }
agvs { agvs {
id: "agv_src1100" id: "src1100"
src1100_agv { src1100_agv {
ip: "192.168.192.5" ip: "192.168.192.5"
enable: false enable: false

View File

@ -49,7 +49,7 @@ device_manager {
id: "huayan_arm" id: "huayan_arm"
type: DEVICE_TYPE_ROBOT_ARM type: DEVICE_TYPE_ROBOT_ARM
config_file: "devices/arm/huayan_arm.pb.txt" config_file: "devices/arm/huayan_arm.pb.txt"
enable: true enable: false
} }
devices { devices {
@ -67,9 +67,9 @@ device_manager {
} }
devices { devices {
id: "agv_src1100" id: "src1100"
type: DEVICE_TYPE_AGV type: DEVICE_TYPE_AGV
config_file: "devices/agv/agv.pb.txt" config_file: "devices/agv/src1100.pb.txt"
enable: false enable: true
} }
} }

View File

@ -37,23 +37,6 @@ public:
*/ */
virtual AgvNavigationStatus navigationStatus() const { return {}; } 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 * @brief AGV
*/ */

View File

@ -27,8 +27,6 @@ public:
AgvRuntimeState runtimeState() const override; AgvRuntimeState runtimeState() const override;
AgvNavigationStatus navigationStatus() const override; AgvNavigationStatus navigationStatus() const override;
AgvResult connect(const AgvConnectionOptions& options = {}) override;
AgvResult disconnect() override;
AgvResult emergencyStop() override; AgvResult emergencyStop() override;
AgvResult clearFault() override; AgvResult clearFault() override;
@ -63,6 +61,8 @@ private:
int push{19301}; int push{19301};
}; };
AgvResult connect_();
AgvResult disconnect_();
AgvResult connectSocket_(int& sock, int port); AgvResult connectSocket_(int& sock, int port);
void closeSocket_(int& sock) const; void closeSocket_(int& sock) const;
bool connected_() const; bool connected_() const;
@ -85,7 +85,6 @@ private:
config::Src1100AgvConfig config_; config::Src1100AgvConfig config_;
std::string ip_; std::string ip_;
bool enable_{true};
int recv_timeout_ms_{1000}; int recv_timeout_ms_{1000};
Ports ports_; Ports ports_;

View File

@ -116,7 +116,6 @@ AgvTaskType toTaskType(const int value)
Src1100Agv::Src1100Agv(const config::Src1100AgvConfig& cfg) Src1100Agv::Src1100Agv(const config::Src1100AgvConfig& cfg)
: config_(cfg), : config_(cfg),
ip_(cfg.ip()), ip_(cfg.ip()),
enable_(cfg.enable()),
recv_timeout_ms_(cfg.recv_timeout_ms() > 0 ? cfg.recv_timeout_ms() : 1000) recv_timeout_ms_(cfg.recv_timeout_ms() > 0 ? cfg.recv_timeout_ms() : 1000)
{ {
id_ = cfg.id(); 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_config() > 0) ports_.config = cfg.port_config();
if (cfg.port_other() > 0) ports_.other = cfg.port_other(); if (cfg.port_other() > 0) ports_.other = cfg.port_other();
if (cfg.port_push() > 0) ports_.push = cfg.port_push(); 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() Src1100Agv::~Src1100Agv()
{ {
(void)disconnect(); (void)disconnect_();
} }
bool Src1100Agv::init() bool Src1100Agv::init()
@ -140,15 +147,12 @@ bool Src1100Agv::init()
bool Src1100Agv::start() bool Src1100Agv::start()
{ {
if (!enable_) {
return true; return true;
} }
return connect().ok();
}
bool Src1100Agv::stop() bool Src1100Agv::stop()
{ {
return disconnect().ok(); return true;
} }
bool Src1100Agv::update() bool Src1100Agv::update()
@ -216,22 +220,9 @@ AgvNavigationStatus Src1100Agv::navigationStatus() const
return status; return status;
} }
AgvResult Src1100Agv::connect(const AgvConnectionOptions& options) AgvResult Src1100Agv::connect_()
{ {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> 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_status_);
closeSocket_(sock_control_); closeSocket_(sock_control_);
closeSocket_(sock_navigation_); closeSocket_(sock_navigation_);
@ -243,14 +234,36 @@ AgvResult Src1100Agv::connect(const AgvConnectionOptions& options)
return AgvResult::failure(AgvErrorCode::InvalidArgument, "SRC1100 AGV ip is empty"); return AgvResult::failure(AgvErrorCode::InvalidArgument, "SRC1100 AGV ip is empty");
} }
if (auto result = connectSocket_(sock_status_, ports_.status); !result.ok()) return result; const auto close_all = [this]() {
if (auto result = connectSocket_(sock_control_, ports_.control); !result.ok()) return result; closeSocket_(sock_status_);
if (auto result = connectSocket_(sock_navigation_, ports_.navigation); !result.ok()) return result; closeSocket_(sock_control_);
if (auto result = connectSocket_(sock_config_, ports_.config); !result.ok()) return result; 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(); return AgvResult::success();
} }
AgvResult Src1100Agv::disconnect() AgvResult Src1100Agv::disconnect_()
{ {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
closeSocket_(sock_status_); closeSocket_(sock_status_);

View File

@ -18,12 +18,6 @@ public:
grpc::Status getNavigationStatus(grpc::ServerContext* context, grpc::Status getNavigationStatus(grpc::ServerContext* context,
const api::AgvNavigationStatusCommand_Request* request, const api::AgvNavigationStatusCommand_Request* request,
api::AgvNavigationStatusCommand_Feedback* response) override; 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, grpc::Status emergencyStop(grpc::ServerContext* context,
const api::CommandHeader_Request* request, const api::CommandHeader_Request* request,
api::CommandHeader_Feedback* response) override; api::CommandHeader_Feedback* response) override;

View File

@ -66,15 +66,6 @@ device::AgvAdapterParams toAdapterParams(const msgs::AgvAdapterParams& src)
return dst; 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 toMotionOptions(const msgs::AgvMotionOptions& src)
{ {
device::AgvMotionOptions dst; 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::AbstractAGV>(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<device::AbstractAGV>(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*, grpc::Status gRPCAgvServiceImpl::emergencyStop(grpc::ServerContext*,
const api::CommandHeader_Request* request, const api::CommandHeader_Request* request,
api::CommandHeader_Feedback* response) api::CommandHeader_Feedback* response)

View File

@ -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 AgvNavigateToPoseCommand {
message Request { message Request {
CommandHeader.Request header = 1; CommandHeader.Request header = 1;

View File

@ -8,8 +8,6 @@ import "cmvr/api/agv_command.proto";
service AgvService { service AgvService {
rpc getRuntimeState(AgvRuntimeStateCommand.Request) returns (AgvRuntimeStateCommand.Feedback); rpc getRuntimeState(AgvRuntimeStateCommand.Request) returns (AgvRuntimeStateCommand.Feedback);
rpc getNavigationStatus(AgvNavigationStatusCommand.Request) returns (AgvNavigationStatusCommand.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 emergencyStop(CommandHeader.Request) returns (CommandHeader.Feedback);
rpc clearFault(CommandHeader.Request) returns (CommandHeader.Feedback); rpc clearFault(CommandHeader.Request) returns (CommandHeader.Feedback);
rpc navigateToPose(AgvNavigateToPoseCommand.Request) returns (AgvNavigateToPoseCommand.Feedback); rpc navigateToPose(AgvNavigateToPoseCommand.Request) returns (AgvNavigateToPoseCommand.Feedback);