// From DC->N for each thruster. Verify constant used void SamplesInput::Forces(base::VectorXd &input, base::VectorXd &output, double pos_Cv, double neg_Cv) { //output = Eigen::VectorXd::Zero(6); for(int i=0; i< input.size(); i++) { if( input[i] <= 0 ) output[i] = neg_Cv * input[i] * fabs(double (input[i])); else output[i] = pos_Cv * input[i] * fabs(double (input[i])); } }
void NMPC::updateStates(const base::VectorXd &_pose_samples, const base::Vector6d &_efforts) { base::VectorXd pose_samples = Eigen::VectorXd::Zero(12); for(int i = 0; i < _pose_samples.size(); i++) { if(base::isUnset<double>(_pose_samples[i])) pose_samples[i] = 0; else pose_samples[i] = _pose_samples[i]; } for (int i = 0; i < 3; ++i) { acadoVariables.x0[i] = pose_samples[i + 6]; // linear velocity acadoVariables.x0[i+3] = pose_samples[i + 9]; // angular velocity acadoVariables.x0[i+6] = pose_samples[i]; // position acadoVariables.x0[i+9] = pose_samples[i + 3]; // orientation acadoVariables.x0[i+12] = _efforts[i]; // forces acadoVariables.x0[i+15] = _efforts[i + 3]; // torques } }
// From PWM->DC. Verify constant used void SamplesInput::PWMtoDC(base::VectorXd &input, base::VectorXd &output, double ThrusterVoltage) { //output = Eigen::VectorXd::Zero(6); for(int i=0; i< input.size(); i++) output[i] = ThrusterVoltage * input[i]; }