sot-torque-control
1.6.5
Collection of dynamic-graph entities aimed at implementing torque control on different robots.
|
|
Go to the documentation of this file.
6 #ifndef __sot_torque_control_trajectory_generator_H__
7 #define __sot_torque_control_trajectory_generator_H__
14 #if defined(trajectory_generator_EXPORTS)
15 #define TRAJECTORYGENERATOR_EXPORT __declspec(dllexport)
17 #define TRAJECTORYGENERATOR_EXPORT __declspec(dllimport)
20 #define HRP2COMMON_EXPORT
27 #include <dynamic-graph/signal-helper.h>
34 #include "boost/assign.hpp"
40 #define MAXBUFSIZE ((int)1000000)
43 int cols = 0, rows = 0;
48 infile.open(filename);
49 while (!infile.eof()) {
51 getline(infile, line);
55 std::stringstream stream(line);
56 while (!stream.eof()) stream >> buff[cols * rows + temp_cols++];
58 if (temp_cols == 0)
continue;
62 else if (temp_cols != cols && !infile.eof()) {
63 std::cout <<
"Error while reading matrix from file, line " << rows
64 <<
" has " << temp_cols
65 <<
" columnds, while preceding lines had " << cols
67 std::cout << line <<
"\n";
73 std::cout <<
"Max buffer size exceeded (" << rows <<
" rows, " << cols
82 Eigen::MatrixXd result(rows, cols);
83 for (
int i = 0; i < rows; i++)
84 for (
int j = 0; j < cols; j++) result(i, j) = buff[cols * i + j];
111 void sendMsg(
const std::string& msg, MsgType t = MSG_TYPE_INFO,
112 const char* file =
"",
int line = 0) {
113 sendMsg(
"[AbstrTrajGen] " + msg, t, file, line);
118 Eigen::VectorXd::Index size) {
126 const Eigen::VectorXd& x_init,
127 const Eigen::VectorXd& x_final) {
128 assert(x_init.size() == x_final.size() &&
129 "Initial and final state must have the same size");
138 if (x_init.size() !=
m_x_init.size())
return false;
147 if (1 !=
m_x_init.size())
return false;
156 if (x_final.size() !=
m_x_final.size())
return false;
168 if (traj_time <= 0.0)
return false;
217 if (data.cols() != 3 *
m_size) {
218 std::cout <<
"Unexpected number of columns (expected " << 3 *
m_size
219 <<
", found " << data.cols() <<
")\n";
236 Eigen::VectorXd::Index i = (Eigen::VectorXd::Index)std::floor(
m_t /
m_dt);
256 double td2 = td * td;
257 double td3 = td2 * td;
258 double td4 = td3 * td;
259 double td5 = td4 * td;
260 double p = 10 * td3 - 15 * td4 + 6 * td5;
261 double dp = (30 * td2 - 60 * td3 + 30 * td4) /
m_traj_time;
283 double two_pi_f = 2 * M_PI * f;
284 double two_pi_f_t = two_pi_f *
m_t;
285 double p = 0.5 * (1.0 - cos(two_pi_f_t));
286 double dp = 0.5 * two_pi_f * sin(two_pi_f_t);
287 double ddp = 0.5 * two_pi_f * two_pi_f * cos(two_pi_f_t);
313 if (Tacc < 0.0 || Tacc > 0.5 *
m_traj_time)
return false;
335 m_ddx = 0.0 * max_vel;
336 m_dx = way * max_vel;
365 if (!res)
return false;
429 if (f0.size() !=
m_f0.size())
return false;
435 if (1 !=
m_f0.size())
return false;
441 if (f1.size() !=
m_f1.size())
return false;
447 if (1 !=
m_f1.size())
return false;
466 m_p = 0.5 * (1.0 -
m_phi.array().cos());
468 m_ddp = 2.0 * M_PI * M_PI *
m_f.array() *
m_f.array() *
m_phi.array().cos();
484 #endif // #ifndef __sot_torque_control_trajectory_generators_H__
virtual bool set_initial_frequency(const Eigen::VectorXd &f0)
LinearChirpTrajectoryGenerator(double dt, double traj_time, int size)
virtual bool set_final_frequency(const double &f1)
virtual const Eigen::VectorXd & getVel()
virtual const Eigen::VectorXd & compute_next_point()
Eigen::VectorXd m_x_init
current acceleration
const Eigen::VectorXd & compute_next_point()
Eigen::MatrixXd readMatrixFromFile(const char *filename)
virtual bool isTrajectoryEnded()
Eigen::VectorXd m_phi
current frequency (i.e. time derivative of the phase over 2*pi)
Eigen::VectorXd::Index m_size
current time
virtual bool set_trajectory_time(double traj_time)
Eigen::VectorXd m_p
phase shift for second half of trajectory
const Eigen::VectorXd & compute_next_point()
virtual void resizeAllData(Eigen::VectorXd::Index size)
virtual bool set_initial_frequency(const double &f0)
virtual bool set_final_frequency(const Eigen::VectorXd &f1)
void sendMsg(const std::string &msg, MsgType t=MSG_TYPE_INFO, const char *file="", int line=0)
virtual bool isTrajectoryEnded()
Eigen::VectorXd m_ddx
current velocity
Eigen::VectorXd m_k
final frequency
virtual bool loadTextFile(const std::string &fileName)
virtual const Eigen::VectorXd & compute_next_point()
AbstractTrajectoryGenerator(double dt, double traj_time, const Eigen::VectorXd &x_init, const Eigen::VectorXd &x_final)
virtual bool isTrajectoryEnded()
Eigen::MatrixXd m_posTraj
const Eigen::VectorXd & compute_next_point()
Eigen::VectorXd m_phi_0
current phase
AbstractTrajectoryGenerator(double dt, double traj_time, Eigen::VectorXd::Index size)
virtual bool set_initial_point(const double &x_init)
Eigen::VectorXd m_x_final
initial position
TextFileTrajectoryGenerator(double dt, Eigen::VectorXd::Index size)
Eigen::VectorXd m_f
frequency first derivative
Eigen::VectorXd m_dx
current position
virtual const Eigen::VectorXd & compute_next_point()
Eigen::MatrixXd m_velTraj
double m_dt
time to go from x_init to x_final (sec)
virtual bool set_initial_point(const Eigen::VectorXd &x_init)
virtual const Eigen::VectorXd & compute_next_point()=0
bool set_acceleration_time(const double Tacc)
MinimumJerkTrajectoryGenerator(double dt, double traj_time, int size)
virtual const Eigen::VectorXd & getAcc()
virtual const Eigen::VectorXd & get_initial_point()
SinusoidTrajectoryGenerator(double dt, double traj_time, int size)
virtual bool isTrajectoryEnded()
virtual const Eigen::VectorXd & get_final_point()
virtual bool isTrajectoryEnded()
virtual const Eigen::VectorXd & getPos()
Eigen::MatrixXd m_accTraj
NoTrajectoryGenerator(int size)
TriangleTrajectoryGenerator(double dt, double traj_time, int size)
const Eigen::VectorXd & compute_next_point()
virtual bool set_final_point(const Eigen::VectorXd &x_final)
virtual bool set_final_point(const double &x_final)
double m_t
control dt (sampling period of the trajectory)
double m_traj_time
final position
ConstantAccelerationTrajectoryGenerator(double dt, double traj_time, int size)
Eigen::VectorXd m_f1
initial frequency
virtual bool set_trajectory_time(double traj_time)