void consume(const IMC::Rpm* msg) { if (!isActive()) return; // Compute time delta. double timestep = m_last_rpm.getDelta(); // Check if we have a valid time delta. if (timestep < 0.0) return; switch (m_speed_units) { case IMC::SUNITS_PERCENTAGE: dispatchThrust(m_desired_speed / 100.0, timestep); // disable the meters per second controller m_u_active = false; break; case IMC::SUNITS_RPM: rpmToThrust(msg->value, m_desired_speed, timestep); m_previous_rpm = m_desired_speed; // disable the meters per second controller m_u_active = false; break; default: break; } if (m_u_active) rpmToThrust(msg->value, m_desired_rpm, timestep); }
void consume(const IMC::EstimatedState* msg) { if (!isActive()) return; // Compute time delta. double timestep = m_last_mps.getDelta(); // Check if we have a valid time delta. if (timestep < 0.0) return; // If we're asked for m/s or if u controller is active if (m_speed_units == IMC::SUNITS_METERS_PS || m_u_active) { float abs_gvel = msg->u; mpsToRpm(abs_gvel, timestep); // Enable u controller m_u_active = true; } }