Kinematics Animation Multithread
finger.h
Go to the documentation of this file.
1#pragma once
2
3#include <iostream>
4#include <vector>
5#include <filesystem>
6#include <fstream>
7
8#include <igl/opengl/glfw/Viewer.h>
9#include "dynamics_math.h"
10#include "euler_rotations.h"
11
12#include "./nlohmann/json.hpp"
13
20class Finger
21{
22public:
23 Finger() {};
24
26 void initialize(const std::string& name_id, const nlohmann::json& json_file,
27 igl::opengl::glfw::Viewer *viewer, int mesh_idx);
28
30 void update(const std::vector<dm::JointState>& state);
31
33 std::vector<Eigen::MatrixXd> get_vertices(void) { return m_vertices_data; }
34
36 std::vector<int> get_frame_ids(void) { return m_frame_ids; };
37
39 void load_mesh_files(igl::opengl::glfw::Viewer *viewer);
40
42 std::vector<dm::JointState> get_state(void) { return m_state_vec; }
43
44private:
45
47 std::string m_name_id;
48
51
53 std::vector<double> m_link_lengths;
54
56 std::vector<int> m_frame_ids;
57
59 void parse_json_file(const nlohmann::json& json_file);
60
61private:
62
64 std::string m_joint_rel_filename = "share/joint.obj";
65
67 std::string m_bone_rel_filename = "share/bone.obj";
68
70 std::vector<std::string> m_meshes_filenames;
71
74
76 double m_joint_scale = 0.05;
77
79 std::vector<double> m_geom_scales;
80
83
86
87private:
88
90 void get_mesh_data(igl::opengl::glfw::Viewer *viewer);
91
93 std::vector<Eigen::MatrixXd> m_vertices_data_o;
94
96 std::vector<Eigen::MatrixXd> m_vertices_data_oh;
97
99 std::vector<Eigen::MatrixXd> m_vertices_data;
100
102 std::vector<Eigen::MatrixXi> m_faces_data;
103
105 void postprocess_meshes(void);
106
107private:
108
110 void initialize_state(const std::vector<double>& link_lengths,
111 const dm::JointState& origin);
112
114 std::vector<dm::JointState> m_state_vec;
115
118
120 std::vector<Eigen::Matrix4d> m_local_transform;
121
123 std::vector<Eigen::Matrix4d> m_global_transform;
124};
This class generates a finger of n links. The number of links and their properties are defined by a j...
Definition: finger.h:21
void initialize_state(const std::vector< double > &link_lengths, const dm::JointState &origin)
Initialize state.
Definition: finger.cpp:130
void initialize(const std::string &name_id, const nlohmann::json &json_file, igl::opengl::glfw::Viewer *viewer, int mesh_idx)
Initialize finger.
Definition: finger.cpp:13
int m_viewer_data_lower_idx
Viewer data lower idx see (Hand::m_viewer_data_lower_idx).
Definition: finger.h:82
std::vector< int > m_frame_ids
The frame ids of the finger.
Definition: finger.h:56
std::string m_joint_rel_filename
Joint mesh file.
Definition: finger.h:64
std::vector< dm::JointState > get_state(void)
Get current state of the finger.
Definition: finger.h:42
std::vector< Eigen::MatrixXd > m_vertices_data_o
Vertices data (original).
Definition: finger.h:93
double m_joint_scale
Joint scales.
Definition: finger.h:76
std::vector< Eigen::MatrixXd > m_vertices_data
Vertices data.
Definition: finger.h:99
std::vector< double > m_link_lengths
The lengths of the finger links.
Definition: finger.h:53
void load_mesh_files(igl::opengl::glfw::Viewer *viewer)
Load finger mesh files.
Definition: finger.cpp:184
std::vector< Eigen::MatrixXd > get_vertices(void)
Get finger vertices.
Definition: finger.h:33
std::vector< Eigen::Matrix4d > m_global_transform
Global transforamation matrix.
Definition: finger.h:123
std::string m_bone_rel_filename
Bone (link) mesh file.
Definition: finger.h:67
void postprocess_meshes(void)
Postproccess meshes.
Definition: finger.cpp:213
std::vector< std::string > m_meshes_filenames
Mesh files for joints and bones(links).
Definition: finger.h:70
std::vector< Eigen::MatrixXi > m_faces_data
Faces data.
Definition: finger.h:102
Finger()
Definition: finger.h:23
void parse_json_file(const nlohmann::json &json_file)
Parses the finger configuration json file.
Definition: finger.cpp:248
int m_state_size
State size.
Definition: finger.h:117
std::vector< dm::JointState > m_state_vec
Finger state.
Definition: finger.h:114
dm::JointState m_origin
Finger origin.
Definition: finger.h:50
void update(const std::vector< dm::JointState > &state)
Update state.
Definition: finger.cpp:60
void get_mesh_data(igl::opengl::glfw::Viewer *viewer)
Get mesh data.
Definition: finger.cpp:197
std::vector< Eigen::Matrix4d > m_local_transform
Local transforamation matrix.
Definition: finger.h:120
std::string m_name_id
Finger name id.
Definition: finger.h:47
std::vector< int > get_frame_ids(void)
Get the ids of the finger frames.
Definition: finger.h:36
void initialize_mesh_containers(void)
Initialize mesh files.
Definition: finger.cpp:160
std::vector< double > m_geom_scales
Finger scales.
Definition: finger.h:79
std::vector< Eigen::MatrixXd > m_vertices_data_oh
Vertices data (original homogeneous).
Definition: finger.h:96
int m_viewer_data_upper_idx
Viewer data upper idx (see Hand::m_viewer_data_lower_idx).
Definition: finger.h:85