void CCar::DriveForward() { Clutch(); if(0==CurrentTransmission()) Transmission(1); if(1==CurrentTransmission()||0==CurrentTransmission())Starter(); Drive(); }
void CCar::DriveBack() { Clutch(); Transmission(0); if(1==CurrentTransmission()||0==CurrentTransmission())Starter(); Drive(); }
void CCar::ReleaseForward() { if(bkp) { Clutch(); Transmission(0); if(1==CurrentTransmission()||0==CurrentTransmission())Starter(); Drive(); } else { Unclutch(); NeutralDrive(); } fwp=false; }
void mtsTeleOperationECM::ClutchEventHandler(const prmEventButton & button) { switch (button.Type()) { case prmEventButton::PRESSED: mIsClutched = true; break; case prmEventButton::RELEASED: mIsClutched = false; break; default: break; } // if the teleoperation is activated if (mTeleopState.DesiredState() == "ENABLED") { Clutch(mIsClutched); } }
void CCar::ReleaseBack() { if(b_breaks) { StopBreaking(); } if(fwp) { Clutch(); if(0==CurrentTransmission()) Transmission(1); if(1==CurrentTransmission()||0==CurrentTransmission()) Starter(); Drive(); } else { Unclutch(); NeutralDrive(); } bkp=false; }
void mtsTeleOperationECM::EnterEnabled(void) { // set cartesian effort parameters mMTML.SetWrenchBodyOrientationAbsolute(true); mMTML.LockOrientation(mMTML.PositionCartesianCurrent.Position().Rotation()); mMTMR.SetWrenchBodyOrientationAbsolute(true); mMTMR.LockOrientation(mMTMR.PositionCartesianCurrent.Position().Rotation()); // initial state for MTM force feedback // -1- initial distance between MTMs vct3 vectorLR; vectorLR.DifferenceOf(mMTMR.PositionCartesianCurrent.Position().Translation(), mMTML.PositionCartesianCurrent.Position().Translation()); // -2- mid-point, aka center of image mInitial.C.SumOf(mMTMR.PositionCartesianCurrent.Position().Translation(), mMTML.PositionCartesianCurrent.Position().Translation()); mInitial.C.Multiply(0.5); // -3- image up vector mInitial.Up.CrossProductOf(vectorLR, mInitial.C); mInitial.Up.NormalizedSelf(); // -4- width of image, depth of arms wrt image plan vct3 side; side.CrossProductOf(mInitial.C, mInitial.Up); side.NormalizedSelf(); mInitial.w = 0.5 * vctDotProduct(side, vectorLR); mInitial.d = 0.5 * vctDotProduct(mInitial.C.Normalized(), vectorLR); // projections mInitial.Lr.Assign(mInitial.C[0], 0, mInitial.C[2]); mInitial.Lr.NormalizedSelf(); mInitial.Ud.Assign(0, mInitial.C[1], mInitial.C[2]); mInitial.Ud.NormalizedSelf(); mInitial.Cw.Assign(mInitial.Up[0], mInitial.Up[1], 0); mInitial.Cw.NormalizedSelf(); mInitial.ECMPositionJoint = mECM.StateJointDesired.Position(); // -5- store current rotation matrix for MTML, MTMR, and ECM vctEulerZYXRotation3 eulerAngles; eulerAngles.Assign(mInitial.ECMPositionJoint[3], mInitial.ECMPositionJoint[0], mInitial.ECMPositionJoint[1]); vctEulerToMatrixRotation3(eulerAngles, mInitial.ECMRotEuler); mInitial.MTMLRot = mMTML.PositionCartesianCurrent.Position().Rotation(); mInitial.MTMRRot = mMTMR.PositionCartesianCurrent.Position().Rotation(); #if 0 std::cerr << CMN_LOG_DETAILS << std::endl << "L: " << mMTML.PositionCartesianCurrent.Position().Translation() << std::endl << "R: " << mMTMR.PositionCartesianCurrent.Position().Translation() << std::endl << "C: " << mInitial.C << std::endl << "Up: " << mInitial.Up << std::endl << "w: " << mInitial.w << std::endl << "d: " << mInitial.d << std::endl << "Si: " << side << std::endl; #endif mInitial.ECMPositionJoint = mECM.StateJointDesired.Position(); // check if by any chance the clutch pedal is pressed if (mIsClutched) { Clutch(true); } else { SetFollowing(true); } }
void CCar::ReleasePedals() { Clutch(); NeutralDrive();//set zero speed UpdatePower();//set engine friction; }