1
0
Fork 0
Commit graph

779 commits

Author SHA1 Message Date
Julian Smith
77c362a9d4 src/AIModel/: fixed some compiler warnings
src/AIModel/AICarrier.cxx
    Avoid warning about unused angle_tdp variable.
src/AIModel/AIFlightPlanCreate.cxx
    Increased a buffer size that was giving warning with snprintf(). Also
    always use sizeof(buffer) instead of duplicating the explicit size.
2021-12-08 10:40:28 +00:00
portree_kid
6320c06e6b Stuck AI Aircraft wenn entry to runway > 105m 2021-11-16 08:38:29 +00:00
Julian Smith
a7b9721296 Fixed some gcc warnings.
src/AIModel/AIFlightPlan.cxx:
    Clarify expression with extra round brackets.
src/AIModel/AIFlightPlanCreate.cxx:
    Increased buffer size to match longest possible string.
src/FDM/JSBSim/input_output/FGOutputFG.cpp:
    Use cast to avoid comparison of int with enum.
2021-11-11 18:49:55 +00:00
Richard Harrison
138a678a30 Carriers; support for island textures 2021-10-18 18:12:11 +02:00
portree_kid
8c537a911e Init of repositioned flag 2021-10-08 13:25:07 +01:00
PortreeKid
cf4801e11c * Improved lead distance & handling of sharp turns
* Takeoff leg respects displaced threshold
2021-09-30 11:20:11 +01:00
PortreeKid
f1a44c98df AI Improvements
* Relax runway exit route requirement to 80°
* Ensure parking is only reset if airport for AI aircraft has changed
* Heading Error signed and arrival lead distance
2021-08-31 09:43:24 +01:00
Julian Smith
281fe6d47d Fixed some snprintf buffer size warnings and added comments about possibly unused variables. 2021-08-06 19:20:18 +01:00
James Turner
f72983e1a6 TrafficL Avoid crash on invalid active runway
Work-around + log message when the AI flight has an invalid
arrival runway.
2021-08-04 09:08:32 +01:00
Stuart Buchanan
a3b01a1c1e Fix infinite loop on negative speed. 2021-08-01 20:51:18 +01:00
Julian Smith
08390be391 src/AIModel/: use Simgear's unit conversion constants, e.g. SG_KT_TO_FPS. 2021-07-31 10:29:11 +01:00
James Turner
8535126a7d Remove Sentry XML error suppression
We now supress XML errors from reporting internally, so this can
be removed, woo-hoo.
2021-07-28 13:45:23 +01:00
James Turner
80816a205b Fixes to duplicate AI waypoint detection 2021-07-21 10:58:08 +01:00
portree_kid
8c7ff0a486 GA Test 2021-07-13 10:52:30 +01:00
portree_kid
07cf4e93bf Logging & Pushbackspeed negative start speed 2021-07-13 10:52:30 +01:00
portree_kid
f4bc2913c1 Flightplan Test 2021-07-13 10:52:30 +01:00
portree_kid
45ac50d2b7 Time moving 2021-07-13 10:49:06 +01:00
portree_kid
bd96c767d5 Logging for createPushBack, FlightPlan
createPushBack Logging
2021-07-13 10:49:06 +01:00
portree_kid
8fdc03981c Better Turnprediction 2021-07-13 10:41:30 +01:00
portree_kid
54de08a3b6 Fix #2576 Added findWithHeading 2021-07-13 10:41:30 +01:00
portree_kid
3d3ff623cd Add dump() method to AIAircaft 2021-07-13 10:41:30 +01:00
portree_kid
40579bbc67 FIXME Comment 2021-07-13 10:29:03 +01:00
Julian Smith
c872af41bf Allow AI carrier to be always tied exactly to MP carrier.
Also fixed uneven MP carrier motion.

