cmvr-es/include/devices/abstract_biohead.h
2025-11-13 20:25:19 +08:00

94 lines
3.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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) {}
virtual void speakstart(){};
virtual void speakstop(){};
virtual void expressionHappy() {}; // 高兴
virtual void expressionSurprised() {}; // 惊讶
virtual void expressionTired() {}; // 困倦(疲惫)
FacialExpressionState expression_state_;
std::atomic<bool> emergency_stop_requested = false;
};
} // namespace cmvr::device
#endif // ABSTRACT_BIOHEAD_H