mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-05 07:28:29 -04:00
SITL: fixed ship offset velocity correction
This commit is contained in:
parent
96a55878a7
commit
ab54dda3ca
@ -95,8 +95,24 @@ Vector2f ShipSim::get_ground_speed_adjustment(const Location &loc, float &yaw_ra
|
|||||||
yaw_rate = 0;
|
yaw_rate = 0;
|
||||||
return Vector2f(0,0);
|
return Vector2f(0,0);
|
||||||
}
|
}
|
||||||
Vector2f vel(ship.speed, 0);
|
|
||||||
vel.rotate(radians(ship.heading_deg));
|
// find center of the circle that the ship is on
|
||||||
|
Location center = shiploc;
|
||||||
|
const float path_radius = path_size.get()*0.5;
|
||||||
|
center.offset_bearing(ship.heading_deg+(ship.yaw_rate>0?90:-90), path_radius);
|
||||||
|
|
||||||
|
// scale speed for ratio of distances
|
||||||
|
const float p = center.get_distance(loc) / path_radius;
|
||||||
|
const float scaled_speed = ship.speed * p;
|
||||||
|
|
||||||
|
// work out how far around the circle ahead or behind we are for
|
||||||
|
// rotating velocity
|
||||||
|
const float bearing1 = center.get_bearing(loc);
|
||||||
|
const float bearing2 = center.get_bearing(shiploc);
|
||||||
|
const float heading = ship.heading_deg + degrees(bearing1-bearing2);
|
||||||
|
|
||||||
|
Vector2f vel(scaled_speed, 0);
|
||||||
|
vel.rotate(radians(heading));
|
||||||
yaw_rate = ship.yaw_rate;
|
yaw_rate = ship.yaw_rate;
|
||||||
return vel;
|
return vel;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user