Kinematics Animation Multithread
kinematic_animation.cpp
Go to the documentation of this file.
1#include "../include/kinematic_animation.h"
2
11void KinematicAnimation::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 // Set camera center
24 m_camera_center << -0.1, -0.1, 0.0, 0.1, -0.1, 0.0, 0.0, 0.1, 0.0;
25}
26
36bool KinematicAnimation::animation_loop(igl::opengl::glfw::Viewer& viewer)
37{
38 if (viewer.core().is_animating)
39 {
40 viewer.core().align_camera_center(m_camera_center);
41
42 // Initialize if ports are set
44 {
45 // Setup exoskeleton
46 setup_exoskeletons(viewer);
47
48 // Dont initialize animations again
50 }
51
53 {
54 // Get euler angles
55 auto euler_id =
57
58 // Update left hand
59 m_left_hand.update(euler_id, viewer);
60
61 // Update right hand
62 m_right_hand.update(euler_id, viewer);
63 }
64 }
65 return false;
66}
67
73void KinematicAnimation::setup_exoskeletons(igl::opengl::glfw::Viewer& viewer)
74{
75 // Define serial COM for left exoskeleton
76 std::string serial_com_left = m_menu_handler->get_left_exoskeleton_port();
77
78 // Define serial COM for right exoskeleton
79 std::string serial_com_right = m_menu_handler->get_right_exoskeleton_port();
80
81 // Define baudrate
82 unsigned int baud_rate = 115200;
83
84 // Initialize left exoskeleton
85 m_left_exo->initialize(serial_com_left, baud_rate);
86
87 // Initialize right exoskeleton (to be done)
88
89 // Initialize left hand
91
92 // Initialize right hand
94}
std::vector< Eigen::Vector3d > 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.
Definition: exoskeleton.cpp:10
std::vector< double > get_joint_angles(void)
Get joint angles.
Definition: exoskeleton.cpp:54
void update(const std::vector< Eigen::Vector3d > &euler_id, igl::opengl::glfw::Viewer &viewer)
It updates the hand vertices based on the euler angles for its skeleton joints. These are fed through...
Definition: hand.cpp:72
void initialize(igl::opengl::glfw::Viewer *viewer, Exoskeleton *exo_handler, AnimatedHand *anim_hand, bool type, const Eigen::Vector3d &origin)
Initialize the hand.
Definition: hand.cpp:15
void initialize(igl::opengl::glfw::Viewer *viewer, Exoskeleton *left_exo, AnimatedHand *anim_hand, MenuHandler *menu_handler)
Initialize animation.
MenuHandler * m_menu_handler
Menu handler pointer.
Eigen::Matrix3d m_camera_center
Camera matrix.
bool m_initialize_animation
Bool start animation.
Eigen::Vector3d m_left_origin
Left hand origin.
Eigen::Vector3d m_right_origin
Right hand origin.
AnimatedHand * m_anim_hand
Animated hand pointer.
void setup_exoskeletons(igl::opengl::glfw::Viewer &viewer)
Setup exoskeletons.
Hand m_left_hand
Left and right hand.
Exoskeleton * m_left_exo
Exoskeleton handler pointer.
bool animation_loop(igl::opengl::glfw::Viewer &viewer)
Animation loop callback.
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