96 lines
3.9 KiB
C++
96 lines
3.9 KiB
C++
#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:
|
||
AbstractBiohead() = default;
|
||
~AbstractBiohead() override = default;
|
||
|
||
DeviceKind kind() const noexcept override { return DeviceKind::BioHead; }
|
||
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() {};
|
||
virtual void expressionAngry() {};
|
||
virtual void expressionSadness() {};
|
||
virtual void expressionYawn() {};
|
||
|
||
FacialExpressionState expression_state_;
|
||
std::atomic<bool> emergency_stop_requested = false;
|
||
|
||
|
||
|
||
|
||
|
||
};
|
||
|
||
} // namespace cmvr::device
|
||
|
||
#endif // ABSTRACT_BIOHEAD_H
|
||
|
||
|
||
|
||
|
||
|