|
|
|
@ -46,15 +46,15 @@ class FlightTask
@@ -46,15 +46,15 @@ class FlightTask
|
|
|
|
|
public: |
|
|
|
|
FlightTask() |
|
|
|
|
{ |
|
|
|
|
_vehicle_local_position = NULL; |
|
|
|
|
_manual_control_setpoint = NULL; |
|
|
|
|
_vehicle_position = nullptr; |
|
|
|
|
_manual_control_setpoint = nullptr; |
|
|
|
|
_reset_time(); |
|
|
|
|
}; |
|
|
|
|
virtual ~FlightTask() {}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Call once on the event where you switch to the task |
|
|
|
|
* Note: Set the necessary input pointers first! |
|
|
|
|
* Note: Set the necessary input and output pointers first! |
|
|
|
|
* @return 0 on success, >0 on error |
|
|
|
|
*/ |
|
|
|
|
virtual int activate() |
|
|
|
@ -85,22 +85,22 @@ public:
@@ -85,22 +85,22 @@ public:
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set vehicle local position data pointer |
|
|
|
|
* Set vehicle local position input data pointer |
|
|
|
|
* @param pointer to vehicle local position |
|
|
|
|
*/ |
|
|
|
|
void set_vehicle_local_position_pointer(const vehicle_local_position_s *vehicle_local_position) { _vehicle_local_position = vehicle_local_position; }; |
|
|
|
|
void set_vehicle_local_position_pointer(const vehicle_local_position_s *vehicle_local_position) { _vehicle_position = vehicle_local_position; }; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set manual control setpoint data pointer if it's needed for the task |
|
|
|
|
* Set manual control setpoint input data pointer if it's needed for the task |
|
|
|
|
* @param pointer to manual control setpoint |
|
|
|
|
*/ |
|
|
|
|
void set_manual_control_setpoint_pointer(const manual_control_setpoint_s *manual_control_setpoint) { _manual_control_setpoint = manual_control_setpoint; }; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the resulting setpoints of the task execution via pointer |
|
|
|
|
* @return pointer to setpoint struct
|
|
|
|
|
* Set local position setpoint data pointer if it's needed for the task |
|
|
|
|
* @param pointer to manual control setpoint |
|
|
|
|
*/ |
|
|
|
|
const vehicle_local_position_setpoint_s *get_position_setpoint() const { return &_vehicle_position_setpoint; }; |
|
|
|
|
void set_vehicle_local_position_setpoint_pointer(vehicle_local_position_setpoint_s *vehicle_position_setpoint) { _vehicle_position_setpoint = vehicle_position_setpoint; }; |
|
|
|
|
|
|
|
|
|
protected: |
|
|
|
|
|
|
|
|
@ -113,25 +113,45 @@ protected:
@@ -113,25 +113,45 @@ protected:
|
|
|
|
|
matrix::Vector3f _position; |
|
|
|
|
matrix::Vector3f _velocity; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put the position vector produced by the task into the setpoint message |
|
|
|
|
*/ |
|
|
|
|
void _set_position_setpoint(const matrix::Vector3f position_setpoint) |
|
|
|
|
{ |
|
|
|
|
_vehicle_position_setpoint.x = position_setpoint(0); |
|
|
|
|
_vehicle_position_setpoint.y = position_setpoint(1); |
|
|
|
|
_vehicle_position_setpoint.z = position_setpoint(2); |
|
|
|
|
if (_vehicle_position_setpoint != nullptr) { |
|
|
|
|
_vehicle_position_setpoint->x = position_setpoint(0); |
|
|
|
|
_vehicle_position_setpoint->y = position_setpoint(1); |
|
|
|
|
_vehicle_position_setpoint->z = position_setpoint(2); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Put the velocity vector produced by the task into the setpoint message |
|
|
|
|
*/ |
|
|
|
|
void _set_velocity_setpoint(const matrix::Vector3f velocity_setpoint) |
|
|
|
|
{ |
|
|
|
|
_vehicle_position_setpoint.vx = velocity_setpoint(0); |
|
|
|
|
_vehicle_position_setpoint.vy = velocity_setpoint(1); |
|
|
|
|
_vehicle_position_setpoint.vz = velocity_setpoint(2); |
|
|
|
|
if (_vehicle_position_setpoint != nullptr) { |
|
|
|
|
_vehicle_position_setpoint->vx = velocity_setpoint(0); |
|
|
|
|
_vehicle_position_setpoint->vy = velocity_setpoint(1); |
|
|
|
|
_vehicle_position_setpoint->vz = velocity_setpoint(2); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void _set_acceleration_setpoint(const matrix::Vector3f acceleration_setpoint) |
|
|
|
|
/**
|
|
|
|
|
* Put the acceleration vector produced by the task into the setpoint message |
|
|
|
|
* @return 0 on success, >0 on error |
|
|
|
|
*/ |
|
|
|
|
int _set_acceleration_setpoint(const matrix::Vector3f acceleration_setpoint) |
|
|
|
|
{ |
|
|
|
|
_vehicle_position_setpoint.acc_x = acceleration_setpoint(0); |
|
|
|
|
_vehicle_position_setpoint.acc_y = acceleration_setpoint(1); |
|
|
|
|
_vehicle_position_setpoint.acc_z = acceleration_setpoint(2); |
|
|
|
|
if (_vehicle_position_setpoint != nullptr) { |
|
|
|
|
_vehicle_position_setpoint->acc_x = acceleration_setpoint(0); |
|
|
|
|
_vehicle_position_setpoint->acc_y = acceleration_setpoint(1); |
|
|
|
|
_vehicle_position_setpoint->acc_z = acceleration_setpoint(2); |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
return 1; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
private: |
|
|
|
@ -141,23 +161,23 @@ private:
@@ -141,23 +161,23 @@ private:
|
|
|
|
|
hrt_abstime _last_time_stamp; /*< time stamp when task was last updated */ |
|
|
|
|
|
|
|
|
|
/* General input that every task has */ |
|
|
|
|
const vehicle_local_position_s *_vehicle_local_position; |
|
|
|
|
const vehicle_local_position_s *_vehicle_position; |
|
|
|
|
const manual_control_setpoint_s *_manual_control_setpoint; |
|
|
|
|
|
|
|
|
|
/* General output that every task has */ |
|
|
|
|
vehicle_local_position_setpoint_s _vehicle_position_setpoint; |
|
|
|
|
vehicle_local_position_setpoint_s *_vehicle_position_setpoint; |
|
|
|
|
|
|
|
|
|
void _evaluate_position() |
|
|
|
|
{ |
|
|
|
|
if (_vehicle_local_position != NULL && hrt_elapsed_time(&_vehicle_local_position->timestamp) < _timeout) { |
|
|
|
|
_position = matrix::Vector3f(&_vehicle_local_position->x); |
|
|
|
|
if (_vehicle_position != nullptr && hrt_elapsed_time(&_vehicle_position->timestamp) < _timeout) { |
|
|
|
|
_position = matrix::Vector3f(&_vehicle_position->x); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void _evaluate_velocity() |
|
|
|
|
{ |
|
|
|
|
if (_vehicle_local_position != NULL && hrt_elapsed_time(&_vehicle_local_position->timestamp) < _timeout) { |
|
|
|
|
_velocity = matrix::Vector3f(&_vehicle_local_position->vx); |
|
|
|
|
if (_vehicle_position != nullptr && hrt_elapsed_time(&_vehicle_position->timestamp) < _timeout) { |
|
|
|
|
_velocity = matrix::Vector3f(&_vehicle_position->vx); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
_velocity = matrix::Vector3f(); /* default is all zero */ |
|
|
|
@ -166,7 +186,7 @@ private:
@@ -166,7 +186,7 @@ private:
|
|
|
|
|
|
|
|
|
|
void _evaluate_sticks() |
|
|
|
|
{ |
|
|
|
|
if (_manual_control_setpoint != NULL && hrt_elapsed_time(&_manual_control_setpoint->timestamp) < _timeout) { |
|
|
|
|
if (_manual_control_setpoint != nullptr && hrt_elapsed_time(&_manual_control_setpoint->timestamp) < _timeout) { |
|
|
|
|
_sticks(0) = _manual_control_setpoint->x; /* NED x, "pitch" [-1,1] */ |
|
|
|
|
_sticks(1) = _manual_control_setpoint->y; /* NED y, "roll" [-1,1] */ |
|
|
|
|
_sticks(2) = (_manual_control_setpoint->z - 0.5f) * 2.f; /* NED z, "thrust" resacaled from [0,1] to [-1,1] */ |
|
|
|
|