#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 emergency_stop_requested = false; }; } // namespace cmvr::device #endif // ABSTRACT_BIOHEAD_H