cmvr-es/include/devices/abstract_biohead.h

84 lines
3.5 KiB
C
Raw Normal View History

2025-08-21 13:56:39 +08:00
#ifndef ABSTRACT_BIOHEAD_H
#define ABSTRACT_BIOHEAD_H
#pragma once
#include "abstract_device.h"
namespace cmvr::device {
// 面部表情状态结构体
struct FacialExpressionState {
// 眉毛
float left_eyebrow_outside_y = 0.0f; // 左眉毛外侧垂直位置
float left_eyebrow_inside_y = 0.0f; // 左眉毛内侧垂直位置
float right_eyebrow_outside_y = 0.0f; // 右眉毛外侧垂直位置
float right_eyebrow_inside_y = 0.0f; // 右眉毛内侧垂直位置
// 眼睑
float left_eye_upper_lid_y = 0.0f; // 左眼上眼睑垂直位置
float left_eye_lower_lid_y = 0.0f; // 左眼下眼睑垂直位置
float right_eye_upper_lid_y = 0.0f; // 右眼上眼睑垂直位置
float right_eye_lower_lid_y = 0.0f; // 右眼下眼睑垂直位置
// 眼球
float left_eye_ball_x = 0.0f; // 左眼球水平位置X坐标
float left_eye_ball_y = 0.0f; // 左眼球垂直位置Y坐标
float right_eye_ball_x = 0.0f; // 右眼球水平位置X坐标
float right_eye_ball_y = 0.0f; // 右眼球垂直位置Y坐标
// 鼻子
float left_nose_y = 0.0f; // 左鼻孔垂直位置
float right_nose_y = 0.0f; // 右鼻孔垂直位置
// 嘴巴
float upper_lip_y = 0.0f; // 上唇的垂直位置
float upper_lip_z = 0.0f; // 上唇的前后位置Z坐标
float lower_lip_y = 0.0f; // 下唇的垂直位置
float lower_lip_z = 0.0f; // 下唇的前后位置Z坐标
// 左唇角
float upper_left_lip_x = 0.0f; // 左唇角上部水平位置X坐标
float upper_left_lip_y = 0.0f; // 左唇角上部垂直位置Y坐标
float left_corner_lip_x = 0.0f; // 左嘴角水平位置X坐标
float left_corner_lip_y = 0.0f; // 左嘴角垂直位置Y坐标
float lower_left_lip_x = 0.0f; // 左唇角下部水平位置X坐标
float lower_left_lip_y = 0.0f; // 左唇角下部垂直位置Y坐标
// 右唇角
float upper_right_lip_x = 0.0f; // 右唇角上部水平位置X坐标
float upper_right_lip_y = 0.0f; // 右唇角上部垂直位置Y坐标
float right_corner_lip_x = 0.0f; // 右嘴角水平位置X坐标
float right_corner_lip_y = 0.0f; // 右嘴角垂直位置Y坐标
float lower_right_lip_x = 0.0f; // 右唇角下部水平位置X坐标
float lower_right_lip_y = 0.0f; // 右唇角下部垂直位置Y坐标
// Jaw
float jaw_x = 0.0f;
float jaw_y = 0.0f;
};
// 抽象头部类
class AbstractBiohead : public AbstractDevice {
public:
explicit AbstractBiohead(const XmlNode &config) : AbstractDevice(config) {}
~AbstractBiohead() override = default;
virtual void getState(RobotState &state){};
virtual void eStop() {};
virtual void setExpressionPose(FacialExpressionState& expression_state, double vel=0, double acc=0) {}
virtual void streamFacialPose(FacialExpressionState& expression_state, double vel, double acc) {}
FacialExpressionState expression_state_;
std::atomic<bool> emergency_stop_requested = false;
};
} // namespace cmvr::device
#endif // ABSTRACT_BIOHEAD_H