Skeletal Animation Multithread Face
skeletal_animation.cpp
Go to the documentation of this file.
1#include "../include/skeletal_animation.h"
2
11void SkeletalAnimation::initialize(igl::opengl::glfw::Viewer* viewer,
12 Exoskeleton* left_exo, AnimatedHand* anim_hand, MenuHandler* menu_handler)
13{
14 // Get exoskeleton handler pointer
15 m_left_exo = left_exo;
16
17 // Get animation hand pointer
18 m_anim_hand = anim_hand;
19
20 // Get menu handler pointer
21 m_menu_handler = menu_handler;
22}
23
33bool SkeletalAnimation::animation_loop(igl::opengl::glfw::Viewer& viewer)
34{
35 if (viewer.core().is_animating)
36 {
37 // Initialize if ports are set
39 {
40 // Setup meshes
41 setup_meshes(viewer);
42
43 // Dont initialize animations again
45 }
46
48 {
49 // Get euler angles
50 auto euler_id =
52
53 // Update left hand
54 m_left_hand->update(euler_id);
55 viewer.data_list.at(0).set_vertices(m_left_hand->get_vertices());
56
57 // Update right hand
58 m_right_hand->update(euler_id);
59 viewer.data_list.at(1).set_vertices(m_right_hand->get_vertices());
60
61 // Update face
62 viewer.data_list.at(2).set_vertices(m_face->get_vertices());
63 }
64 }
65
66 return false;
67}
68
77void SkeletalAnimation::setup_meshes(igl::opengl::glfw::Viewer& viewer)
78{
79 // Resize viewer data list
80 viewer.data_list.resize(3);
81
82 // Set mesh for face
83 m_face = std::make_shared<Face>();
84
85 viewer.data_list.at(2).set_mesh(m_face->get_vertices(),
86 m_face->get_surface_indices());
87
88 // Define serial COM for left exoskeleton
89 std::string serial_com_left = m_menu_handler->get_left_exoskeleton_port();
90
91 // Define serial COM for right exoskeleton
92 std::string serial_com_right = m_menu_handler->get_right_exoskeleton_port();
93
94 // Define baudrate
95 unsigned int baud_rate = 115200;
96
97 // Initialize left exoskeleton
98 m_left_exo->initialize(serial_com_left, baud_rate);
99
100 // Initialize right exoskeleton (to be done)
101
102 // Initialize left hand
103 m_left_hand = std::make_shared<Hand>(m_left_exo, m_anim_hand,
106
107 // Set mesh for left hand
108 viewer.data_list.at(0).set_mesh(m_left_hand->get_vertices(),
109 m_left_hand->get_surface_indices());
110
111 // Initialze right hand
112 m_right_hand = std::make_shared<Hand>(m_left_exo, m_anim_hand,
115
116 // Set mesh for right hand
117 viewer.data_list.at(1).set_mesh(m_right_hand->get_vertices(),
118 m_right_hand->get_surface_indices());
119}
std::vector< EulerID > get_hand_angles(const std::vector< double > &joint_angles)
Class Exoskeleton.
Definition: exoskeleton.h:20
void initialize(const std::string &serial_com, unsigned int serial_baudrate)
Initialize the exoskeleton.
Definition: exoskeleton.cpp:10
std::vector< double > get_joint_angles(void)
Get joint angles.
Definition: exoskeleton.cpp:55
Class MenuHandler.
Definition: menu_handler.h:23
bool are_ports_set(void)
Check whether the USB ports have been sent by the user (Is OK pressed?).
Definition: menu_handler.h:32
std::string get_right_exoskeleton_port(void)
Get the USB port for the right exoskeleton.
Definition: menu_handler.h:38
std::string get_left_exoskeleton_port(void)
Get the USB port for the left exoskeleton.
Definition: menu_handler.h:35
Exoskeleton * m_left_exo
Exoskeleton handler pointer.
std::string m_hand_texture_name
Texture name.
MenuHandler * m_menu_handler
Menu handler pointer.
AnimatedHand * m_anim_hand
Animated hand pointer.
bool m_initialize_animation
Start animation flag.
bool animation_loop(igl::opengl::glfw::Viewer &viewer)
Animation loop callback.
void initialize(igl::opengl::glfw::Viewer *viewer, Exoskeleton *left_exo, AnimatedHand *anim_hand, MenuHandler *menu_handler)
Initialize animation.
Eigen::Vector3d m_right_origin
Right hand origin.
Eigen::Vector3d m_left_origin
Left hand origin.
std::shared_ptr< Face > m_face
Face handler.
std::shared_ptr< Hand > m_left_hand
Left and right hand.
std::string m_hand_graph_name
Skeleton graph filename.
std::shared_ptr< Hand > m_right_hand
void setup_meshes(igl::opengl::glfw::Viewer &viewer)
Setup meshes.
std::string m_hand_mesh_name
Mesh filename.