mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-07 09:13:32 +08:00
fixes after review
This commit is contained in:
@@ -33,7 +33,7 @@
|
||||
|
||||
/**
|
||||
* @file ecl_wheel_controller.cpp
|
||||
* Implementation of a simple orthogonal coordinated turn yaw PID controller.
|
||||
* Implementation of a simple PID wheel controller for heading tracking.
|
||||
*
|
||||
* Authors and acknowledgements in header.
|
||||
*/
|
||||
|
||||
+6
-8
@@ -301,18 +301,16 @@ __EXPORT float get_distance_to_next_waypoint(double lat_now, double lon_now, dou
|
||||
__EXPORT void create_waypoint_from_line_and_dist(double lat_A, double lon_A, double lat_B, double lon_B, float dist,
|
||||
double *lat_target, double *lon_target)
|
||||
{
|
||||
float heading;
|
||||
|
||||
if (fabsf(dist) < FLT_EPSILON) {
|
||||
*lat_target = lat_A;
|
||||
*lon_target = lon_A;
|
||||
|
||||
} else if (dist >= FLT_EPSILON) {
|
||||
heading = get_bearing_to_next_waypoint(lat_A, lon_A, lat_B, lon_B);
|
||||
float heading = get_bearing_to_next_waypoint(lat_A, lon_A, lat_B, lon_B);
|
||||
waypoint_from_heading_and_distance(lat_A, lon_A, heading, dist, lat_target, lon_target);
|
||||
|
||||
} else {
|
||||
heading = get_bearing_to_next_waypoint(lat_A, lon_A, lat_B, lon_B);
|
||||
float heading = get_bearing_to_next_waypoint(lat_A, lon_A, lat_B, lon_B);
|
||||
heading = _wrap_2pi(heading + M_PI_F);
|
||||
waypoint_from_heading_and_distance(lat_A, lon_A, heading, dist, lat_target, lon_target);
|
||||
}
|
||||
@@ -324,16 +322,16 @@ __EXPORT void waypoint_from_heading_and_distance(double lat_start, double lon_st
|
||||
bearing = _wrap_2pi(bearing);
|
||||
double radius_ratio = (double)(fabs(dist) / CONSTANTS_RADIUS_OF_EARTH);
|
||||
|
||||
double lat_start_rad = lat_start / (double)180.0 * M_PI;
|
||||
double lon_start_rad = lon_start / (double)180.0 * M_PI;
|
||||
double lat_start_rad = lat_start * M_DEG_TO_RAD;
|
||||
double lon_start_rad = lon_start * M_DEG_TO_RAD;
|
||||
|
||||
*lat_target = asin(sin(lat_start_rad) * cos(radius_ratio) + cos(lat_start_rad) * sin(radius_ratio) * cos((
|
||||
double)bearing));
|
||||
*lon_target = lon_start_rad + atan2(sin((double)bearing) * sin(radius_ratio) * cos(lat_start_rad),
|
||||
cos(radius_ratio) - sin(lat_start_rad) * sin(*lat_target));
|
||||
|
||||
*lat_target *= (double)180.0 / M_PI;
|
||||
*lon_target *= (double)180.0 / M_PI;
|
||||
*lat_target *= M_RAD_TO_DEG;
|
||||
*lon_target *= M_RAD_TO_DEG;
|
||||
}
|
||||
__EXPORT float get_bearing_to_next_waypoint(double lat_now, double lon_now, double lat_next, double lon_next)
|
||||
{
|
||||
|
||||
+4
-3
@@ -245,7 +245,7 @@ __EXPORT float get_distance_to_next_waypoint(double lat_now, double lon_now, dou
|
||||
* @param lon_A waypoint A longitude in degrees (8.1234567°, not 81234567°)
|
||||
* @param lat_B waypoint B latitude in degrees (47.1234567°, not 471234567°)
|
||||
* @param lon_B waypoint B longitude in degrees (8.1234567°, not 81234567°)
|
||||
* @param dist distance of target waypoint from waypoint A (can be negative)
|
||||
* @param dist distance of target waypoint from waypoint A in meters (can be negative)
|
||||
* @param lat_target latitude of target waypoint C in degrees (47.1234567°, not 471234567°)
|
||||
* @param lon_target longitude of target waypoint C in degrees (47.1234567°, not 471234567°)
|
||||
*/
|
||||
@@ -254,11 +254,12 @@ __EXPORT void create_waypoint_from_line_and_dist(double lat_A, double lon_A, dou
|
||||
|
||||
/**
|
||||
* Creates a waypoint from given waypoint, distance and bearing
|
||||
* see http://www.movable-type.co.uk/scripts/latlong.html
|
||||
*
|
||||
* @param lat_start latitude of starting waypoint in degrees (47.1234567°, not 471234567°)
|
||||
* @param lon_start longitude of starting waypoint in degrees (8.1234567°, not 81234567°)
|
||||
* @param bearing
|
||||
* @param distance
|
||||
* @param bearing in rad
|
||||
* @param distance in meters
|
||||
* @param lat_target latitude of target waypoint in degrees (47.1234567°, not 471234567°)
|
||||
* @param lon_target longitude of target waypoint in degrees (47.1234567°, not 471234567°)
|
||||
*/
|
||||
|
||||
@@ -71,6 +71,7 @@ PARAM_DEFINE_INT32(RWTO_HDG, 0);
|
||||
* rudder is used to keep the heading (see RWTO_HDG). This should be below
|
||||
* FW_CLMBOUT_DIFF if FW_CLMBOUT_DIFF > 0.
|
||||
*
|
||||
* @unit m
|
||||
* @min 0.0
|
||||
* @max 100.0
|
||||
* @group Runway Takeoff
|
||||
@@ -93,6 +94,7 @@ PARAM_DEFINE_FLOAT(RWTO_MAX_THR, 1.0);
|
||||
* a little to keep it's wheel on the ground before airspeed
|
||||
* to takeoff is reached.
|
||||
*
|
||||
* @unit deg
|
||||
* @min 0.0
|
||||
* @max 20.0
|
||||
* @group Runway Takeoff
|
||||
@@ -104,6 +106,7 @@ PARAM_DEFINE_FLOAT(RWTO_PSP, 0.0);
|
||||
* Fixed-wing settings are used if set to 0. Note that there is also a minimum
|
||||
* pitch of 10 degrees during takeoff, so this must be larger if set.
|
||||
*
|
||||
* @unit deg
|
||||
* @min 0.0
|
||||
* @max 60.0
|
||||
* @group Runway Takeoff
|
||||
@@ -115,6 +118,7 @@ PARAM_DEFINE_FLOAT(RWTO_MAX_PITCH, 20.0);
|
||||
* Roll is limited during climbout to ensure enough lift and prevents aggressive
|
||||
* navigation before we're on a safe height.
|
||||
*
|
||||
* @unit deg
|
||||
* @min 0.0
|
||||
* @max 60.0
|
||||
* @group Runway Takeoff
|
||||
|
||||
@@ -51,14 +51,14 @@
|
||||
* The measurement_update(...) function does a measurement update based on range finder and gps
|
||||
* velocity measurements. Both functions should always be called together when there is new
|
||||
* acceleration data available.
|
||||
* The is_valid() function provides information wether the estimate is valid.
|
||||
* The is_valid() function provides information whether the estimate is valid.
|
||||
*/
|
||||
|
||||
class __EXPORT TerrainEstimator
|
||||
{
|
||||
public:
|
||||
TerrainEstimator();
|
||||
~TerrainEstimator();
|
||||
~TerrainEstimator() {};
|
||||
|
||||
bool is_valid() {return _terrain_valid;}
|
||||
float get_distance_to_ground() {return -_x(0);}
|
||||
@@ -85,6 +85,7 @@ private:
|
||||
uint64_t _time_last_distance;
|
||||
uint64_t _time_last_gps;
|
||||
|
||||
/*
|
||||
struct {
|
||||
float var_acc_z;
|
||||
float var_p_z;
|
||||
@@ -92,6 +93,7 @@ private:
|
||||
float var_lidar;
|
||||
float var_gps_vz;
|
||||
} _params;
|
||||
*/
|
||||
|
||||
bool is_distance_valid(float distance);
|
||||
|
||||
|
||||
@@ -270,7 +270,7 @@ AttitudePositionEstimatorEKF::~AttitudePositionEstimatorEKF()
|
||||
}
|
||||
} while (_estimator_task != -1);
|
||||
}
|
||||
|
||||
delete _terrain_estimator;
|
||||
delete _ekf;
|
||||
|
||||
estimator::g_estimator = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user