Endorob  1.4
A C++ Robotics library by P. Berthet-Rayne
endorob.h
Go to the documentation of this file.
1 // v1.4
2 /*MIT License
3 
4 Copyright (c) 2018-2019 Pierre Berthet-Rayne
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 SOFTWARE.*/
20 
92 #ifndef EndoRob_H
93 #define EndoRob_H
94 
95 #include <Eigen/StdVector>
96 #include <iostream>
97 #include <fstream>
98 #include <thread>
99 #include <Eigen/Geometry>
100 #include <limits>
101 #include <Eigen/Dense>
102 #include <mutex>
103 #include <chrono>
104 #include <stdlib.h>
105 #include <time.h>
106 #include <ctime>
107 #include <string>
108 #include <atomic>
109 
110 
111 
112 #ifdef _WIN32
113 #include <windows.h>
114 #endif
115 
116 //#ifdef __linux__
117 //#include <pthread.h>
118 //#endif
119 
120 
121 
122 // For plotting
123 //#include <qwt_plot.h>
124 //#include <qwt_plot_curve.h>
125 //#include <qwt_plot_grid.h>
126 //#include <qwt_symbol.h>
127 //#include <qwt_legend.h>
128 #define VERBOSE_MODE 1
129 
130 #ifndef M_PI
131 #define M_PI 3.1415926535897932384626433832795
132 #endif
133 
134 
135 class Virtual_Snake;
136 
138 enum class Joint_type {
139  Revolute,
140  Prismatic,
141  Rolling,
142  Rolling_flex,
143  Flex,
144 };
145 
147 
148 enum class Solver_type {
151  Jacobian_DLS,
154 };
155 
156 typedef unsigned int uint;
157 typedef long long llong;
158 
159 // Matrix and vector typedefs
160 typedef Eigen::MatrixXd Mat;
161 typedef Eigen::Matrix4d Mat4d;
162 typedef Eigen::Matrix3d Mat3d;
163 typedef Eigen::Vector3d Vec3d;
164 typedef Eigen::Vector2d Vec2d;
165 typedef Eigen::VectorXd Vec;
166 typedef Eigen::Quaterniond Quat;
167 
168 // Infinity macro
169 #define INF_LIM std::numeric_limits<double>::infinity()
170 
171 // Chrono
172 typedef std::chrono::high_resolution_clock::time_point Time_point;
173 typedef std::chrono::high_resolution_clock chrono_time;
174 typedef std::chrono::milliseconds Ms;
175 typedef std::chrono::duration<double> Delta_t;
176 
177 // General Functions:
178 
180 
185 Mat4d invert_transform(const Mat4d &mat);
186 
188 
193 Vec3d get_rpy(const Mat &mat);
194 
196 
201 Vec3d get_Euler(const Mat &mat);
202 
204 
210 Mat4d set_rpy(const Mat &mat, Vec3d rpy);
211 
213 
218 Mat3d rot_x(const double &angle);
219 
221 
226 Mat3d rot_y(const double &angle);
227 
229 
234 Mat3d rot_z(const double &angle);
235 
237 
243 Mat3d rot_xyz(const double &angle, const Vec3d &axis);
244 
245 bool is_almost_equal(const double &a, const double &b, const double &tolerance = 1E-4);
246 bool is_geq(const double &a, const double &b, const double &tolerance = 1E-4);
247 bool is_leq(const double &a, const double &b, const double &tolerance = 1E-4);
248 
250 
256 Mat4d rotate_transform_locally(const Mat4d &mat, const Mat3d &rot);
257 
259 
266 Mat4d rotate_transform_around_P(const Mat4d &T, const Mat3d &rot, const Vec &P);
267 
269 
277 Mat4d rotate_transform_around_axis_and_P(const Mat4d &T, const double &angle, const Vec3d &axis, const Vec &P);
278 
280 
286 Mat3d get_rotation_increment(const Mat3d &start, const Mat3d &goal);
287 
289 
295 Vec get_vector_increment(const Vec &start, const Vec &goal);
296 
298 
304 Mat4d get_transform_increment(const Mat4d &start, const Mat4d &goal);
305 
307 
314 Vec3d project_point_onto_line(const Vec3d &P, const Vec3d &A, const Vec3d &B);
315 
317 
325 Vec3d sphere_line_intersection(const double &radius, const Vec3d &center, const Vec3d &A, const Vec3d &B);
326 
327 double rad_to_degree(const double &val);
328 double degree_to_rad(const double &val);
329 
331 enum DH_type {
334 };
335 
336 
337 
339 
344 {
345 
346 public:
347  DH_table_entry(const double &a, const double &alpha, const double &d, const double &theta, const Joint_type &type);
348  DH_table_entry(const double &a, const double &a_bis, const double &alpha, const double &d, const double &theta, const Joint_type &type);
349 
350  void set_offset(const double &offset);
351  void set_joint_limits(const double &min, const double &max);
352  void set_flex_resolution(const uint &res);
353  void set_flex_gradient(const Vec &vec);
354  double a();
355  double alpha();
356  double d();
357  double theta();
358  double a_bis();
362  double joint_limit_max();
363  double joint_limit_min();
364 
365 protected:
368  double m_offset;
372 
373 };
374 
375 
377 
381 {
382 public:
383  Snake_Path();
384  ~Snake_Path();
385  void push_back(const Vec3d &point);
386  void push_back(const Vec3d &point, const double &weight);
387  void pop_back();
388  uint size();
389  void set_weight(const double &weight, const int &index = -1);
391  double get_weight(const uint &index);
392  void clear();
393 
394 
396  return m_path[x];
397  }
398 
399 protected:
400  std::vector<Vec3d, Eigen::aligned_allocator<Vec3d>> m_path;
401  std::vector<double> m_weights;
402 
403 public:
404  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
405 
406 };
407 
408 
409 
410 
411 
413 
420 class Endorob /*: protected DH_table_entry*/
421 {
422 
423 public:
424 
426 
429  Endorob();
430 
432 
435  Endorob(const Solver_type &solver_type);
436 
438 
441  ~Endorob();
442 
444 
449  void set_DH_convention(const DH_type &convention);
450 
452 
457  void save_DH(std::string filename);
458 
460 
465  void load_DH(std::string filename);
466 
468 
479  void add_DH_entry(const double &a, const double &alpha, const double &d, const double &theta, const Joint_type &type, const double &a_bis = 0, const double &theta_bis = 0, const uint &flex = 0);
480 
482 
487  void set_joint_limits(const double &min, const double &max);
488 
490 
495  void set_flex_resolution(const uint &res);
496 
498 
503  void set_flex_gradient(const Vec &vec);
504 
506 
511  void set_solver_type(Solver_type solver, const double &lambda = 1);
512 
514 
518  void set_tool_frame(const Mat4d &T);
519 
521 
525  void set_base_frame(const Mat4d &T);
526 
528 
532  void set_mask(const Vec &mask);
533 
535 
539  void set_joint_coupling(const Vec &coupling);
540 
542 
545  void initialize();
546 
548 
552  unsigned dof();
553 
555 
559  unsigned joints();
560 
562 
567 
569 
573  Mat4d get_tip_pose(); // same as above, just different naming
574 
576 
581 
583 
588  Mat4d get_forward_kinematics(const Vec &q);
589 
591 
595  Mat get_Jacobian();
596 
597 
599 
603  Mat get_coupling_matrix(void);
604 
605 
606 
608 
612  void set_solver_target(const Mat4d &T);
613 
615 
619  void set_solver_body_target(const Vec &vec);
620 
622 
627  void set_solver_body_target(const Vec &vec, const Mat4d &T);
628 
630 
635 
637 
642 
643 
645 
649  void set_q_vec(const Vec &q);
650 
652 
655  void reset_q_vec();
656 
657 
659 
664 
666 
670  Vec get_body_vec();
671 
673 
678  Vec get_body_vec(const Vec &q);
679 
681 
685  unsigned get_iteration();
686 
688 
692  double get_error_norm();
693 
695 
699  double get_RMS_error();
700 
702 
707 
708 
710 
714  Vec get_q_vec();
715 
717 
722 
724 
729 
731 
735  void set_desired_curve(const Vec &curve);
736 
738 
743  void set_desired_curve(const Vec &curve, const Mat4d& mat);
744 
745 
746  //Vec get_inversekinematics(const Mat4d &Td, const Vec &q_vec);
747  //Vec get_inversekinematics(const Mat4d &Td);
748 
750 
751  // basic follow the leader navigation
752  Vec follow_the_leader(const std::vector<Vec3d, Eigen::aligned_allocator<Vec3d>> path, const Vec &desired_shape, const double &translation);
753  Vec follow_the_leader_2(const std::vector<Vec3d, Eigen::aligned_allocator<Vec3d>> path, const Vec &desired_shape, const double &translation);
754  Vec follow_the_leader_3(Snake_Path path, const Vec &desired_shape, const double &translation);
755  Virtual_Snake follow_the_leader_weighted(Snake_Path path, const Virtual_Snake &desired_shape, const double &translation);
756 
757 
759 
763  std::vector<DH_table_entry> get_DH_table();
764 
766 
771 
772  // Transform a full body vector relative to its base:
773  Vec set_vec_relative_to_base(const Vec &vec);
774 
775  // Get Snake base matrix
777 
779 
784  void set_solver_weight_mat(const uint& index, const double &val);
785  void set_solver_weight_mat(const Vec& vec);
786  void set_solver_weight_vec(const uint& index, const double &val);
787 
788  // To set the global reference frame
789  void set_robot_reference_frame(const Mat4d &T);
790 
792 
795  void enforce_joint_limits_mode(void);
796 
798 
803  void set_faulty_joint(const uint &joint, const double &val);
804 
806 
810 
811 
812 protected:
813  // Full forward kinematics (all intermediate joints) using class member variables
815 
816  // Full forward kinematics (all intermediate joints) using external joint vector
818 
819  // Calculate jacobian matrix using class member variables
820  void calculate_jacobian();
821 
822  // Calculate full body jacobian matrix
824 
825  // Calculate full body jacobian matrix
827 
828 
829 
830 
831  // Solver function running in its own thread
832  void threaded_solver(int a, int b);
833  void threaded_solver_2(int a, int b);
834 
835  // Error (pos + ori) between desired and end effector positions
836  void get_error(const Mat4d &Td, const Mat4d &Te);
837 
838  // Full body error between desired and current full body position.
840 
841  // Full mobile body error between desired and current full body position.
843 
844  // Position error between desired and end effector positions
845  Vec3d get_position_error(const Mat4d &Td, const Mat4d &Te);
846 
847  // Orientation error between desired and end effector positions
848  Vec3d get_orientation_error(const Mat4d &Td, const Mat4d &Te);
849 
850  // Check if solver has converged (might be blocking if no good solution is found)
851  bool solver_has_converged();
852 
853  // Check if solver has ended (whether good solution or iteration overflow)
854  bool solver_has_ended();
855 
856  //void set_DH_table(const std::vector<DH_table_entry> &DH_table_entry);
857 
858  // Forward kinematics matrix
860 
861  // Calculate pseudo inverse using SVD
863 
864  // Calculate masked pseudo inverse (reduced workspace dimension)
866 
867  // Calculate pseudo inverse for DLS
869 
870  // Clean a vector for values close to zero
871  Vec zero_thresholding(const Vec &q_vec, const double &val = M_PI/180/20);
872 
873  // Wrap angles of vector to be within [-pi,pi]
874  Vec angle_modulus(const Vec &q_vec);
875 
876  // Remove rows specified by mask vector
877  Mat mask_resize(const Mat &mat);
878 
879  // Apply joint coupling
880  void apply_joint_coupling();
881 
882  // Calculate coupling matrix to increase dimension
884 
885  // Calculate coupling matrix to reduce dimension
887 
888  // Calculate robot's DOF after coupling
890 
891  std::vector<std::string> split(const std::string & s, char delimiter, bool remove_empty);
892 
893  // Check vector for joint limits
894  bool check_joint_in_limit(const Vec &q);
895 
896  // Calculate joint lookup table
897  void calculate_joint_LUT();
898 
899  // Put forward kinematics into vector
900  void convert_fwd_k_into_vec();
901 
902  // Put forward kinematics into vector from joint vector
904 
905  // Joint limit based jacobian
907 
908  // Pseudo inverse method, simple approach
909  void pseudo_inverse_simple();
910 
911  // Pseudo inverse method, null-space approach
913 
914  // Constraint vector calculation for the null space method
916 
917  // Pseudo inverse method, normal equation approach
918  void pseudo_inverse_normal();
919 
920  // Damped least square approach
922 
923  // Jacobian transpose approach
924  void jacobian_transpose();
925 
926  // Template iterative solve equation
928 
929  // Check machine CPU available
930  void check_for_cpu();
931 
932  // error function
933  void modify_error_with_f();
934 
935  // Solver with mask
936  void solve_for_mask();
937 
938  // Check for convergence
939  void check_for_convergence();
940 
941  // Solve function
942  void solve();
943 
944  // Apply joint limits
945  void apply_joint_limits();
946 
947 public:
948  // Calculate faulty joint vector without compensation
949  Vec get_faulty_q();
950 
951 
952 
953 
954 protected:
955 
956  // Robot variables
965 
966  std::vector<DH_table_entry>m_DH_table;
968  double m_lambda;
969  void (Endorob::*p_solver_type)(void);
970 
971 
972  // Matrices for joint coupling (mechanical coupling or rolling joint)
981 
982 
983  // Thread variables
984  std::thread *psolver;
985  volatile bool m_start_solver, m_run;
986  volatile bool m_converged, m_diverged;
988  unsigned long m_iterations;
990  volatile bool m_wait_for_sync;
991  volatile bool m_solver_pending;
992  volatile bool m_thread_running;
993 
994  // Mask matrix for workspace reduction
995  unsigned m_mask_dof;
998 
999  // Jacobian calculation variables:
1011 
1012  // Forward Kinematics variables:
1013  //std::vector<Mat4d, Eigen::aligned_allocator<Mat4d>> m_fwd_k_vec;
1019 
1020  // Error vector
1022 
1023  // Path
1024  std::vector<Vec3d, Eigen::aligned_allocator<Vec3d>> m_robot_path;
1026 
1027  // CPU and instantiation
1029  static uint m_CPU_cpt;
1031  static volatile bool m_assigning_CPU;
1032 
1034  static bool m_cpu_info_dispayed;
1036 
1037  // Fault tolerance
1038  std::vector<bool> m_faulty_joint_vec;
1039  std::atomic<bool> m_apply_fault_tolerance;
1040 
1041 
1042 
1043 public:
1044  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1045 
1046 };
1047 
1049 
1053 {
1054 public:
1055  Virtual_Snake();
1056  Virtual_Snake(Endorob *robot);
1057  Virtual_Snake(const Virtual_Snake &snake);
1058  ~Virtual_Snake();
1059  Vec3d pe();
1060  void set_pe(const Vec3d &pe);
1061  Vec3d p0();
1062  void set_p0(const Vec3d &p0);
1063  Vec3d pb();
1064  Vec base();
1065  Vec curve() const;
1066  void set_curve(const Vec &curve);
1067  void set_weights(const Vec &weights);
1068  void set_weight(const uint &index, const double &val);
1069  Vec weights() const;
1070  uint get_links();
1071  uint rows()const;
1072  Vec3d block(const uint &index);
1073  void set(const uint &index1, const uint &index2, const uint &block1, const uint &block2, const Vec &val);
1074 
1075 
1076  double& operator() (uint x){
1077  return m_curve(x);
1078  }
1079 
1080  const double& operator() (uint x)const
1081  {
1082  return m_curve(x);
1083  }
1084 
1085 
1086 protected:
1089 
1090 
1091 public:
1092  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1093 
1094 };
1095 
1097 
1102 {
1104  enum Motion_mode {
1105  Write,
1106  Read,
1107  Read_Write,
1108  Benchmark,
1109  Idle,
1110  };
1111 
1112 public:
1113  Motion_RW();
1114  Motion_RW(Endorob *robot);
1115  ~Motion_RW();
1116  void set_endorob_pointer(Endorob *robot);
1117  void set_virt_snake_pointer(Virtual_Snake *virt_snake);
1118  void set_write_frequency(const double &freq);
1119  void set_read_frequency(const double &freq);
1120  void start_recording();
1121  void stop_recording();
1122  void set_file_name_write(const std::string &file);
1123  void set_file_name_read(const std::string &file);
1124  void load_file(const std::string &file);
1125  void load_virtual_snake_file(const std::string &file);
1126  void benchmark_virtual_snake_file(const std::string &file);
1127  void benchmark_virtual_snake_vec(const std::vector<Vec> &virtual_vec, const std::vector<Mat4d> &Td_vec);
1128  void write_once(const Virtual_Snake &curv, const Mat4d &Ttip);
1129  void write_once(const char& key);
1130  bool is_reading_finished();
1131  bool is_running();
1132 
1133 
1134 
1135 
1136 protected:
1137  void motion_RW_loop(int a, int b);
1138  void output_header();
1139  void output_data();
1140 
1141 protected:
1142  std::thread *pthread;
1143  volatile bool m_run;
1145  volatile bool m_start_loop;
1149  std::ofstream m_file_write;
1150  std::ifstream m_file_read;
1153  Motion_mode m_mode;
1154  std::vector<Mat, Eigen::aligned_allocator<Mat>> m_q_data;
1155  std::vector<Mat, Eigen::aligned_allocator<Mat>> m_T_data;
1156  std::vector<double> m_error_data;
1157  //std::vector<double> m_input_data;
1158  std::vector<double> m_input_timing;
1159  std::vector<Vec> m_virtual_snake_data;
1160  std::vector<Mat4d> m_tip_data;
1162  enum class File_type {
1163  Joint,
1164  Virtual_robot,
1165  Master
1166  };
1170  std::ofstream m_benchmark_file;
1171  std::ofstream m_benchmark_check_file;
1172 
1173  // TRO review
1175 
1176 
1177 public:
1178  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1179 
1180 };
1181 
1182 
1183 
1184 
1185 #endif // EndoRob_H
1186 
1187 
1188 
1189 
1190 // Actuation space reduction problem:
1191 // robot dof (i2snake) 8 DOF after coupling
1192 // robot joints: 14 DOF
1193 // robot model : 27 DOF
1194 // ikine process: 8 -> 14 -> 27 -> Jacobian calculation -> 27 -> 14 -> 8
1195 // question is will the joint values be identical where expected
1196 // hypothesis is yes since jacobian column will be the same...
1197 // q is 27x1 so mask matrix should be 8x27.27x1 => 8x1
1198 
1199 
1200 
1201 
1202 
1203 
1204 
1205 
Endorob::m_robot_frame_T
Mat4d m_robot_frame_T
Definition: endorob.h:1018
Virtual_Snake::set_curve
void set_curve(const Vec &curve)
Definition: endorob.cpp:4740
Endorob::m_CPU_affinity
uint m_CPU_affinity
Definition: endorob.h:1030
Endorob::get_Euler
Vec3d get_Euler(const Mat &mat)
Get Euler angles.
Definition: endorob.cpp:4814
Motion_RW::is_running
bool is_running()
Definition: endorob.cpp:4181
Snake_Path::size
uint size()
Definition: endorob.cpp:4642
Endorob::m_iterations
unsigned long m_iterations
Definition: endorob.h:988
Endorob::set_solver_body_target
void set_solver_body_target(const Vec &vec)
Set solver's full body target (for full body control)
Definition: endorob.cpp:2169
Endorob::m_virtual_snake
Vec m_virtual_snake
Definition: endorob.h:1016
Endorob::threaded_solver_2
void threaded_solver_2(int a, int b)
Definition: endorob.cpp:1586
Endorob::m_apply_joint_coupling
bool m_apply_joint_coupling
Definition: endorob.h:976
Endorob::get_full_kinematics
Mat get_full_kinematics()
Get the full and complete forward kinematics as a nx4 matrix of homogeneous matrix for each link.
Definition: endorob.cpp:2826
Virtual_Snake::curve
Vec curve() const
Definition: endorob.cpp:4735
Endorob::set_DH_convention
void set_DH_convention(const DH_type &convention)
Set DH convention: modified or standard.
Definition: endorob.cpp:153
Motion_RW::set_virt_snake_pointer
void set_virt_snake_pointer(Virtual_Snake *virt_snake)
Definition: endorob.cpp:3650
DH_table_entry::alpha
double alpha()
Definition: endorob.cpp:3517
Endorob::set_flex_gradient
void set_flex_gradient(const Vec &vec)
Setup flex gradient for continuum robots; used if the material is not uniformely bending.
Definition: endorob.cpp:337
Endorob::m_mask_vector
Vec m_mask_vector
Definition: endorob.h:996
Endorob::m_J_inv
Mat m_J_inv
Definition: endorob.h:1000
Solver_type::Jacobian_pseudo_inverse
Simple pseudo-inverse approach.
Solver_type::Jacobian_pseudo_inverse_null_space
Pseudo iverse with null space.
Motion_RW::pthread
std::thread * pthread
Definition: endorob.h:1142
Endorob::rotate_transform_locally
Mat4d rotate_transform_locally(const Mat4d &mat, const Mat3d &rot)
Rotate transform locally.
Definition: endorob.cpp:2009
DH_table_entry::m_flex_gradient
Vec m_flex_gradient
Definition: endorob.h:371
rad_to_degree
double rad_to_degree(const double &val)
Definition: endorob.cpp:4840
Vec
Eigen::VectorXd Vec
Definition: endorob.h:165
Motion_RW::m_robot_path_for_plot
Snake_Path m_robot_path_for_plot
Definition: endorob.h:1174
Motion_RW::start_recording
void start_recording()
Definition: endorob.cpp:3666
Virtual_Snake::set_p0
void set_p0(const Vec3d &p0)
Definition: endorob.cpp:4720
Endorob::add_DH_entry
void add_DH_entry(const double &a, const double &alpha, const double &d, const double &theta, const Joint_type &type, const double &a_bis=0, const double &theta_bis=0, const uint &flex=0)
Setup robot DH table one entry at a time (Attention, modified DH convention by default)
Definition: endorob.cpp:283
Virtual_Snake::get_links
uint get_links()
Definition: endorob.cpp:4774
Motion_RW::m_start_time
Time_point m_start_time
Definition: endorob.h:1151
Endorob::m_target_T
Mat4d m_target_T
Definition: endorob.h:961
Endorob::solve_for_mask
void solve_for_mask()
Definition: endorob.cpp:1518
Endorob::m_p_tmp
Vec3d m_p_tmp
Definition: endorob.h:1004
Endorob::m_do_not_start_solver
bool m_do_not_start_solver
Definition: endorob.h:989
Endorob::get_position_error
Vec3d get_position_error(const Mat4d &Td, const Mat4d &Te)
Definition: endorob.cpp:1280
Endorob::get_forward_kinematics
Mat4d get_forward_kinematics()
Get the tip pose / homogeneous matrix (forward kinematics)
Definition: endorob.cpp:561
Endorob::m_z_tmp
Vec3d m_z_tmp
Definition: endorob.h:1004
Endorob::m_full_body_needed
bool m_full_body_needed
Definition: endorob.h:1017
Endorob::damped_least_square_method
void damped_least_square_method()
Definition: endorob.cpp:3195
Motion_RW::m_file_name_write
std::string m_file_name_write
Definition: endorob.h:1152
Endorob::rot_x
Mat3d rot_x(const double &angle)
Get the desired rotation matrix around the X axis rotated by a desired angle:
Definition: endorob.cpp:1989
Motion_RW::m_period_read
double m_period_read
Definition: endorob.h:1146
Endorob::set_solver_weight_vec
void set_solver_weight_vec(const uint &index, const double &val)
Definition: endorob.cpp:2871
Endorob::joints
unsigned joints()
Get robot number of joints (different to the number of DOF if coupling is used)
Definition: endorob.cpp:556
Snake_Path::set_weight
void set_weight(const double &weight, const int &index=-1)
Definition: endorob.cpp:4647
Joint_type::Flex
For continuum or flexible joints (under development)
Joint_type::Rolling
Rolling-joint (two circular surfaces rolling against each other, changing the contact point)
Endorob::follow_the_leader_3
Vec follow_the_leader_3(Snake_Path path, const Vec &desired_shape, const double &translation)
Definition: endorob.cpp:2504
Motion_RW::m_runonce
bool m_runonce
Definition: endorob.h:1169
Endorob::get_faulty_q
Vec get_faulty_q()
Definition: endorob.cpp:1504
Endorob::convert_fwd_k_into_vec
void convert_fwd_k_into_vec()
Definition: endorob.cpp:3101
Endorob::m_tool_frame_T
Mat4d m_tool_frame_T
Definition: endorob.h:959
M_PI
#define M_PI
Definition: endorob.h:131
Endorob::m_error_masked
Vec m_error_masked
Definition: endorob.h:1021
Endorob::get_iteration
unsigned get_iteration()
Get number of iterations.
Definition: endorob.cpp:2114
Endorob::m_thread_running
volatile bool m_thread_running
Definition: endorob.h:992
Endorob::reset_q_vec
void reset_q_vec()
Reset robot to startup state.
Definition: endorob.cpp:1927
Motion_RW::m_q_data
std::vector< Mat, Eigen::aligned_allocator< Mat > > m_q_data
Definition: endorob.h:1154
Motion_RW::is_reading_finished
bool is_reading_finished()
Definition: endorob.cpp:4161
degree_to_rad
double degree_to_rad(const double &val)
Definition: endorob.cpp:4845
is_geq
bool is_geq(const double &a, const double &b, const double &tolerance=1E-4)
Definition: endorob.cpp:4857
Motion_RW::output_data
void output_data()
Definition: endorob.cpp:4591
Endorob::m_xi_vec
Vec m_xi_vec
Definition: endorob.h:978
Endorob::m_fwd_k_vec
Mat m_fwd_k_vec
Definition: endorob.h:1014
Virtual_Snake::set_pe
void set_pe(const Vec3d &pe)
Definition: endorob.cpp:4710
Endorob::get_IK_solution
Vec get_IK_solution()
Request for solver's converged solution, whether target is reached or not.
Definition: endorob.cpp:1890
Endorob::m_global_frame_to_robot_increment
Mat4d m_global_frame_to_robot_increment
Definition: endorob.h:1018
Ms
std::chrono::milliseconds Ms
Definition: endorob.h:174
Motion_RW::set_file_name_read
void set_file_name_read(const std::string &file)
Definition: endorob.cpp:3714
Endorob::zero_thresholding
Vec zero_thresholding(const Vec &q_vec, const double &val=M_PI/180/20)
Definition: endorob.cpp:3277
Virtual_Snake::p0
Vec3d p0()
Definition: endorob.cpp:4715
Endorob::follow_the_leader_2
Vec follow_the_leader_2(const std::vector< Vec3d, Eigen::aligned_allocator< Vec3d >> path, const Vec &desired_shape, const double &translation)
Definition: endorob.cpp:2267
DH_table_entry::m_joint_type
Joint_type m_joint_type
Definition: endorob.h:367
llong
long long llong
Definition: endorob.h:157
Motion_RW::m_file_name_read
std::string m_file_name_read
Definition: endorob.h:1152
Motion_RW::m_file_write
std::ofstream m_file_write
Definition: endorob.h:1149
Endorob::mask_resize
Mat mask_resize(const Mat &mat)
Definition: endorob.cpp:2941
Snake_Path
Snake Path Class.
Definition: endorob.h:380
Endorob::m_apply_weighted_solution
bool m_apply_weighted_solution
Definition: endorob.h:1010
Virtual_Snake::m_weights
Vec m_weights
Definition: endorob.h:1088
Virtual_Snake
Virtual Snake Robot Class.
Definition: endorob.h:1052
Endorob::get_Jacobian
Mat get_Jacobian()
Get the Jacobian matrix of the robot in the current configuration.
Definition: endorob.cpp:654
Endorob::set_mask
void set_mask(const Vec &mask)
Set DOF reduction mask if your robot/instrument has less than 6 DOF. The mask is a 6x1 vector x,...
Definition: endorob.cpp:675
Endorob::iterative_solve_equation
void iterative_solve_equation()
Definition: endorob.cpp:3218
Endorob::m_start_solver
volatile bool m_start_solver
Definition: endorob.h:985
Virtual_Snake::pb
Vec3d pb()
Definition: endorob.cpp:4725
is_leq
bool is_leq(const double &a, const double &b, const double &tolerance=1E-4)
Definition: endorob.cpp:4865
Time_point
std::chrono::high_resolution_clock::time_point Time_point
Definition: endorob.h:172
Endorob::sphere_line_intersection
Vec3d sphere_line_intersection(const double &radius, const Vec3d &center, const Vec3d &A, const Vec3d &B)
Sphere line intersection.
Definition: endorob.cpp:2061
Endorob::m_instantiation_index
uint m_instantiation_index
Definition: endorob.h:1035
Endorob
This is the main Class: EndoRob that you can use to control your own weird looking robot....
Definition: endorob.h:420
Endorob::get_coupling_matrix
Mat get_coupling_matrix(void)
Get the joint coupling matrix.
Definition: endorob.cpp:659
Endorob::m_q_vec_for_user
Vec m_q_vec_for_user
Definition: endorob.h:964
Endorob::m_full_body_vec_desired
Vec m_full_body_vec_desired
Definition: endorob.h:1015
Endorob::project_point_onto_line
Vec3d project_point_onto_line(const Vec3d &P, const Vec3d &A, const Vec3d &B)
Project point P onto line defined by AB (orthogonal projection)
Definition: endorob.cpp:2051
Endorob::m_prev_q_vec
Vec m_prev_q_vec
Definition: endorob.h:963
Endorob::get_rpy
Vec3d get_rpy(const Mat &mat)
Get Roll Pitch and Yaw angles.
Definition: endorob.cpp:1962
Motion_RW::m_input_timing
std::vector< double > m_input_timing
Definition: endorob.h:1158
Solver_type::Full_body_jacobian
Full body Jacobian approach for full joint control.
Endorob::m_base_frame_T
Mat4d m_base_frame_T
Definition: endorob.h:959
Motion_RW::m_header_written
bool m_header_written
Definition: endorob.h:1144
Endorob::solver_has_converged
bool solver_has_converged()
Definition: endorob.cpp:2149
uint
unsigned int uint
Definition: endorob.h:156
Endorob::solve_with_tentacle
Vec solve_with_tentacle(Mat T_)
Definition: endorob.cpp:2190
Endorob::set_desired_curve
void set_desired_curve(const Vec &curve)
Set desired curve.
Definition: endorob.cpp:1879
Endorob::m_CPU_cpt
static uint m_CPU_cpt
Definition: endorob.h:1029
DH_table_entry::m_d
double m_d
Definition: endorob.h:366
Endorob::load_DH
void load_DH(std::string filename)
Load DH entries from file.
Definition: endorob.cpp:198
Snake_Path::pop_back
void pop_back()
Definition: endorob.cpp:4636
Vec3d
Eigen::Vector3d Vec3d
Definition: endorob.h:163
DH_table_entry::theta
double theta()
Definition: endorob.cpp:3527
Endorob::m_J_masked
Mat m_J_masked
Definition: endorob.h:1000
DH_table_entry::joint_limit_max
double joint_limit_max()
Definition: endorob.cpp:3552
Endorob::m_q_vec
Vec m_q_vec
Definition: endorob.h:962
Endorob::calculate_joint_LUT
void calculate_joint_LUT()
Definition: endorob.cpp:3084
Endorob::m_J_rot
Mat m_J_rot
Definition: endorob.h:1002
Endorob::get_full_mobile_body_error
void get_full_mobile_body_error()
Definition: endorob.cpp:1326
Endorob::set_flex_resolution
void set_flex_resolution(const uint &res)
Setup flex resolution for continuum robots: sampling/division into smaller revolute joints.
Definition: endorob.cpp:332
Endorob::get_transform_increment
Mat4d get_transform_increment(const Mat4d &start, const Mat4d &goal)
Get increment between two transformation matrices (rotation and translation)
Definition: endorob.cpp:4805
Motion_RW::m_overwrite_file_period
bool m_overwrite_file_period
Definition: endorob.h:1161
Endorob::get_error
void get_error(const Mat4d &Td, const Mat4d &Te)
Definition: endorob.cpp:1305
Endorob::m_cpu_info_dispayed
static bool m_cpu_info_dispayed
Definition: endorob.h:1034
DH_table_entry::a_bis
double a_bis()
Definition: endorob.cpp:3532
Endorob::follow_the_leader_weighted
Virtual_Snake follow_the_leader_weighted(Snake_Path path, const Virtual_Snake &desired_shape, const double &translation)
Definition: endorob.cpp:2674
Motion_RW::load_file
void load_file(const std::string &file)
Definition: endorob.cpp:3719
Endorob::follow_the_leader
Vec follow_the_leader(const std::vector< Vec3d, Eigen::aligned_allocator< Vec3d >> path, const Vec &desired_shape, const double &translation)
Definition: endorob.cpp:2197
Endorob::calculte_dof_after_coupling
void calculte_dof_after_coupling()
Definition: endorob.cpp:3018
Endorob::calculate_full_body_jacobian
void calculate_full_body_jacobian()
Definition: endorob.cpp:1063
Endorob::pseudo_inverse_null_space
void pseudo_inverse_null_space()
Definition: endorob.cpp:3166
DH_table_entry::m_a
double m_a
Definition: endorob.h:366
Joint_type::Prismatic
Standard prismatic joint.
DH_table_entry::m_offset
double m_offset
Definition: endorob.h:368
Snake_Path::get_weights_vector
Vec get_weights_vector(const uint &size)
Definition: endorob.cpp:4652
Motion_RW::stop_recording
void stop_recording()
Definition: endorob.cpp:3699
Virtual_Snake::Virtual_Snake
Virtual_Snake()
Definition: endorob.cpp:4678
Endorob::m_J
Mat m_J
Definition: endorob.h:1000
Endorob::split
std::vector< std::string > split(const std::string &s, char delimiter, bool remove_empty)
Definition: endorob.cpp:3036
Endorob::get_full_body_error
Vec get_full_body_error()
Definition: endorob.cpp:1321
Snake_Path::operator[]
Vec3d & operator[](uint x)
Definition: endorob.h:395
Endorob::m_wait_for_sync
volatile bool m_wait_for_sync
Definition: endorob.h:990
Endorob::get_RMS_error
double get_RMS_error()
Get the RMS per joint error between the desired and current position.
Definition: endorob.cpp:2125
Endorob::modify_error_with_f
void modify_error_with_f()
Definition: endorob.cpp:3246
Endorob::m_q_vec_rest
Vec m_q_vec_rest
Definition: endorob.h:962
Virtual_Snake::set
void set(const uint &index1, const uint &index2, const uint &block1, const uint &block2, const Vec &val)
Definition: endorob.cpp:4789
Endorob::m_solver_pending
volatile bool m_solver_pending
Definition: endorob.h:991
DH_table_entry::get_flex_gradient
Vec get_flex_gradient()
Definition: endorob.cpp:3542
Endorob::p_solver_type
void(Endorob::* p_solver_type)(void)
Definition: endorob.h:969
Endorob::set_solver_type
void set_solver_type(Solver_type solver, const double &lambda=1)
Set iterative solver type.
Definition: endorob.cpp:342
Endorob::set_robot_reference_frame
void set_robot_reference_frame(const Mat4d &T)
Definition: endorob.cpp:2892
Endorob::rot_y
Mat3d rot_y(const double &angle)
Get the desired rotation matrix around the Y axis rotated by a desired angle:
Definition: endorob.cpp:1994
Endorob::get_body_vec
Vec get_body_vec()
Get full-body vector.
Definition: endorob.cpp:2104
Virtual_Snake::rows
uint rows() const
Definition: endorob.cpp:4779
Snake_Path::~Snake_Path
~Snake_Path()
Definition: endorob.cpp:4619
Endorob::m_mask_dof
unsigned m_mask_dof
Definition: endorob.h:995
Endorob::apply_joint_limits
void apply_joint_limits()
Definition: endorob.cpp:1485
Joint_type::Rolling_flex
Multi-stage flexible joint with Rolling-joints (two circular surfaces rolling against each other,...
Endorob::m_robot_path
std::vector< Vec3d, Eigen::aligned_allocator< Vec3d > > m_robot_path
Definition: endorob.h:1024
Motion_RW::m_file_counter
static uint m_file_counter
Definition: endorob.h:1168
Motion_RW::motion_RW_loop
void motion_RW_loop(int a, int b)
Definition: endorob.cpp:4188
is_almost_equal
bool is_almost_equal(const double &a, const double &b, const double &tolerance=1E-4)
Definition: endorob.cpp:4850
Vec2d
Eigen::Vector2d Vec2d
Definition: endorob.h:164
DH_table_entry::m_joint_limit_min
double m_joint_limit_min
Definition: endorob.h:369
Endorob::set_joint_coupling
void set_joint_coupling(const Vec &coupling)
Set joint coupling if multiple joint are moving together (coupled) whether for mechanical coupling or...
Definition: endorob.cpp:703
DH_table_entry::a
double a()
Definition: endorob.cpp:3512
Endorob::base_transformation_matrix
Mat4d base_transformation_matrix(DH_table_entry DH, double q)
Definition: endorob.cpp:3291
Endorob::m_iteration_overflow
bool m_iteration_overflow
Definition: endorob.h:987
Endorob::Endorob
Endorob()
Default constructor.
Definition: endorob.cpp:33
Endorob::jacobian_transpose
void jacobian_transpose()
Definition: endorob.cpp:3207
Motion_RW::m_error_data
std::vector< double > m_error_data
Definition: endorob.h:1156
Motion_RW::write_once
void write_once(const Virtual_Snake &curv, const Mat4d &Ttip)
Definition: endorob.cpp:4073
Endorob::set_q_vec
void set_q_vec(const Vec &q)
Set robot's joint vector.
Definition: endorob.cpp:1906
Endorob::m_phi
Vec m_phi
Definition: endorob.h:1007
Motion_RW::set_file_name_write
void set_file_name_write(const std::string &file)
Definition: endorob.cpp:3709
Endorob::m_full_body_vec_current
Vec m_full_body_vec_current
Definition: endorob.h:1015
Virtual_Snake::~Virtual_Snake
~Virtual_Snake()
Definition: endorob.cpp:4700
Motion_RW::m_start_loop
volatile bool m_start_loop
Definition: endorob.h:1145
Motion_RW::m_period_write
double m_period_write
Definition: endorob.h:1146
Endorob::calculate_pseudo_inverse_masked
void calculate_pseudo_inverse_masked()
Definition: endorob.cpp:3385
Endorob::m_prev_xi_vec
Vec m_prev_xi_vec
Definition: endorob.h:979
Endorob::m_converged
volatile bool m_converged
Definition: endorob.h:986
DH_table_entry::get_flex_resolution
uint get_flex_resolution()
Definition: endorob.cpp:3537
Mat
Eigen::MatrixXd Mat
Definition: endorob.h:160
Virtual_Snake::set_weights
void set_weights(const Vec &weights)
Definition: endorob.cpp:4750
Motion_RW::m_t0_write
Time_point m_t0_write
Definition: endorob.h:1151
Endorob::m_run
volatile bool m_run
Definition: endorob.h:985
Solver_type
Solver_type
Currently supported solvers.
Definition: endorob.h:148
Endorob::solve
void solve()
Definition: endorob.cpp:1415
Motion_RW::set_write_frequency
void set_write_frequency(const double &freq)
Definition: endorob.cpp:3655
DH_modified
Modified DH approach (better than standard!)
Definition: endorob.h:333
Motion_RW::m_file_read
std::ifstream m_file_read
Definition: endorob.h:1150
Virtual_Snake::operator()
double & operator()(uint x)
Definition: endorob.h:1076
Endorob::m_CPU_amount
static uint m_CPU_amount
Definition: endorob.h:1028
Delta_t
std::chrono::duration< double > Delta_t
Definition: endorob.h:175
Motion_RW::~Motion_RW
~Motion_RW()
Definition: endorob.cpp:3620
Endorob::disable_fault_tolerance
void disable_fault_tolerance()
Disable joint fault tolerance.
Definition: endorob.cpp:2913
Endorob::calculate_pseudo_inverse
void calculate_pseudo_inverse()
Definition: endorob.cpp:3334
Snake_Path::Snake_Path
Snake_Path()
Definition: endorob.cpp:4616
Endorob::m_error_weights
Mat m_error_weights
Definition: endorob.h:1005
Endorob::pseudo_inverse_normal
void pseudo_inverse_normal()
DH_table_entry::m_a_bis
double m_a_bis
Definition: endorob.h:366
Endorob::m_joint_lookup_table
Vec m_joint_lookup_table
Definition: endorob.h:980
Snake_Path::get_weight
double get_weight(const uint &index)
Definition: endorob.cpp:4667
Endorob::check_for_convergence
void check_for_convergence()
Definition: endorob.cpp:1551
Endorob::get_joint_limit_scalar
Vec get_joint_limit_scalar()
Definition: endorob.cpp:3130
Motion_RW::set_read_frequency
void set_read_frequency(const double &freq)
Definition: endorob.cpp:3660
Endorob::initialize
void initialize()
Once all parameters set, initialize robot and start solver.
Definition: endorob.cpp:368
Endorob::threaded_solver
void threaded_solver(int a, int b)
Definition: endorob.cpp:1353
Endorob::get_error_vector
Vec get_error_vector()
Get the current error between the desired and current position.
Definition: endorob.cpp:2142
Endorob::calculate_full_mobile_body_jacobian
void calculate_full_mobile_body_jacobian()
Definition: endorob.cpp:1158
DH_table_entry::m_joint_limit_max
double m_joint_limit_max
Definition: endorob.h:369
Endorob::get_random_q_vec
Vec get_random_q_vec()
Get random feasible joint vector.
Definition: endorob.cpp:1944
DH_table_entry
DH Table Class.
Definition: endorob.h:343
Motion_RW::m_T_data
std::vector< Mat, Eigen::aligned_allocator< Mat > > m_T_data
Definition: endorob.h:1155
Endorob::m_apply_fault_tolerance
std::atomic< bool > m_apply_fault_tolerance
Definition: endorob.h:1039
Virtual_Snake::block
Vec3d block(const uint &index)
Definition: endorob.cpp:4784
DH_table_entry::set_joint_limits
void set_joint_limits(const double &min, const double &max)
Definition: endorob.cpp:3496
Endorob::m_joint_coupling_matrix
Mat m_joint_coupling_matrix
Definition: endorob.h:974
Endorob::calculate_full_forward_kinematics
void calculate_full_forward_kinematics()
Definition: endorob.cpp:765
Endorob::dof
unsigned dof()
Get robot number of DOF (different to the number of joints if coupling is used)
Definition: endorob.cpp:551
Endorob::m_faulty_joint_vec
std::vector< bool > m_faulty_joint_vec
Definition: endorob.h:1038
DH_type
DH_type
DH two typical standards:
Definition: endorob.h:331
Endorob::calculate_coupling_matrix_increase
void calculate_coupling_matrix_increase()
Definition: endorob.cpp:2967
Motion_RW::m_virtual_snake_data
std::vector< Vec > m_virtual_snake_data
Definition: endorob.h:1159
Endorob::m_assigning_CPU
static volatile bool m_assigning_CPU
Definition: endorob.h:1031
Endorob::set_joint_limits
void set_joint_limits(const double &min, const double &max)
Set joint limits for current joint, radians for revolute or rolling joints, meters for prismatic.
Definition: endorob.cpp:320
Endorob::m_J_for_user
Mat m_J_for_user
Definition: endorob.h:1001
Endorob::set_solver_target
void set_solver_target(const Mat4d &T)
Set solver's target 4x4 homegenous matrix.
Definition: endorob.cpp:2159
Endorob::set_vec_relative_to_base
Vec set_vec_relative_to_base(const Vec &vec)
Definition: endorob.cpp:2831
Endorob::m_prev_error
Vec m_prev_error
Definition: endorob.h:1021
Motion_RW::m_t0_read
Time_point m_t0_read
Definition: endorob.h:1151
Motion_RW::benchmark_virtual_snake_file
void benchmark_virtual_snake_file(const std::string &file)
Definition: endorob.cpp:3961
DH_table_entry::d
double d()
Definition: endorob.cpp:3522
Endorob::m_DH_table
std::vector< DH_table_entry > m_DH_table
Definition: endorob.h:966
Motion_RW::m_benchmark_check_file
std::ofstream m_benchmark_check_file
Definition: endorob.h:1171
Endorob::set_solver_weight_mat
void set_solver_weight_mat(const uint &index, const double &val)
Set the solver's weights value for a desired joint at a specific index.
Definition: endorob.cpp:2877
Motion_RW::m_benchmark_file
std::ofstream m_benchmark_file
Definition: endorob.h:1170
Endorob::m_error_weights_vec
Vec m_error_weights_vec
Definition: endorob.h:1006
Endorob::calculate_coupling_matrix_reduce
void calculate_coupling_matrix_reduce()
Definition: endorob.cpp:2992
Endorob::m_coupling_vector
Vec m_coupling_vector
Definition: endorob.h:973
Motion_RW::File_type
File_type
Definition: endorob.h:1162
Endorob::solver_has_ended
bool solver_has_ended()
Definition: endorob.cpp:2154
DH_table_entry::get_joint_type
Joint_type get_joint_type()
Definition: endorob.cpp:3547
Motion_RW::File_type::Joint
Joint vector data.
Endorob::get_q_vec
Vec get_q_vec()
Get joint vector.
Definition: endorob.cpp:1861
Motion_RW
Motion recorder Class.
Definition: endorob.h:1101
Endorob::calculate_jacobian
void calculate_jacobian()
Definition: endorob.cpp:962
DH_table_entry::DH_table_entry
DH_table_entry(const double &a, const double &alpha, const double &d, const double &theta, const Joint_type &type)
Definition: endorob.cpp:3464
Endorob::angle_modulus
Vec angle_modulus(const Vec &q_vec)
Definition: endorob.cpp:2918
Motion_RW::Motion_RW
Motion_RW()
Definition: endorob.cpp:3569
Motion_RW::load_virtual_snake_file
void load_virtual_snake_file(const std::string &file)
Definition: endorob.cpp:3867
Endorob::~Endorob
~Endorob()
Default destructor.
Definition: endorob.cpp:133
Endorob::get_orientation_error
Vec3d get_orientation_error(const Mat4d &Td, const Mat4d &Te)
Definition: endorob.cpp:1286
Endorob::set_base_frame
void set_base_frame(const Mat4d &T)
Set base frame.
Definition: endorob.cpp:670
Endorob::get_instant_IK_solution
Vec get_instant_IK_solution()
Request for solver's current solution,if solver is still running, the solution may not be valid.
Definition: endorob.cpp:1849
DH_table_entry::set_flex_gradient
void set_flex_gradient(const Vec &vec)
Definition: endorob.cpp:3507
Endorob::m_joint_coupling_reduce_dimension
Mat m_joint_coupling_reduce_dimension
Definition: endorob.h:975
Motion_RW::benchmark_virtual_snake_vec
void benchmark_virtual_snake_vec(const std::vector< Vec > &virtual_vec, const std::vector< Mat4d > &Td_vec)
Definition: endorob.cpp:4055
Endorob::invert_transform
Mat4d invert_transform(const Mat4d &mat)
Invert homogeneous matrix for opposite transformation.
Definition: endorob.cpp:4832
Endorob::get_rotation_increment
Mat3d get_rotation_increment(const Mat3d &start, const Mat3d &goal)
Get increment between two rotation matrices.
Definition: endorob.cpp:4795
Endorob::save_DH
void save_DH(std::string filename)
Save DH entries to file.
Definition: endorob.cpp:158
Virtual_Snake::weights
Vec weights() const
Definition: endorob.cpp:4769
Snake_Path::m_path
std::vector< Vec3d, Eigen::aligned_allocator< Vec3d > > m_path
Definition: endorob.h:400
Endorob::m_virtual_robot
static Vec m_virtual_robot
Definition: endorob.h:1025
Endorob::m_joints
uint m_joints
Definition: endorob.h:957
Motion_RW::set_endorob_pointer
void set_endorob_pointer(Endorob *robot)
Definition: endorob.cpp:3645
Mat4d
Eigen::Matrix4d Mat4d
Definition: endorob.h:161
Motion_RW::pvirt_snake
Virtual_Snake * pvirt_snake
Definition: endorob.h:1148
DH_table_entry::m_flex_resolution
uint m_flex_resolution
Definition: endorob.h:370
Endorob::m_tip_T
Mat4d m_tip_T
Definition: endorob.h:961
Motion_RW::m_file_type
File_type m_file_type
Definition: endorob.h:1167
Motion_RW::File_type::Master
Master input data.
Endorob::m_robot_frame_to_global_increment
Mat4d m_robot_frame_to_global_increment
Definition: endorob.h:1018
Endorob::check_for_cpu
void check_for_cpu()
Definition: endorob.cpp:3223
Snake_Path::clear
void clear()
Definition: endorob.cpp:4672
Snake_Path::m_weights
std::vector< double > m_weights
Definition: endorob.h:401
Endorob::m_check_joint_limit_jacobian
bool m_check_joint_limit_jacobian
Definition: endorob.h:967
Endorob::m_p_e
Vec3d m_p_e
Definition: endorob.h:1003
Quat
Eigen::Quaterniond Quat
Definition: endorob.h:166
Endorob::pseudo_inverse_simple
void pseudo_inverse_simple()
Definition: endorob.cpp:3152
Endorob::m_apply_mask
bool m_apply_mask
Definition: endorob.h:997
Endorob::m_lambda
double m_lambda
Definition: endorob.h:968
Motion_RW::m_tip_data
std::vector< Mat4d > m_tip_data
Definition: endorob.h:1160
Endorob::get_error_norm
double get_error_norm()
Get the error norm between the desired and current position.
Definition: endorob.cpp:2119
Endorob::rotate_transform_around_axis_and_P
Mat4d rotate_transform_around_axis_and_P(const Mat4d &T, const double &angle, const Vec3d &axis, const Vec &P)
Rotate transform around arbitrary axis and point.
Definition: endorob.cpp:2033
chrono_time
std::chrono::high_resolution_clock chrono_time
Definition: endorob.h:173
DH_table_entry::joint_limit_min
double joint_limit_min()
Definition: endorob.cpp:3557
Endorob::check_joint_in_limit
bool check_joint_in_limit(const Vec &q)
Definition: endorob.cpp:3050
Endorob::apply_joint_coupling
void apply_joint_coupling()
Definition: endorob.cpp:2960
Solver_type::Jacobian_transpose
Jacobian transpose.
Motion_RW::m_run
volatile bool m_run
Definition: endorob.h:1143
Endorob::set_rpy
Mat4d set_rpy(const Mat &mat, Vec3d rpy)
Set the roll pitch and yaw angles into a 4x4 homogeneous matrix.
Definition: endorob.cpp:1980
DH_table_entry::m_alpha
double m_alpha
Definition: endorob.h:366
DH_standard
Standard DH approach.
Definition: endorob.h:332
Solver_type::Jacobian_DLS
Damped least square approach.
Endorob::calculate_pseudo_inverse_DLS
void calculate_pseudo_inverse_DLS()
Definition: endorob.cpp:3429
Endorob::get_tip_pose
Mat4d get_tip_pose()
Get the tip pose / homogeneous matrix (forward kinematics)
Definition: endorob.cpp:952
Endorob::get_desired_curve
Vec get_desired_curve()
Get desired curve.
Definition: endorob.cpp:1874
Endorob::set_tool_frame
void set_tool_frame(const Mat4d &T)
Set tool frame.
Definition: endorob.cpp:665
Endorob::m_dof
uint m_dof
Definition: endorob.h:958
Endorob::rot_z
Mat3d rot_z(const double &angle)
Get the desired rotation matrix around the Z axis rotated by a desired angle:
Definition: endorob.cpp:1999
DH_table_entry::set_offset
void set_offset(const double &offset)
Definition: endorob.cpp:3491
Endorob::m_DH_convention
DH_type m_DH_convention
Definition: endorob.h:960
Virtual_Snake::base
Vec base()
Definition: endorob.cpp:4730
Endorob::get_DH_table
std::vector< DH_table_entry > get_DH_table()
Get the full DH table of the robot.
Definition: endorob.cpp:2821
Mat3d
Eigen::Matrix3d Mat3d
Definition: endorob.h:162
Endorob::get_tip_position
Vec3d get_tip_position()
Get the tip position / 3x1 vector (forward kinematics)
Definition: endorob.cpp:957
Endorob::m_alpha
Vec m_alpha
Definition: endorob.h:1007
Endorob::enforce_joint_limits_mode
void enforce_joint_limits_mode(void)
Enforce joint limit mode. In this mode the joint cannot exceed their joint limit.
Definition: endorob.cpp:2902
Motion_RW::File_type::Virtual_robot
virtual robot input data
Endorob::get_full_q_vec
Vec get_full_q_vec()
Get complete joint vector before coupling.
Definition: endorob.cpp:1869
Motion_RW::m_mode
Motion_mode m_mode
Definition: endorob.h:1153
Endorob::get_vector_increment
Vec get_vector_increment(const Vec &start, const Vec &goal)
Get increment between two vectors.
Definition: endorob.cpp:4800
Virtual_Snake::pe
Vec3d pe()
Definition: endorob.cpp:4705
Endorob::m_identity
Mat m_identity
Definition: endorob.h:1008
Endorob::m_joint_index_offset
unsigned m_joint_index_offset
Definition: endorob.h:1009
Joint_type
Joint_type
Currently supported joint types:
Definition: endorob.h:138
Endorob::rotate_transform_around_P
Mat4d rotate_transform_around_P(const Mat4d &T, const Mat3d &rot, const Vec &P)
Rotate transform around arbitrary point.
Definition: endorob.cpp:2018
Endorob::rot_xyz
Mat3d rot_xyz(const double &angle, const Vec3d &axis)
Get the desired rotation matrix formed by the angle and axis representation.
Definition: endorob.cpp:2004
Endorob::set_faulty_joint
void set_faulty_joint(const uint &joint, const double &val)
Set a joint as faulty for Jacobian Compensation.
Definition: endorob.cpp:2907
Endorob::m_xi_vec_rest
Vec m_xi_vec_rest
Definition: endorob.h:978
Endorob::psolver
std::thread * psolver
Definition: endorob.h:984
Endorob::m_instantiations
static uint m_instantiations
Definition: endorob.h:1033
Motion_RW::output_header
void output_header()
Definition: endorob.cpp:4568
Endorob::m_error
Vec m_error
Definition: endorob.h:1021
DH_table_entry::m_theta
double m_theta
Definition: endorob.h:366
Snake_Path::push_back
void push_back(const Vec3d &point)
Definition: endorob.cpp:4625
Endorob::m_rolling_joint_present
bool m_rolling_joint_present
Definition: endorob.h:977
Virtual_Snake::set_weight
void set_weight(const uint &index, const double &val)
Definition: endorob.cpp:4762
DH_table_entry::set_flex_resolution
void set_flex_resolution(const uint &res)
Definition: endorob.cpp:3502
Endorob::m_diverged
volatile bool m_diverged
Definition: endorob.h:986
Joint_type::Revolute
Standard revolute joint.
Virtual_Snake::m_curve
Vec m_curve
Definition: endorob.h:1087
Endorob::null_space_constraint_calculation
void null_space_constraint_calculation()
Definition: endorob.cpp:3185
Motion_RW::probot
Endorob * probot
Definition: endorob.h:1147
Endorob::m_prev_error_masked
Vec m_prev_error_masked
Definition: endorob.h:1021
Endorob::m_J_inv_masked
Mat m_J_inv_masked
Definition: endorob.h:1000
Endorob::m_J_vel
Mat m_J_vel
Definition: endorob.h:1002
Endorob::get_snake_base
Mat get_snake_base()
Definition: endorob.cpp:2843