06.5 Code
- 推力(force)
- 推力的应用
- 旋翼的气动阻力
- 空气阻力矩
- 滚转力矩
- 电机的转速
推力(force)
double force = real_motor_velocity * real_motor_velocity * motor_constant_;
转速怎么来的?
double real_motor_velocity = motor_rot_vel_ * rotor_velocity_slowdown_sim_;
motor_rot_vel_ = joint_->GetVelocity(0);
推力的应用
double scalar = 1 - vel / 25.0;
link_->AddRelativeForce(ignition::math::Vector3d(0, 0, force * scalar));
旋翼的气动阻力
ignition::math::Vector3d relative_wind_velocity = body_velocity - wind_vel_;
ignition::math::Vector3d body_velocity_perpendicular = relative_wind_velocity - (relative_wind_velocity.Dot(joint_axis)) * joint_axis;
ignition::math::Vector3d air_drag = -std::abs(real_motor_velocity) * rotor_drag_coefficient_ * body_velocity_perpendicular;
link_->AddForce(air_drag);
空气阻力矩
ignition::math::Vector3d drag_torque(0, 0, -turning_direction_ * force * moment_constant_);
滚转力矩
rolling_moment = -std::abs(real_motor_velocity) * rolling_moment_coefficient_ * body_velocity_perpendicular;
parent_links.at(0)->AddTorque(rolling_moment);
电机的转速
for (int i = 0; i < input_reference_.size(); i++) {
if (armed) {
input_reference_[i] = (actuator_controls[input_index_[i]] + input_offset_[i])
* input_scaling_[i] + zero_position_armed_[i];
} else {
input_reference_[i] = zero_position_disarmed_[i];
}
}
}
for (int i = 0; i < input_reference_.size(); i++) {
if (joints_[i] || joint_control_type_[i] == "position_gztopic") {
double target = input_reference_[i];
if (joint_control_type_[i] == "velocity")
{
double current = joints_[i]->GetVelocity(0);
double err = current - target;
double force = pids_[i].Update(err, _dt);
joints_[i]->SetForce(0, force);
}
``
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)