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 一部分暴露的电池信息。
|
* @brief 作为 AgvRuntimeState 一部分暴露的电池信息。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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
|
||||||
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 急停行为。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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_;
|
||||||
|
|
||||||
|
|||||||
@ -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_);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user