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
*/

View File

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

View File

@ -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
}
}

View File

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

View File

@ -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_;

View File

@ -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();
}
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<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_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<std::mutex> lock(mutex_);
closeSocket_(sock_status_);

View File

@ -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;

View File

@ -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::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*,
const api::CommandHeader_Request* request,
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 Request {
CommandHeader.Request header = 1;

View File

@ -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);