mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-25 00:43:33 +08:00
VTOL: remove virtual actuator_controls and instead use virtual torque/thrust topics
MC/FW rate controller and auto tuner: remove actuator_controls AirshipAttControl: remove actuator_controls MulticopterLandDetector: remove actuator_controls mavlink streams vfr_hud and high_latency2: remove actuator_controls RoverPositionController: remove actuator_controls UUVAttitudeController: remove actuator_controls battery: use length of thrust_setpoint for throttle compensation VehicleMagnetometer: use length of thrust_setpoint for throttle compensation Signed-off-by: Silvan Fuhrer
This commit is contained in:
@@ -95,34 +95,34 @@ void UUVAttitudeControl::constrain_actuator_commands(float roll_u, float pitch_u
|
||||
{
|
||||
if (PX4_ISFINITE(roll_u)) {
|
||||
roll_u = math::constrain(roll_u, -1.0f, 1.0f);
|
||||
_actuators.control[actuator_controls_s::INDEX_ROLL] = roll_u;
|
||||
_vehicle_torque_setpoint.xyz[0] = roll_u;
|
||||
|
||||
} else {
|
||||
_actuators.control[actuator_controls_s::INDEX_ROLL] = 0.0f;
|
||||
_vehicle_torque_setpoint.xyz[0] = 0.0f;
|
||||
}
|
||||
|
||||
if (PX4_ISFINITE(pitch_u)) {
|
||||
pitch_u = math::constrain(pitch_u, -1.0f, 1.0f);
|
||||
_actuators.control[actuator_controls_s::INDEX_PITCH] = pitch_u;
|
||||
_vehicle_torque_setpoint.xyz[1] = pitch_u;
|
||||
|
||||
} else {
|
||||
_actuators.control[actuator_controls_s::INDEX_PITCH] = 0.0f;
|
||||
_vehicle_torque_setpoint.xyz[1] = 0.0f;
|
||||
}
|
||||
|
||||
if (PX4_ISFINITE(yaw_u)) {
|
||||
yaw_u = math::constrain(yaw_u, -1.0f, 1.0f);
|
||||
_actuators.control[actuator_controls_s::INDEX_YAW] = yaw_u;
|
||||
_vehicle_torque_setpoint.xyz[2] = yaw_u;
|
||||
|
||||
} else {
|
||||
_actuators.control[actuator_controls_s::INDEX_YAW] = 0.0f;
|
||||
_vehicle_torque_setpoint.xyz[2] = 0.0f;
|
||||
}
|
||||
|
||||
if (PX4_ISFINITE(thrust_x)) {
|
||||
thrust_x = math::constrain(thrust_x, -1.0f, 1.0f);
|
||||
_actuators.control[actuator_controls_s::INDEX_THROTTLE] = thrust_x;
|
||||
_vehicle_thrust_setpoint.xyz[0] = thrust_x;
|
||||
|
||||
} else {
|
||||
_actuators.control[actuator_controls_s::INDEX_THROTTLE] = 0.0f;
|
||||
_vehicle_thrust_setpoint.xyz[0] = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -265,48 +265,24 @@ void UUVAttitudeControl::Run()
|
||||
_manual_control_setpoint.yaw,
|
||||
_manual_control_setpoint.throttle, 0.f, 0.f);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_actuators.timestamp = hrt_absolute_time();
|
||||
|
||||
/* Only publish if any of the proper modes are enabled */
|
||||
if (_vcontrol_mode.flag_control_manual_enabled ||
|
||||
_vcontrol_mode.flag_control_attitude_enabled) {
|
||||
/* publish the actuator controls */
|
||||
_actuator_controls_pub.publish(_actuators);
|
||||
publishTorqueSetpoint(0);
|
||||
publishThrustSetpoint(0);
|
||||
|
||||
_vehicle_thrust_setpoint.timestamp = hrt_absolute_time();
|
||||
_vehicle_thrust_setpoint.timestamp_sample = 0.f;
|
||||
_vehicle_thrust_setpoint_pub.publish(_vehicle_thrust_setpoint);
|
||||
|
||||
_vehicle_torque_setpoint.timestamp = hrt_absolute_time();
|
||||
_vehicle_torque_setpoint.timestamp_sample = 0.f;
|
||||
_vehicle_torque_setpoint_pub.publish(_vehicle_torque_setpoint);
|
||||
}
|
||||
|
||||
perf_end(_loop_perf);
|
||||
}
|
||||
|
||||
void UUVAttitudeControl::publishTorqueSetpoint(const hrt_abstime ×tamp_sample)
|
||||
{
|
||||
vehicle_torque_setpoint_s v_torque_sp = {};
|
||||
v_torque_sp.timestamp = hrt_absolute_time();
|
||||
v_torque_sp.timestamp_sample = timestamp_sample;
|
||||
v_torque_sp.xyz[0] = _actuators.control[actuator_controls_s::INDEX_ROLL];
|
||||
v_torque_sp.xyz[1] = _actuators.control[actuator_controls_s::INDEX_PITCH];
|
||||
v_torque_sp.xyz[2] = _actuators.control[actuator_controls_s::INDEX_YAW];
|
||||
|
||||
_vehicle_torque_setpoint_pub.publish(v_torque_sp);
|
||||
}
|
||||
|
||||
void UUVAttitudeControl::publishThrustSetpoint(const hrt_abstime ×tamp_sample)
|
||||
{
|
||||
vehicle_thrust_setpoint_s v_thrust_sp = {};
|
||||
v_thrust_sp.timestamp = hrt_absolute_time();
|
||||
v_thrust_sp.timestamp_sample = timestamp_sample;
|
||||
v_thrust_sp.xyz[0] = _actuators.control[actuator_controls_s::INDEX_THROTTLE];
|
||||
v_thrust_sp.xyz[1] = 0.0f;
|
||||
v_thrust_sp.xyz[2] = 0.0f;
|
||||
|
||||
_vehicle_thrust_setpoint_pub.publish(v_thrust_sp);
|
||||
}
|
||||
|
||||
|
||||
int UUVAttitudeControl::task_spawn(int argc, char *argv[])
|
||||
{
|
||||
UUVAttitudeControl *instance = new UUVAttitudeControl();
|
||||
@@ -347,7 +323,7 @@ int UUVAttitudeControl::print_usage(const char *reason)
|
||||
### Description
|
||||
Controls the attitude of an unmanned underwater vehicle (UUV).
|
||||
|
||||
Publishes `actuator_controls_0` messages at a constant 250Hz.
|
||||
Publishes `vehicle_thrust_setpont` and `vehicle_torque_setpoint` messages at a constant 250Hz.
|
||||
|
||||
### Implementation
|
||||
Currently, this implementation supports only a few modes:
|
||||
|
||||
Reference in New Issue
Block a user