If /ai/models/carrier[]/ai-latch is true (e.g. by MPCarrier.nas), we
set /position/* and /orientation/* in C++ every frame instead of in
nasal. For external multiplayer carriers the values are copied from
/ai/models/multiplayer[]/*, so the AI carrier follows the corresponding MP
carrier exactly. For this to be useful, multiplayer motion needs be smooth,
e.g. with /sim/time/simple-time/enabled=true.

scripts/python/recordreplay.py
    Added --carrier test - checks that multiplayer carrier moves with even
    speed.

src/AIModel/AIBase.hxx
    Added speed_fps, to be kept up to date and tied to velocities/uBody-fps
    when we are a carrier. Previously this was set from Nasal which doesn't
    do what is required when all updates happen in C++.

src/AIModel/AICarrier.cxx
src/AIModel/AICarrier.hxx
    If is-user-craft is true, we directly update /position/* every frame.

    If ai-latch is true, we don't call TurnToLaunch(), TurnToRecover(),
    ReturnToBox(), TurnToBase() etc, because our position and orientation is
    determined only by multiplayer packets.

src/AIModel/AIMultiplayer.cxx
src/AIModel/AIMultiplayer.hxx
    If an mp craft is a carrier, MP packets define velocities/speed-kts but
    set ecLinearVel to all-zeros. So we now copy across to ensure that the
    extrapolation algorithm has a velocity to work with. Previously the zero
    velocity caused very uneven motion.

    If ai-latch is true we set AI craft's position+velocities directly from
    the equivalent (extrapolated or interpolated) MP position, every frame. We
    also set AI craft's orientation. And we copy MP's uBody-fps to AI's
    velocities/speed-kts which ensures that friction works between carrier deck
    and aircraft undercarriage.

    Added logging of raw speeds implied by multiplayer packets, activated by
    /sim/log-multiplayer-callsign; used by scripts/python/recordreplay.py's
    --carrier test.

src/AIModel/AIShip.cxx
    Tie velocities/uBody-fps to new speed_fps member and set speed_fps in
    update() along with members that are tied to properties.

    Replaced code that calculated new position using heading and speed:

        Previously the new position after dt was calculated using
        ft_per_deg_lat, ft_per_deg_lon, speed_north_deg_sec and
        speed_east_deg_sec. But this was moving slightly faster than the
        specified speed.

        This was leading to incremental errors when a different Flightgear
        instance extrapolated the multiplayer position from the information in
        multiplayer packets, because the specified velocity was too small, so
        we jumped forwards when extrapolation moved to a new packet.

        The fix is to use a Quaternion-based calculation to calculate movement
        in the direction specified by (heading, pitch, roll), as done by other
        code such as the view code.

src/Main/fg_init.cxx
    Moved FGAIManager to just before FGMultiplayMgr so we send latest info in
    mp packets.

src/MultiPlayer/multiplaymgr.cxx
    Fixed minimum transmit rate calculation - if transmit rate is less than 1,
    default to 1, not 10.

src/Network/props.cxx
    Use more precision when sending double-precision values e.g. to telnet
    client. Otherwise for example UTC times don't have sufficient resolution.

src/Viewer/viewmgr.cxx
    Generate internal logs of multiplayer position and speed (after
    interpolation/extrapolation) if /sim/log-multiplayer-callsign is set. Used
    by scripts/python/recordreplay.py's --carrier test.
2021-06-25 11:08:12 +01:00
James Turner
cf160cc925 AIAircraft: cache controls propertes
Avoid a per-update() lookup of the AI controls properties. As part
of this, bypass updatePrimaryTargetValues for the user aircraft,
where it doesn’t make sense.
2021-06-10 14:39:15 +01:00
Julian Smith
411953e89b src/AIModel/AIMultiplayer.cxx: fixed some replay unevenness.
We previously ignored mp packets if their .time was very different from local
time, but this stops time-compensation (e.g. with simple-time) from working and
is unnecessary because we clean up old packets anyway.

Also removed unnecessary erase of mp packets after interpolation.
2021-06-10 07:34:50 +01:00
Lars Toenning
8a8973fe15 AIManager: Explicitly take SGSharedPtr
Otherwise a SGSharedPtr is implicitly created on ai_list.push_back(model). It's not clear to the caller that FGAIManager takes care of the passed raw pointer.

Also fixes a bug for swift using the passed dangling pointer after the created SGSharedPtr of FGAIManager got out of scope and deleted the resource.

As this commit mainly addresses the swift crash (also for backport to LTS) it doesn't fix other calls to ::attach(..) which might also use the raw pointer afterwards.
2021-06-07 12:43:50 +01:00
James Turner
34b8fbc58e Precomputed random numbers API
Use updated pre-compute API for random numbers

By Marc Eberhard
2021-05-25 12:57:07 +01:00
Julian Smith
f7704a0339 Fix some warnings about constructor initialisation order. 2021-05-23 08:18:52 +01:00
James Turner
8085d1fa2c Clear ATC on the user aircraft as well
Avoids an assert/crash on exit, in some ATC configurations.
2021-04-26 11:14:06 +01:00
James Turner
6e42b9ae02 Attempting to fix AIAircraft/controller crash
Add an assertion that controller has been cleared before the AIAircraft
destructor is run. If it’s not, then we are too late, don’t try to
sign off since the controller is probably gone.

Sentry-Id: FLIGHTGEAR-15
2021-04-25 19:18:56 +01:00
Richard Harrison
ba783ccce9 AI Carriers: tidy and resolve ctor order
Tidying up:

* change to use direct initializtion
* put all of member variables in alpha order
* adjust init spacing to make init values clear.
* change all member variables to start with an underscore. The reason for this isn't clear but some had an underscore and some didn't; so although I don't know what the convention was intended for this seems to be the appropriate changes.
2021-04-25 17:30:21 +02:00
Julian Smith
68e6527574 src/AIModel/AIMultiplayer.*: split out some code from FGAIMultiplayer::update(double dt).
Moved motion test code into separate function and removed some now-unnecessary
logging.

Moved extrapolation code into separate method.

Converted some stray tabs into spaces.
2021-04-18 17:17:00 +01:00
Julian Smith
7753ce229d Fixed uneven replay of user vs multiplayer aircraft.
FGReplay was using time t, AIMultiplayer was using t+dt. The fix is to make
FGReplay also use t+dt.

scripts/python/recordreplay.py
    Make --test-motion-mp test for this problem - we check that user and mp
    aircraft are a constant distance apart when replaying.

src/AIModel/AIMultiplayer.cxx
    Create properties showing distance moved since start by user and mp
    aircraft, which can then be tested by recordreplay.py.

src/Aircraft/replay.cxx
    Increment current_time by dt before calling replay(current_time), to
    ensure that replay() sees the time as is later used by AIMultiplayer (via
    /sim/replay/time).
2021-04-18 12:12:50 +01:00
Richard Harrison
522d7e8450 Finish 2021-carriers-and-ai-part-1-towers
Carrier improvements

- Calculate lineup deviation (degrees left/right)
- Position for touchdown added (for more accurate lineup and glideslope deviation checks)
- LSO position and Tower position added (for views)
- Better logic for controlling the FLOLS
- Added ability to start on a specific course (works better
  with the launcher if the carrier starts on a recovery course
  when positioning in air for recovery (approach)
- Support for normal, tower, LSO views (via controls/view-index)
- Aircraft can define offset for FLOLS in sim/model/reference-offset-{xyz}

Added the ability to find the nearest carrier to use as a tower

Rework of the tower position so that it updates frequently to support moving towers.

TODO: Need to review how to better implement/integrate 'sub-views' i.e. ai/models/carrier[]/controls/view-index which is actually a sub index for the tower view.
2021-04-16 22:02:11 +02:00
Julian Smith
edc6d88993 src/AIModel/AIMultiplayer.*: Improve behaviour if simple-time enabled.
Moved interpolation code into new method
FGAIMultiplayer::FGAIMultiplayerInterpolate().

FGAIMultiplayer::update():
    If simple-time is enabled, always use getMPProtocolClockSec() (or
    /sim/replay/time if replaying) as current time, so that multiple instances
    of Flightgear all using simple-time will all show user and MP aircraft
    in the same relative positions.

    When interpolating, don't special-case single iterator, instead pass the
    single iterator as both args to FGAIMultiplayerInterpolate().

    Fixed removal of outdated frames using mMotionInfo.erase() - previously
    this was not done if we had done extrapolation, and with interpolation we
    left one too many frames in place.

FGAIMultiplayer::addMotionInfo():
    If simple-time is enabled, apply compensation to MP aircraft's .time fields
    if incoming packets' .time field differs significantly from our local UTC
    time.

    This allows simple-time to work with non-simple-time MP aircraft, or with
    simple-time MP aircraft whose UTC clocks differ from local UTC clock. But
    without the guarantee of consistent rendering across Flightgear instances.

    We don't calculate lag when compensating in this way.

With these changes, scripts/python/recordreplay.py --test-motion-mp passes (the
test sets /sim/replay/simple-time").
2021-04-15 17:23:58 +01:00
Julian Smith
10be9a1b60 src/AIModel/AIMultiplayer.cxx: FGAIMultiplayer::update(): re-indented.
Old indentation was messed up, making it very difficult to work on the code.
2021-04-15 17:23:58 +01:00
James Turner
1f24f1b2bb Traffic: work around crash with bad trafficRef
Don’t crash when the arrival airport is null.

Sentry-Id: FLIGHTGEAR-893
2021-04-06 09:13:32 +01:00
Julian Smith
3e9868093e src/AIModel/AIMultiplayer.cxx: can now log info about final mp position.
We log info about actual multiplayer speed for callsign that matches
/sim/replay/log-raw-speed-multiplayer.
2021-03-28 17:28:53 +01:00
James Turner
fbbcc75229 Error reporting: report Traffic errors
Also add logging to Sentry.io
2021-03-14 14:47:17 +00:00
James Turner
de90c281a5 ErrorReporting: MP error attribution 2021-03-07 13:08:29 +00:00
James Turner
cbe46468d1 Error-reporting: attribute AIObjects from scenarios
Ensure scenario-path is propagated through model loading for AI objects.
2021-03-07 12:33:06 +00:00
James Turner
15dfc492dc AIModelData: add error report context
Not complete yet, but add the ability to pass context in from the
AIBase to the loader thread. Also add error context to more places
in AI / scenario loading.
2021-02-24 14:47:01 +00:00
Scott Giese
190aad784b Maintenance: AIModel
Improve inheritance/polymorphism by eliminating shadow methods.
2021-02-21 23:18:15 -06:00
Scott Giese
7ee64f9994 Maintenance: AIAircraft
Remove dead code
2021-02-21 23:15:40 -06:00
Scott Giese
0d3f387214 Maintenance: performancedata
explicit ctor
2021-02-21 22:27:43 -06:00
Scott Giese
efcd505c9c Maintenance: AIAircraft
fix a few missing initializations.
remove dead code.
2021-02-21 22:14:05 -06:00
James Turner
caad29e7c8 Add error reporting to common failure points.
Not exhaustive by far, but adds many of the common failure points
witnessed on Sentry.
2021-02-20 20:06:27 +00:00
Colin Geniet
9008b3194f AI: Fix unit problems for AIBase::vs
It was supposed to be in ft/min, but everything except AIAircraft was
using it as ft/sec. Change the name to AIBase::vs_fps and ensure the
same unit is used everywhere.
2021-02-11 09:27:36 +00:00
Erik Hofman
168a50756e Remove two instances of Conditional jump or move depends on uninitialised value(s) as reported by valgrind 2021-01-22 11:00:48 +01:00
Colin Geniet
4f4a81d12b Submodels: Fix initial position offset
Fixes https://sourceforge.net/p/flightgear/codetickets/2521/

For submodels with rotation offsets, the rotation was applied to the
translation offset.
This is incorrect: translation offsets should be in the aircraft local
frame, and thus are not affected by submodel rotation offsets.
2021-01-18 11:45:31 +00:00