23 #include <geometry_msgs/TransformStamped.h>
29 static void getParameter(
const std::string& name, T& parameter, T default_value, std::string unit =
""){
31 std::cout <<
"Did not get "
33 <<
" from the params, defaulting to "
45 double motorTimeconstant;
46 double motorRotationalInertia;
51 getParameter(
"motor_time_constant", motorTimeconstant, 0.02,
"sec");
52 getParameter(
"motor_rotational_inertia", motorRotationalInertia, 6.62e-6,
"kg m^2");
53 getParameter(
"thrust_coefficient", thrustCoeff, 1.91e-6,
"N/(rad/s)^2");
54 getParameter(
"torque_coefficient", torqueCoeff, 2.6e-7,
"Nm/(rad/s)^2");
55 getParameter(
"drag_coefficient", dragCoeff, 0.1,
"N/(m/s)");
57 Eigen::Matrix3d aeroMomentCoefficient = Eigen::Matrix3d::Zero();
58 getParameter(
"aeromoment_coefficient_xx", aeroMomentCoefficient(0, 0), 0.003,
"Nm/(rad/s)^2");
59 getParameter(
"aeromoment_coefficient_yy", aeroMomentCoefficient(1, 1), 0.003,
"Nm/(rad/s)^2");
60 getParameter(
"aeromoment_coefficient_zz", aeroMomentCoefficient(2, 2), 0.003,
"Nm/(rad/s)^2");
62 Eigen::Matrix3d vehicleInertia = Eigen::Matrix3d::Zero();
63 getParameter(
"vehicle_inertia_xx", vehicleInertia(0, 0), 0.0049,
"kg m^2");
64 getParameter(
"vehicle_inertia_yy", vehicleInertia(1, 1), 0.0049,
"kg m^2");
65 getParameter(
"vehicle_inertia_zz", vehicleInertia(2, 2), 0.0069,
"kg m^2");
67 double minPropSpeed = 0.0;
69 double momentProcessNoiseAutoCorrelation;
70 double forceProcessNoiseAutoCorrelation;
71 getParameter(
"max_prop_speed", maxPropSpeed, 2200.0,
"rad/s");
72 getParameter(
"moment_process_noise", momentProcessNoiseAutoCorrelation, 1.25e-7,
"(Nm)^2 s");
73 getParameter(
"force_process_noise", forceProcessNoiseAutoCorrelation, 0.0005,
"N^2 s");
77 Eigen::Vector3d gravity(0., 0., -9.81);
84 minPropSpeed, maxPropSpeed, motorTimeconstant, motorRotationalInertia,
85 vehicleMass, vehicleInertia,
86 aeroMomentCoefficient, dragCoeff, momentProcessNoiseAutoCorrelation,
87 forceProcessNoiseAutoCorrelation, gravity);
89 double initPropSpeed = sqrt(vehicleMass/4.*9.81/thrustCoeff);
94 double accBiasProcessNoiseAutoCorrelation;
95 double gyroBiasProcessNoiseAutoCorrelation;
96 double accBiasInitVar;
97 double gyroBiasInitVar;
98 double accMeasNoiseVariance;
99 double gyroMeasNoiseVariance;
100 getParameter(
"accelerometer_biasprocess", accBiasProcessNoiseAutoCorrelation, 1.0e-7,
"m^2/s^5");
101 getParameter(
"gyroscope_biasprocess", accBiasProcessNoiseAutoCorrelation, 1.0e-7,
"rad^2/s^3");
102 getParameter(
"accelerometer_biasinitvar", accBiasInitVar, 0.005,
"(m/s^2)^2");
103 getParameter(
"gyroscope_biasinitvar", gyroBiasInitVar, 0.003,
"(rad/s)^2");
104 getParameter(
"accelerometer_variance", accMeasNoiseVariance, 0.005,
"m^2/s^4");
105 getParameter(
"gyroscope_variance", gyroMeasNoiseVariance, 0.003,
"rad^2/s^2");
107 accBiasProcessNoiseAutoCorrelation, gyroBiasProcessNoiseAutoCorrelation);
108 multicopterSim_->imu_.setNoiseVariance(accMeasNoiseVariance, gyroMeasNoiseVariance);
116 const Eigen::Quaterniond& attitude){
141 Eigen::Vector3d & gyroOutput){
147 for (
auto motorSpeed : motorsSpeed) {
148 motorsRpm.push_back(motorSpeed * 9.54929658551);