Thread: [Gcblue-commits] gcb_wx/src/sim tcSimState.cpp,1.69,1.70 tcSonar.cpp,1.7,1.8 tcTorpedoObject.cpp,1.6
Status: Alpha
Brought to you by:
ddcforge
|
From: Dewitt C. <ddc...@us...> - 2005-03-07 01:54:29
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31072/src/sim Modified Files: tcSimState.cpp tcSonar.cpp tcTorpedoObject.cpp Log Message: Passive sonar seeker work Index: tcSimState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSimState.cpp,v retrieving revision 1.69 retrieving revision 1.70 diff -C2 -d -r1.69 -r1.70 *** tcSimState.cpp 5 Mar 2005 22:38:03 -0000 1.69 --- tcSimState.cpp 7 Mar 2005 01:54:19 -0000 1.70 *************** *** 413,418 **** if (tclosest > 0.3) return; // defer until future time step ! float trueRange2 = dx*dx + dy*dy + dz*dz; ! if (trueRange2 < 64.0f) // 8.0 m range { float fDamage = torp->mpDBObject->mfDamage; --- 413,418 ---- if (tclosest > 0.3) return; // defer until future time step ! float trueRange2 = dx*dx + dy*dy + 0.5*dz*dz; ! if (trueRange2 < 144.0f) // 12.0 m range, dz not counted as heavily { float fDamage = torp->mpDBObject->mfDamage; Index: tcTorpedoObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcTorpedoObject.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcTorpedoObject.cpp 2 Mar 2005 22:28:45 -0000 1.6 --- tcTorpedoObject.cpp 7 Mar 2005 01:54:19 -0000 1.7 *************** *** 304,308 **** mfDamageLevel = 1.0f; tcString s; ! s.Format("Object %s hit bottom at time %.1f lon %.3f, lat %.3f", mzUnit.mz,afStatusTime,mcKin.mfLon_rad*C_180OVERPI,mcKin.mfLat_rad*C_180OVERPI); WTL(s.GetBuffer()); --- 304,308 ---- mfDamageLevel = 1.0f; tcString s; ! s.Format("Torpedo %s hit bottom at time %.1f lon %.3f, lat %.3f", mzUnit.mz,afStatusTime,mcKin.mfLon_rad*C_180OVERPI,mcKin.mfLat_rad*C_180OVERPI); WTL(s.GetBuffer()); *************** *** 317,321 **** mfDamageLevel = 1.0f; // self-destruct tcString s; ! s.Format("Object %s shut down at time %.1f lon %.3f, lat %.3f", mzUnit.mz,afStatusTime,mcKin.mfLon_rad*C_180OVERPI,mcKin.mfLat_rad*C_180OVERPI); WTL(s.GetBuffer()); --- 317,321 ---- mfDamageLevel = 1.0f; // self-destruct tcString s; ! s.Format("Torpedo %s shut down at time %.1f lon %.3f, lat %.3f", mzUnit.mz,afStatusTime,mcKin.mfLon_rad*C_180OVERPI,mcKin.mfLat_rad*C_180OVERPI); WTL(s.GetBuffer()); *************** *** 410,414 **** const float one_over_torpedo_acz = 1.0f / 50.0f; ! if ((t - lastGuidanceUpdate) < guidanceUpdateInterval) return; lastGuidanceUpdate = t; --- 410,415 ---- const float one_over_torpedo_acz = 1.0f / 50.0f; ! float dt_s = t - lastGuidanceUpdate; ! if (dt_s < guidanceUpdateInterval) return; lastGuidanceUpdate = t; *************** *** 430,449 **** guidanceUpdateInterval = 0.5f; ! if (seeker.mnMode == SSMODE_SEEKERTRACK) ! { if (seeker.mcTrack.mnFlags & TRACK_BEARING_ONLY) { ! goalHeading_rad = seeker.mcTrack.mfHeading_rad; // bearing in this case ! goalDepth_m = -seeker.mcTrack.mfAlt_m; } else { - tcTrack predictedtrack; - float tti_s; - float range_km; - - goalDepth_m = -seeker.mcTrack.mfAlt_m; - seeker.mcTrack.GetPrediction(predictedtrack, t); - mcKin.GetInterceptData3D(predictedtrack, goalHeading_rad, interceptPitch_rad, tti_s, range_km); --- 431,455 ---- guidanceUpdateInterval = 0.5f; ! if (seeker.mnMode == SSMODE_SEEKERTRACK) ! { ! tcTrack predictedtrack; ! float tti_s; ! float range_km; ! ! goalDepth_m = -seeker.mcTrack.mfAlt_m; ! seeker.mcTrack.GetPrediction(predictedtrack, t); ! if (seeker.mcTrack.mnFlags & TRACK_BEARING_ONLY) { ! goalHeading_rad = predictedtrack.mfHeading_rad; // bearing in this case ! ! // attempt to lead target (ad-hoc intercept course) ! if (predictedtrack.mnFlags & TRACK_BEARINGRATE_VALID) ! { ! goalHeading_rad += 0.5f * predictedtrack.bearingRate_radps; ! } } else { mcKin.GetInterceptData3D(predictedtrack, goalHeading_rad, interceptPitch_rad, tti_s, range_km); *************** *** 461,474 **** break; case SEARCH_LEFTCIRCLE: ! goalHeading_rad = searchHeading_rad - 0.2f * runTime; goalHeading_rad = fmodf(goalHeading_rad, C_TWOPI) + C_PI; break; case SEARCH_RIGHTCIRCLE: ! goalHeading_rad = searchHeading_rad + 0.2f * runTime; goalHeading_rad = fmodf(goalHeading_rad, C_TWOPI) - C_PI; break; default: break; ! } } else if (seeker.mnMode == SSMODE_SEEKERACQUIRE) --- 467,480 ---- break; case SEARCH_LEFTCIRCLE: ! goalHeading_rad = searchHeading_rad - 0.05f * runTime; goalHeading_rad = fmodf(goalHeading_rad, C_TWOPI) + C_PI; break; case SEARCH_RIGHTCIRCLE: ! goalHeading_rad = searchHeading_rad + 0.05f * runTime; goalHeading_rad = fmodf(goalHeading_rad, C_TWOPI) - C_PI; break; default: break; ! } } else if (seeker.mnMode == SSMODE_SEEKERACQUIRE) Index: tcSonar.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSonar.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tcSonar.cpp 5 Mar 2005 22:38:03 -0000 1.7 --- tcSonar.cpp 7 Mar 2005 01:54:19 -0000 1.8 *************** *** 83,92 **** float TS = 0; // target strength for active case float SLp = 0; // passive source level ! float NL = 10.0f + 0.2f * par_kin->mfSpeed_kts;; // noise level of parent if (const tcSurfaceObject* surfaceObj = dynamic_cast<const tcSurfaceObject*>(target)) { TS = 20.0f; // surfaceObj->mpDBObject->mfRcs_dbsm; ! SLp = 100.0f + 0.5f * tgt_kin->mfSpeed_kts; isSurface = true; } --- 83,92 ---- float TS = 0; // target strength for active case float SLp = 0; // passive source level ! float NL = -10.0f + 0.2f * par_kin->mfSpeed_kts; // noise level of parent if (const tcSurfaceObject* surfaceObj = dynamic_cast<const tcSurfaceObject*>(target)) { TS = 20.0f; // surfaceObj->mpDBObject->mfRcs_dbsm; ! SLp = 100.0f + tgt_kin->mfSpeed_kts; isSurface = true; } *************** *** 94,98 **** { TS = 10; ! SLp = 80 + 0.5f * tgt_kin->mfSpeed_kts; isSubSurface = true; } --- 94,98 ---- { TS = 10; ! SLp = 80.0f + tgt_kin->mfSpeed_kts; isSubSurface = true; } *************** *** 100,104 **** { TS = 0; ! SLp = 90 + 0.5f * tgt_kin->mfSpeed_kts; isSubSurface = true; } --- 100,104 ---- { TS = 0; ! SLp = 120.0f + tgt_kin->mfSpeed_kts; isSubSurface = true; } *************** *** 120,128 **** tgt_kin->mfLat_rad, tgt_kin->mfLon_rad); last_az_rad = fTargetAz_rad; - float fHalfFOV_rad = 0.5f*C_PIOVER180*mpDBObj->mfFieldOfView_deg; - fCoverageAz1 = lookAz_rad - fHalfFOV_rad; - fCoverageAz2 = lookAz_rad + fHalfFOV_rad; - bInSearchVolume = AngleWithinRange(fTargetAz_rad,fCoverageAz1,fCoverageAz2) != 0; if (!bInSearchVolume) { --- 120,136 ---- tgt_kin->mfLat_rad, tgt_kin->mfLon_rad); last_az_rad = fTargetAz_rad; + + if (mpDBObj->mfFieldOfView_deg >= 360.0f) + { + bInSearchVolume = true; + } + else + { + float fHalfFOV_rad = 0.5f*C_PIOVER180*mpDBObj->mfFieldOfView_deg; + fCoverageAz1 = lookAz_rad - fHalfFOV_rad; + fCoverageAz2 = lookAz_rad + fHalfFOV_rad; + bInSearchVolume = AngleWithinRange(fTargetAz_rad,fCoverageAz1,fCoverageAz2) != 0; + } if (!bInSearchVolume) { *************** *** 150,153 **** --- 158,162 ---- } last_snr_excess = excessSNR; + last_range_km = range_km; return excessSNR > 0; *************** *** 294,297 **** --- 303,307 ---- if (CanDetectTarget(ptarget, fRange_km)) { + //fprintf(stdout, "Torpedo %d updating target %d\n", parent->mnID, ptarget->mnID); UpdateTrack(ptarget, t); return; *************** *** 303,306 **** --- 313,317 ---- if (returnToSearch) { + //fprintf(stdout, "Torpedo %d lost target %d\n", parent->mnID, ptarget->mnID); mcTrack.mnID = -1; mnMode = SSMODE_SEEKERSEARCH; *************** *** 364,367 **** --- 375,379 ---- if (minID == -1) return; // no targets found parent->DesignateTarget(minID); // select closest as target + //fprintf(stdout, "Torpedo %d targeting %d\n", parent->mnID, minID); } } *************** *** 529,532 **** --- 541,546 ---- * Update sensor track with target state. Used with * torpedos + * Assumes CanDetectTarget has been called immediately before with + * this target. */ void tcSonar::UpdateTrack(const tcGameObject* target, double t) *************** *** 535,538 **** --- 549,555 ---- if (isPassive) { + float bearingRate = parent->mcKin.BearingRateTo(last_range_km, last_az_rad, + target->mcKin.mfSpeed_kts, target->mcKin.mfHeading_rad); + mcTrack.mfLat_rad = 0; mcTrack.mfLon_rad = 0; *************** *** 541,546 **** mcTrack.mfHeading_rad = last_az_rad; mcTrack.mfClimbAngle_rad = 0; // or could use this as passive elevation mcTrack.mfTimestamp = t; ! mcTrack.mnFlags = TRACK_BEARING_ONLY | TRACK_ALT_VALID; } else --- 558,564 ---- mcTrack.mfHeading_rad = last_az_rad; mcTrack.mfClimbAngle_rad = 0; // or could use this as passive elevation + mcTrack.bearingRate_radps = bearingRate; mcTrack.mfTimestamp = t; ! mcTrack.mnFlags = TRACK_BEARING_ONLY | TRACK_ALT_VALID | TRACK_BEARINGRATE_VALID; } else |