update
This commit is contained in:
parent
bb6dbe5bdd
commit
a6ab0f3790
@ -2,7 +2,7 @@ from .client import CMVRGrpcClient
|
|||||||
from .enums import CMVRErrorCode, DeviceState, FingerType
|
from .enums import CMVRErrorCode, DeviceState, FingerType
|
||||||
from .models import (
|
from .models import (
|
||||||
MicState, SpeakerState, CameraState,
|
MicState, SpeakerState, CameraState,
|
||||||
RH56DFTPDexHand, DexHandState, FacialExpressionState,
|
FreedomState, DexHandState, FacialExpressionState,
|
||||||
FingerTactileData, PalmTactileData, HandTactileSensors
|
FingerTactileData, PalmTactileData, HandTactileSensors
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -10,6 +10,6 @@ __all__ = [
|
|||||||
'CMVRGrpcClient',
|
'CMVRGrpcClient',
|
||||||
'CMVRErrorCode', 'DeviceState', 'FingerType',
|
'CMVRErrorCode', 'DeviceState', 'FingerType',
|
||||||
'MicState', 'SpeakerState', 'CameraState',
|
'MicState', 'SpeakerState', 'CameraState',
|
||||||
'RH56DFTPDexHand', 'DexHandState', 'FacialExpressionState',
|
'FreedomState', 'DexHandState', 'FacialExpressionState',
|
||||||
'FingerTactileData', 'PalmTactileData', 'HandTactileSensors'
|
'FingerTactileData', 'PalmTactileData', 'HandTactileSensors'
|
||||||
]
|
]
|
||||||
@ -6,7 +6,7 @@ from typing import Tuple
|
|||||||
|
|
||||||
from .enums import CMVRErrorCode
|
from .enums import CMVRErrorCode
|
||||||
from .models import CameraState
|
from .models import CameraState
|
||||||
|
from .models import Rs2Intrinsics
|
||||||
class CameraClient:
|
class CameraClient:
|
||||||
"""相机客户端"""
|
"""相机客户端"""
|
||||||
|
|
||||||
@ -116,6 +116,23 @@ class CameraClient:
|
|||||||
# 将字节数据转换为numpy数组
|
# 将字节数据转换为numpy数组
|
||||||
img_data = np.frombuffer(response.color_frame.data, dtype=np.uint8)
|
img_data = np.frombuffer(response.color_frame.data, dtype=np.uint8)
|
||||||
|
|
||||||
|
|
||||||
|
# 从 Protobuf 消息中读取 intrinsics 数据
|
||||||
|
protobuf_intrinsics = response.intrinsics
|
||||||
|
|
||||||
|
# 构造 Python 数据类对象(字段名称完全对应)
|
||||||
|
python_intrinsics = Rs2Intrinsics(
|
||||||
|
cx=protobuf_intrinsics.cx,
|
||||||
|
cy=protobuf_intrinsics.cy,
|
||||||
|
fx=protobuf_intrinsics.fx,
|
||||||
|
fy=protobuf_intrinsics.fy,
|
||||||
|
coeffs=list(protobuf_intrinsics.coeffs) # Protobuf repeated 字段通常是列表类型,直接转换
|
||||||
|
)
|
||||||
|
|
||||||
|
# 示例:访问读取后的数据
|
||||||
|
print(f"主点坐标: ({python_intrinsics.cx}, {python_intrinsics.cy})")
|
||||||
|
print(f"焦距: ({python_intrinsics.fx}, {python_intrinsics.fy})")
|
||||||
|
print(f"畸变系数: {python_intrinsics.coeffs}")
|
||||||
# 重塑为图像格式 (height, width, channels)
|
# 重塑为图像格式 (height, width, channels)
|
||||||
channels = 3 # 假设是RGB图像
|
channels = 3 # 假设是RGB图像
|
||||||
if size == width * height * channels:
|
if size == width * height * channels:
|
||||||
|
|||||||
@ -4,7 +4,7 @@ from typing import Tuple
|
|||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from .enums import CMVRErrorCode, FingerType
|
from .enums import CMVRErrorCode, FingerType
|
||||||
from .models import DexHandState, RH56DFTPDexHand, HandTactileSensors
|
from .models import DexHandState, FreedomState, HandTactileSensors
|
||||||
|
|
||||||
class DexHandClient:
|
class DexHandClient:
|
||||||
"""灵巧手客户端"""
|
"""灵巧手客户端"""
|
||||||
@ -57,7 +57,7 @@ class DexHandClient:
|
|||||||
# 填充手指状态
|
# 填充手指状态
|
||||||
for i, hand_state in enumerate(response.state.hands):
|
for i, hand_state in enumerate(response.state.hands):
|
||||||
if i < len(state.hands):
|
if i < len(state.hands):
|
||||||
state.hands[i] = RH56DFTPDexHand(
|
state.hands[i] = FreedomState(
|
||||||
angle=hand_state.angle,
|
angle=hand_state.angle,
|
||||||
speed=hand_state.speed,
|
speed=hand_state.speed,
|
||||||
force=hand_state.force,
|
force=hand_state.force,
|
||||||
|
|||||||
@ -30,9 +30,18 @@ class CameraState:
|
|||||||
width: int = 0
|
width: int = 0
|
||||||
height: int = 0
|
height: int = 0
|
||||||
fps: int = 0
|
fps: int = 0
|
||||||
|
@dataclass
|
||||||
|
class CameraIntrinsics:
|
||||||
|
"""相机内参(与Protobuf Rs2Intrinsics对齐)"""
|
||||||
|
cx: float = 0.0 # 对应Protobuf tag=1
|
||||||
|
cy: float = 0.0 # 对应Protobuf tag=2
|
||||||
|
fx: float = 0.0 # 对应Protobuf tag=3
|
||||||
|
fy: float = 0.0 # 对应Protobuf tag=4
|
||||||
|
# 畸变系数:固定5个元素(k1, k2, p1, p2, k3),与Protobuf tag=5对齐
|
||||||
|
coeffs: List[float] = field(default_factory=lambda: [0.0]*5)
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class RH56DFTPDexHand:
|
class FreedomState:
|
||||||
"""灵巧手自由度状态"""
|
"""灵巧手自由度状态"""
|
||||||
dof_id: int = 0
|
dof_id: int = 0
|
||||||
angle: int = 0
|
angle: int = 0
|
||||||
@ -48,7 +57,7 @@ class RH56DFTPDexHand:
|
|||||||
class DexHandState:
|
class DexHandState:
|
||||||
"""灵巧手整体状态"""
|
"""灵巧手整体状态"""
|
||||||
is_initialized: bool = False
|
is_initialized: bool = False
|
||||||
hands: List[RH56DFTPDexHand] = field(default_factory=lambda: [RH56DFTPDexHand() for _ in range(6)])
|
hands: List[FreedomState] = field(default_factory=lambda: [FreedomState() for _ in range(6)])
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FacialExpressionState:
|
class FacialExpressionState:
|
||||||
|
|||||||
@ -659,8 +659,8 @@ def test_microphone():
|
|||||||
print(f"开始录音失败,错误码: {result}")
|
print(f"开始录音失败,错误码: {result}")
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
test_biohead()
|
# test_biohead()
|
||||||
# test_camera()
|
test_camera()
|
||||||
# test_rgb_image_stream()
|
# test_rgb_image_stream()
|
||||||
# test_dexhand()
|
# test_dexhand()
|
||||||
# test_sensor_data_stream()
|
# test_sensor_data_stream()
|
||||||
|
|||||||
@ -21,6 +21,14 @@ message FrameData {
|
|||||||
bool is_key_frame = 6;
|
bool is_key_frame = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message CameraIntrinsics {
|
||||||
|
float cx = 1; // 主点水平坐标(从左边缘的像素偏移)
|
||||||
|
float cy = 2; // 主点垂直坐标(从上边缘的像素偏移)
|
||||||
|
float fx = 3; // x方向焦距(像素宽度的倍数)
|
||||||
|
float fy = 4; // y方向焦距(像素高度的倍数)
|
||||||
|
repeated float coeffs = 5 [packed = true]; // 畸变系数(固定5个元素)
|
||||||
|
}
|
||||||
|
|
||||||
message CameraState {
|
message CameraState {
|
||||||
bool is_initialized = 1;
|
bool is_initialized = 1;
|
||||||
bool is_opened = 2;
|
bool is_opened = 2;
|
||||||
@ -71,6 +79,7 @@ message GetRGBImageCommand {
|
|||||||
message Feedback {
|
message Feedback {
|
||||||
CommandHeader.Feedback header = 1;
|
CommandHeader.Feedback header = 1;
|
||||||
FrameData color_frame = 2;
|
FrameData color_frame = 2;
|
||||||
|
CameraIntrinsics intrinsics = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +91,7 @@ message GetDepthImageCommand {
|
|||||||
message Feedback {
|
message Feedback {
|
||||||
CommandHeader.Feedback header = 1;
|
CommandHeader.Feedback header = 1;
|
||||||
FrameData depth_frame = 2;
|
FrameData depth_frame = 2;
|
||||||
|
CameraIntrinsics intrinsics = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +104,7 @@ message GetRGBDImagesCommand {
|
|||||||
CommandHeader.Feedback header = 1;
|
CommandHeader.Feedback header = 1;
|
||||||
FrameData color_frame = 2;
|
FrameData color_frame = 2;
|
||||||
FrameData depth_frame = 3;
|
FrameData depth_frame = 3;
|
||||||
|
CameraIntrinsics intrinsics = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +137,8 @@ message GetRGBImageStreamCommand {
|
|||||||
message Feedback {
|
message Feedback {
|
||||||
CommandHeader.Feedback header = 1;
|
CommandHeader.Feedback header = 1;
|
||||||
FrameData color_frame = 2;
|
FrameData color_frame = 2;
|
||||||
int32 seq_no = 3;
|
CameraIntrinsics intrinsics = 3;
|
||||||
|
int32 seq_no = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +151,8 @@ message GetDepthImageStreamCommand {
|
|||||||
message Feedback {
|
message Feedback {
|
||||||
CommandHeader.Feedback header = 1;
|
CommandHeader.Feedback header = 1;
|
||||||
FrameData depth_frame = 2;
|
FrameData depth_frame = 2;
|
||||||
int32 seq_no = 3;
|
CameraIntrinsics intrinsics = 3;
|
||||||
|
int32 seq_no = 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,7 +166,8 @@ message GetRGBDImagesStreamCommand {
|
|||||||
CommandHeader.Feedback header = 1;
|
CommandHeader.Feedback header = 1;
|
||||||
FrameData color_frame = 2;
|
FrameData color_frame = 2;
|
||||||
FrameData depth_frame = 3;
|
FrameData depth_frame = 3;
|
||||||
int32 seq_no = 4;
|
CameraIntrinsics intrinsics = 4;
|
||||||
|
int32 seq_no = 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,3 +28,16 @@ message CommandHeader {
|
|||||||
google.protobuf.Timestamp timestamp = 3; // 回复时间
|
google.protobuf.Timestamp timestamp = 3; // 回复时间
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message ConfigParam {
|
||||||
|
|
||||||
|
string param_name = 1;
|
||||||
|
|
||||||
|
oneof param_value {
|
||||||
|
int32 int_value = 2; // 整数类型
|
||||||
|
double double_value = 3; // 浮点数类型
|
||||||
|
string string_value = 4; // 字符串类型
|
||||||
|
bool bool_value = 5; // 布尔类型
|
||||||
|
bytes bytes_value = 6; // 二进制数据类型
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -9,7 +9,7 @@ message FreedomValue {
|
|||||||
float value = 2; // 值 0-1百分比
|
float value = 2; // 值 0-1百分比
|
||||||
}
|
}
|
||||||
|
|
||||||
message RH56DFTPDexHand {
|
message FreedomState {
|
||||||
int32 dof_id = 1; // 自由度ID,唯一标识不同的关节或自由度
|
int32 dof_id = 1; // 自由度ID,唯一标识不同的关节或自由度
|
||||||
int32 angle = 2; // 自由度角度
|
int32 angle = 2; // 自由度角度
|
||||||
int32 speed = 3; // 自由度速度
|
int32 speed = 3; // 自由度速度
|
||||||
@ -57,7 +57,7 @@ message SensorData {
|
|||||||
|
|
||||||
message DexHandState {
|
message DexHandState {
|
||||||
bool is_initialized = 1; // 是否初始化
|
bool is_initialized = 1; // 是否初始化
|
||||||
repeated RH56DFTPDexHand hands = 2; // 包含多个自由度状态
|
repeated FreedomState hands = 2; // 包含多个自由度状态
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetDexHandStateCommand {
|
message GetDexHandStateCommand {
|
||||||
|
|||||||
@ -48,3 +48,12 @@ message GetSystemStatusCommand {
|
|||||||
repeated DeviceList device_list = 7;
|
repeated DeviceList device_list = 7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message UpdateParamsCommand {
|
||||||
|
message Request {}
|
||||||
|
|
||||||
|
message Feedback {
|
||||||
|
CommandHeader.Feedback header = 1;
|
||||||
|
repeated ConfigParam params = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -8,4 +8,7 @@ package cmvr.api;
|
|||||||
service SystemService {
|
service SystemService {
|
||||||
rpc GetSystemInfo(GetSystemInfoCommand.Request) returns (GetSystemInfoCommand.Feedback) {}
|
rpc GetSystemInfo(GetSystemInfoCommand.Request) returns (GetSystemInfoCommand.Feedback) {}
|
||||||
rpc GetSystemStatus(GetSystemStatusCommand.Request) returns (GetSystemStatusCommand.Feedback) {}
|
rpc GetSystemStatus(GetSystemStatusCommand.Request) returns (GetSystemStatusCommand.Feedback) {}
|
||||||
|
|
||||||
|
rpc UpdateParams(UpdateParamsCommand.Request) returns (UpdateParamsCommand.Feedback) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user