fix system status device metadata

This commit is contained in:
xtkuang 2026-09-22 15:48:33 +08:00
parent ed9df8fd31
commit 09dad196db
2 changed files with 111 additions and 31 deletions

View File

@ -11,6 +11,79 @@
using namespace cmvr::device;
using namespace cmvr::service;
namespace {
namespace device = cmvr::device;
cmvr::api::DeviceType toApiDeviceType(device::DeviceKind kind)
{
switch (kind) {
case device::DeviceKind::AGV: return cmvr::api::DeviceType::AGV;
case device::DeviceKind::Arm:
case device::DeviceKind::Robot: return cmvr::api::DeviceType::Robot;
case device::DeviceKind::Battery: return cmvr::api::DeviceType::Battery;
case device::DeviceKind::BioHead: return cmvr::api::DeviceType::BioHead;
case device::DeviceKind::Camera: return cmvr::api::DeviceType::Camera;
case device::DeviceKind::CanBus: return cmvr::api::DeviceType::CanBus;
case device::DeviceKind::DexHand: return cmvr::api::DeviceType::DexHand;
case device::DeviceKind::Gripper: return cmvr::api::DeviceType::Gripper;
case device::DeviceKind::Microphone: return cmvr::api::DeviceType::Microphone;
case device::DeviceKind::Motor: return cmvr::api::DeviceType::Motor;
case device::DeviceKind::MotorSystem: return cmvr::api::DeviceType::MotorSystem;
case device::DeviceKind::MujocoViewer: return cmvr::api::DeviceType::MujocoViewer;
case device::DeviceKind::MujocoWorld: return cmvr::api::DeviceType::MujocoWorld;
case device::DeviceKind::Speaker: return cmvr::api::DeviceType::Speaker;
case device::DeviceKind::Unknown:
default: return cmvr::api::DeviceType::Unknown;
}
}
cmvr::api::DeviceKind toApiDeviceKind(device::DeviceKind kind)
{
switch (kind) {
case device::DeviceKind::AGV: return cmvr::api::DEVICE_KIND_AGV;
case device::DeviceKind::Arm: return cmvr::api::DEVICE_KIND_ARM;
case device::DeviceKind::Battery: return cmvr::api::DEVICE_KIND_BATTERY;
case device::DeviceKind::BioHead: return cmvr::api::DEVICE_KIND_BIO_HEAD;
case device::DeviceKind::Camera: return cmvr::api::DEVICE_KIND_CAMERA;
case device::DeviceKind::CanBus: return cmvr::api::DEVICE_KIND_CAN_BUS;
case device::DeviceKind::DexHand: return cmvr::api::DEVICE_KIND_DEX_HAND;
case device::DeviceKind::Gripper: return cmvr::api::DEVICE_KIND_GRIPPER;
case device::DeviceKind::Microphone: return cmvr::api::DEVICE_KIND_MICROPHONE;
case device::DeviceKind::Motor: return cmvr::api::DEVICE_KIND_MOTOR;
case device::DeviceKind::MotorSystem: return cmvr::api::DEVICE_KIND_MOTOR_SYSTEM;
case device::DeviceKind::MujocoViewer: return cmvr::api::DEVICE_KIND_MUJOCO_VIEWER;
case device::DeviceKind::MujocoWorld: return cmvr::api::DEVICE_KIND_MUJOCO_WORLD;
case device::DeviceKind::Robot: return cmvr::api::DEVICE_KIND_ROBOT;
case device::DeviceKind::Speaker: return cmvr::api::DEVICE_KIND_SPEAKER;
case device::DeviceKind::Unknown:
default: return cmvr::api::DEVICE_KIND_UNKNOWN;
}
}
std::string vendorForDriverType(const std::string& driver_type)
{
if (driver_type == "AuboARM") return "AUBO";
if (driver_type == "HuayanRobot") return "HUAYAN";
if (driver_type == "SeerRobokitAgv") return "SEER";
if (driver_type == "HikvisionCamera") return "HIKVISION";
if (driver_type == "RealSenseCamera") return "Intel RealSense";
if (driver_type == "MechmindCamera") return "Mech-Mind";
if (driver_type == "RH56DFTPDexhand") return "Inspire Robots";
if (driver_type == "ZeroSimTouchDexHand") return "ZeroSim";
if (driver_type == "EyouMotor") return "EYOU";
if (driver_type == "Ti5Motor") return "TI5";
if (driver_type == "MujocoMotor" || driver_type == "MujocoCamera") return "MuJoCo";
if (driver_type == "MyAgv" || driver_type == "MotorRobotArm"
|| driver_type == "BioHeadRobot") return "CMVR";
if (driver_type == "FFMpegMicroPhone" || driver_type == "FFMpegSpeaker") return "FFmpeg";
if (driver_type == "UVCCamera") return "UVC";
if (driver_type == "PX6AXGen3") return "PX6AX";
return {};
}
} // namespace
gRPCSystemServiceImpl::gRPCSystemServiceImpl()
: dmgr_(DeviceManager::getInstance()),
action_queue_(std::make_unique<ActionQueue>(
@ -56,38 +129,14 @@ grpc::Status gRPCSystemServiceImpl::GetSystemStatus(grpc::ServerContext* context
const api::GetSystemStatusCommand_Request* request, api::GetSystemStatusCommand_Feedback* response)
{
try {
std::list<std::pair<std::string, std::string>> dev_list;
dmgr_.getDeviceList(dev_list);
for (auto &pair: dev_list) {
const auto snapshot = dmgr_.snapshot();
for (const auto& device : snapshot.devices) {
auto* dev = response->add_device_list();
dev->set_device_id(pair.first);
if (pair.second == "AGV") {
dev->set_device_type(api::DeviceType::AGV);
}
else if (pair.second == "Battery") {
dev->set_device_type(api::DeviceType::Battery);
}
else if (pair.second == "Camera") {
dev->set_device_type(api::DeviceType::Camera);
}
else if (pair.second == "DexHand") {
dev->set_device_type(api::DeviceType::DexHand);
}
else if (pair.second == "Gripper") {
dev->set_device_type(api::DeviceType::Gripper);
}
else if (pair.second == "Microphone") {
dev->set_device_type(api::DeviceType::Microphone);
}
else if (pair.second == "Robot") {
dev->set_device_type(api::DeviceType::Robot);
}
else if (pair.second == "Speaker") {
dev->set_device_type(api::DeviceType::Speaker);
}
else if (pair.second == "Unknown") {
dev->set_device_type(api::DeviceType::Unknown);
}
dev->set_device_id(device.id);
dev->set_device_type(toApiDeviceType(device.kind));
dev->set_device_kind(toApiDeviceKind(device.kind));
dev->set_driver_type(device.type_name);
dev->set_vendor(vendorForDriverType(device.type_name));
}
response->mutable_header()->set_success(true);
setCurrentTimestamp(response->mutable_header()->mutable_timestamp());

View File

@ -14,12 +14,43 @@ enum DeviceType {
Microphone = 5;
Robot = 6;
Speaker = 7;
BioHead = 8;
Motor = 9;
MotorSystem = 10;
MujocoWorld = 11;
MujocoViewer = 12;
CanBus = 13;
Unknown = 20;
}
// 设备在 cmvr-es 运行时中的稳定大类,与具体厂商驱动无关。
enum DeviceKind {
DEVICE_KIND_UNKNOWN = 0;
DEVICE_KIND_AGV = 1;
DEVICE_KIND_ARM = 2;
DEVICE_KIND_BATTERY = 3;
DEVICE_KIND_BIO_HEAD = 4;
DEVICE_KIND_CAMERA = 5;
DEVICE_KIND_CAN_BUS = 6;
DEVICE_KIND_DEX_HAND = 7;
DEVICE_KIND_GRIPPER = 8;
DEVICE_KIND_MICROPHONE = 9;
DEVICE_KIND_MOTOR = 10;
DEVICE_KIND_MOTOR_SYSTEM = 11;
DEVICE_KIND_MUJOCO_VIEWER = 12;
DEVICE_KIND_MUJOCO_WORLD = 13;
DEVICE_KIND_ROBOT = 14;
DEVICE_KIND_SPEAKER = 15;
}
message DeviceList {
string device_id = 1;
DeviceType device_type = 2;
DeviceKind device_kind = 3;
// 具体运行时驱动类型,例如 AuboARM、HuayanRobot、SeerRobokitAgv。
string driver_type = 4;
// 厂商或驱动生态,例如 AUBO、HUAYAN、SEER。
string vendor = 5;
}
message GetSystemInfoCommand {