delete agv connect and disconnect interfaces
This commit is contained in:
parent
f217ce96c4
commit
d04b1920d1
@ -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 一部分暴露的电池信息。
|
||||
*/
|
||||
|
||||
@ -8,7 +8,7 @@ agv {
|
||||
}
|
||||
|
||||
agvs {
|
||||
id: "agv_src1100"
|
||||
id: "src1100"
|
||||
src1100_agv {
|
||||
ip: "192.168.192.5"
|
||||
enable: false
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 急停行为。
|
||||
*/
|
||||
|
||||
@ -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_;
|
||||
|
||||
|
||||
@ -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<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_);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user