00001 /* 00002 * Copyright 2015 Fadri Furrer, ASL, ETH Zurich, Switzerland 00003 * Copyright 2015 Michael Burri, ASL, ETH Zurich, Switzerland 00004 * Copyright 2015 Mina Kamel, ASL, ETH Zurich, Switzerland 00005 * Copyright 2015 Janosch Nikolic, ASL, ETH Zurich, Switzerland 00006 * Copyright 2015 Markus Achtelik, ASL, ETH Zurich, Switzerland 00007 * 00008 * Licensed under the Apache License, Version 2.0 (the "License"); 00009 * you may not use this file except in compliance with the License. 00010 * You may obtain a copy of the License at 00011 * 00012 * http://www.apache.org/licenses/LICENSE-2.0 00013 00014 * Unless required by applicable law or agreed to in writing, software 00015 * distributed under the License is distributed on an "AS IS" BASIS, 00016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00017 * See the License for the specific language governing permissions and 00018 * limitations under the License. 00019 */ 00020 00021 #ifndef ROTORS_CONTROL_MOTOR_CONTROLLER_H 00022 #define ROTORS_CONTROL_MOTOR_CONTROLLER_H 00023 00024 #include "rotors_control/controller_base.h" 00025 #include "rotors_control/controller_factory.h" 00026 00027 class MotorController : public ControllerBase { 00028 public: 00029 MotorController(); 00030 virtual ~MotorController(); 00031 virtual void InitializeParams(); 00032 virtual std::shared_ptr<ControllerBase> Clone(); 00033 virtual void CalculateRotorVelocities(Eigen::VectorXd* rotor_velocities) const; 00034 00035 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 00036 private: 00037 Eigen::Matrix4Xd allocation_matrix_; 00038 Eigen::MatrixX4d angular_acc_to_rotor_velocities_; 00039 Eigen::Vector3d gain_attitude_; 00040 Eigen::Vector3d gain_angular_rate_; 00041 Eigen::Matrix3d inertia_matrix_; 00042 }; 00043 00044 #endif // ROTORS_CONTROL_MOTOR_CONTROLLER_H