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