typeg/src/stroke_converter.cpp
Go to the documentation of this file.
2 #include "stroke_converter.h"
3 
5 {
6  ROS_INFO("upper's csv_dir is %s", upper_csv_dir.c_str());
7  ROS_INFO("lifter's csv_dir is %s", lifter_csv_dir.c_str());
8 
9  if (makeTable(shoulder_p.table, upper_csv_dir + "/shoulder_p.csv"))
11  if (makeTable(shoulder_r.table, upper_csv_dir + "/shoulder_r.csv"))
13  if (makeTable(elbow_p.table, upper_csv_dir + "/elbow_p.csv"))
15  if (makeTable(wrist_p.table, upper_csv_dir + "/wrist_p.csv"))
17  if (makeTable(wrist_r.table, upper_csv_dir + "/wrist_r.csv"))
19  if (makeTable(neck_p.table, upper_csv_dir + "/neck_p.csv"))
21  if (makeTable(neck_r.table, upper_csv_dir + "/neck_r.csv"))
23  if (makeTable(waist_p.table, upper_csv_dir + "/waist_p.csv"))
25  if (makeTable(waist_r.table, upper_csv_dir + "/waist_r.csv"))
27  if (makeTable(leg.table, lifter_csv_dir + "/leg.csv"))
29 }
30 
32 (std::vector<int16_t>& _strokes, const std::vector<double>& _angles)
33 {
34  static const float rad2Deg = 180.0 / M_PI;
35  static const float scale = 100.0;
36 
38  = setDualAngleToStroke(rad2Deg * _angles[20], -rad2Deg * _angles[19],
39  wrist_r.table, wrist_p.table, true);
41  = setDualAngleToStroke(-rad2Deg * _angles[9], rad2Deg * _angles[8],
42  wrist_r.table, wrist_p.table, true);
44  = setDualAngleToStroke(-rad2Deg * _angles[2], rad2Deg * _angles[1],
45  waist_r.table, waist_p.table, false);
47  = setDualAngleToStroke(rad2Deg * _angles[13], rad2Deg * _angles[12],
48  neck_r.table, neck_p.table, false);
49 
50  _strokes[0] = static_cast<int16_t>(scale * rad2Deg * _angles[0]);
51  _strokes[1] = static_cast<int16_t>(scale * waist.one);
52  _strokes[2] = static_cast<int16_t>(scale * waist.two);
53 
54  _strokes[3]
55  = static_cast<int16_t>(scale * setAngleToStroke(-rad2Deg * _angles[3], shoulder_p.table));
56  _strokes[4]
57  = static_cast<int16_t>(scale * setAngleToStroke(rad2Deg * _angles[4], shoulder_r.table));
58  _strokes[5] = static_cast<int16_t>(-scale * rad2Deg * _angles[5]);
59  _strokes[6]
60  = static_cast<int16_t>(scale * setAngleToStroke(90 + rad2Deg * _angles[6], elbow_p.table));
61  _strokes[7] = static_cast<int16_t>(-scale * rad2Deg * _angles[7]);
62  _strokes[8] = static_cast<int16_t>(scale * l_wrist.one);
63  _strokes[9] = static_cast<int16_t>(scale * l_wrist.two);
64  _strokes[10] = static_cast<int16_t>(scale * (rad2Deg * _angles[10] + 50.0) * 0.18);
65 
66  _strokes[11] = static_cast<int16_t>(scale * rad2Deg * _angles[11]);
67  _strokes[12] = static_cast<int16_t>(scale * neck.two);
68  _strokes[13] = static_cast<int16_t>(scale * neck.one);
69 
70  _strokes[14]
71  = static_cast<int16_t>(scale * setAngleToStroke(-rad2Deg * _angles[14], shoulder_p.table));
72  _strokes[15]
73  = static_cast<int16_t>(scale * setAngleToStroke(-rad2Deg * _angles[15], shoulder_r.table));
74  _strokes[16] = static_cast<int16_t>(-scale * rad2Deg * _angles[16]);
75  _strokes[17]
76  = static_cast<int16_t>(scale * setAngleToStroke(90 + rad2Deg * _angles[17], elbow_p.table));
77  _strokes[18] = static_cast<int16_t>(-scale * rad2Deg * _angles[18]);
78  _strokes[19] = static_cast<int16_t>(scale * r_wrist.two);
79  _strokes[20] = static_cast<int16_t>(scale * r_wrist.one);
80  _strokes[21] = static_cast<int16_t>(-scale * (rad2Deg * _angles[21] - 50.0) * 0.18);
81 
82  _strokes[22]
83  = static_cast<int16_t>(scale * setAngleToStroke(- rad2Deg * _angles[22], leg.table)); //knee
84  _strokes[23]
85  = static_cast<int16_t>(scale * setAngleToStroke( rad2Deg * _angles[23], leg.table)); //ankle
86 }
87 
89 (std::vector<double>& _angles, const std::vector<int16_t>& _strokes)
90 {
91  static const float deg2Rad = M_PI / 180.0;
92  static const float scale_inv = 0.01;
93 
94  _angles[0] = deg2Rad * scale_inv * _strokes[0];
95  _angles[1]
96  = deg2Rad * setStrokeToAngle(scale_inv * (_strokes[2] + _strokes[1]) * 0.5, waist_p.inv_table);
97  _angles[2]
98  = deg2Rad * setStrokeToAngle(scale_inv * (_strokes[2] - _strokes[1]) * 0.5, waist_r.inv_table);
99  _angles[3] = -deg2Rad * setStrokeToAngle(scale_inv * _strokes[3], shoulder_p.inv_table);
100  _angles[4] = deg2Rad * setStrokeToAngle(scale_inv * _strokes[4], shoulder_r.inv_table);
101  _angles[5] = -deg2Rad * scale_inv * _strokes[5];
102  _angles[6] = - (M_PI/2) + deg2Rad * setStrokeToAngle(scale_inv * _strokes[6], elbow_p.inv_table);
103  _angles[7] = -deg2Rad * scale_inv * _strokes[7];
104  _angles[8]
105  = -deg2Rad * setStrokeToAngle(scale_inv*(_strokes[9] - _strokes[8])*0.5, wrist_p.inv_table);
106  _angles[9]
107  = -deg2Rad * setStrokeToAngle(scale_inv*(_strokes[9] + _strokes[8])*0.5, wrist_r.inv_table);
108  _angles[10] = deg2Rad * (scale_inv * _strokes[10] * 5.556 - 50.0);
109 
110  _angles[11] = deg2Rad * scale_inv * _strokes[11];
111  _angles[12]
112  = deg2Rad * setStrokeToAngle(scale_inv*(_strokes[13] + _strokes[12])*0.5, neck_p.inv_table);
113  _angles[13]
114  = -deg2Rad * setStrokeToAngle(scale_inv*(_strokes[13] - _strokes[12])*0.5, neck_r.inv_table);
115 
116  _angles[14] = -deg2Rad * setStrokeToAngle(scale_inv * _strokes[14], shoulder_p.inv_table);
117  _angles[15] = -deg2Rad * setStrokeToAngle(scale_inv * _strokes[15], shoulder_r.inv_table);
118  _angles[16] = -deg2Rad * scale_inv * _strokes[16];
119  _angles[17] = - (M_PI/2) + deg2Rad * setStrokeToAngle(scale_inv * _strokes[17], elbow_p.inv_table);
120  _angles[18] = -deg2Rad * scale_inv * _strokes[18];
121  _angles[19]
122  = -deg2Rad * setStrokeToAngle(scale_inv*(_strokes[20] - _strokes[19])*0.5, wrist_p.inv_table);
123  _angles[20]
124  = deg2Rad * setStrokeToAngle(scale_inv*(_strokes[20] + _strokes[19])*0.5, wrist_r.inv_table);
125  _angles[21] = -deg2Rad * (scale_inv * _strokes[21] * 5.556 - 50.0);
126 
127  _angles[22] = -deg2Rad * setStrokeToAngle(scale_inv * _strokes[22], leg.inv_table); // knee
128  _angles[23] = deg2Rad * setStrokeToAngle(scale_inv * _strokes[23], leg.inv_table); // ankle
129 }
130 
std::vector< StrokeMap > table
bool makeTable(std::vector< StrokeMap > &_table, const std::string _file_name)
float setStrokeToAngle(const float _stroke, const std::vector< StrokeMap > &_inv_table)
std::vector< StrokeMap > inv_table
void Stroke2Angle(std::vector< double > &_angles, const std::vector< int16_t > &_strokes)
#define ROS_INFO(...)
float setAngleToStroke(const float _angle, const std::vector< StrokeMap > &_table)
DiffJoint setDualAngleToStroke(const float _r_angle, const float _p_angle, const std::vector< StrokeMap > &_r_table, const std::vector< StrokeMap > &_p_table, const bool _is_pitch=false)
PLUGINLIB_EXPORT_CLASS(transmission_interface::BiDirectionalEffortJointInterfaceProvider, transmission_interface::RequisiteProvider)
void Angle2Stroke(std::vector< int16_t > &_strokes, const std::vector< double > &_angles)
void makeInvTable(std::vector< StrokeMap > &_inv_table, const std::vector< StrokeMap > &_table)


seed_r7_robot_interface
Author(s): Kazuhiro Sasabuchi
autogenerated on Sun Apr 18 2021 02:40:36