Пример #1
0
        private void initializeEngine(agxPowerLine.PowerLine drivetrain, agxDriveTrain.PidControlledEngine engine)
        {
            // set a value for the inertia of the rotational dimension
            engine.setInertia(0.4);
            drivetrain.setSource(engine);
            // Create a rpm/torque table


            var rpm_torque_table = new agx.RealPairVector();

            foreach (var t in m_rpm_torque)
            {
                rpm_torque_table.Add(new agx.RealPair(t.First, t.Second));
            }

            engine.setRPMTorqueTable(rpm_torque_table);
            engine.ignition(true);
            engine.setThrottle(1.0);
        }
Пример #2
0
        private void initializeDrivetrain()
        {
            // Create a drive train
            var driveTrain = new agxPowerLine.PowerLine();

            m_simulation.add(driveTrain);

            //  Create an engine.
            m_engine = new agxDriveTrain.PidControlledEngine();
            // Initialize the engine parameters
            initializeEngine(driveTrain, m_engine);

            //

            //                                    Engine
            //                                      ^
            //                                      |
            //                                      |
            //                                    Clutch
            //                                      ^
            //                                      |
            //                                      |
            //     FrontRightWheelActuator        GearBox           RearRightWheelActuator
            //          ^                           ^                         ^
            //          |                           |                         |
            //          |                           |                         |
            //   FrontDifferential < ------- CenterDifferential -----> RearDifferential
            //          |                                                     |
            //          |                                                     |
            //     FrontLeftWheelActuator                            RearLeftWheelActuator


            var engineShaft = new agxDriveTrain.Shaft();

            engineShaft.getRotationalDimension().setName("engineShaft");

            m_clutch = new agxDriveTrain.Clutch(0.0);
            var clutchShaft = new agxDriveTrain.Shaft();

            clutchShaft.getRotationalDimension().setName("clutchShaft");

            m_gearbox = new agxDriveTrain.GearBox();

            /// Initialize the gear box parameters
            initializeGearBox(m_gearbox);

            var gearBoxShaft = new agxDriveTrain.Shaft();

            gearBoxShaft.getRotationalDimension().setName("gearBoxShaft");

            bool status = false;

            status = m_engine.connect(agxPowerLine.UnitSide.UNIT_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT, engineShaft);
            Debug.Assert(status);
            status = m_clutch.connect(engineShaft, agxPowerLine.ConnectorSide.CONNECTOR_INPUT, agxPowerLine.UnitSide.UNIT_OUTPUT);
            Debug.Assert(status);
            status = m_clutch.connect(clutchShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);
            status = m_gearbox.connect(clutchShaft, agxPowerLine.ConnectorSide.CONNECTOR_INPUT, agxPowerLine.UnitSide.UNIT_OUTPUT);
            Debug.Assert(status);
            status = m_gearbox.connect(gearBoxShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);


            var centerDifferential = new agxDriveTrain.Differential();
            var frontDifferential  = new agxDriveTrain.Differential();

            frontDifferential.setLock(true);
            var rearDifferential = new agxDriveTrain.Differential();

            rearDifferential.setLock(true);

            var frontDifferentialShaft = new agxDriveTrain.Shaft();

            frontDifferentialShaft.getRotationalDimension().setName("frontDifferentialShaft");
            var rearDifferentialShaft = new agxDriveTrain.Shaft();

            rearDifferentialShaft.getRotationalDimension().setName("rearDifferentialShaft");

            var frontRightWheelShaft = new agxDriveTrain.Shaft();
            var rearRightWheelShaft  = new agxDriveTrain.Shaft();
            var frontLeftWheelShaft  = new agxDriveTrain.Shaft();
            var rearLeftWheelShaft   = new agxDriveTrain.Shaft();

            status = centerDifferential.connect(gearBoxShaft, agxPowerLine.ConnectorSide.CONNECTOR_INPUT, agxPowerLine.UnitSide.UNIT_OUTPUT);
            Debug.Assert(status);

            status = centerDifferential.connect(frontDifferentialShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);

            status = centerDifferential.connect(rearDifferentialShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);

            status = frontDifferential.connect(frontDifferentialShaft, agxPowerLine.ConnectorSide.CONNECTOR_INPUT, agxPowerLine.UnitSide.UNIT_OUTPUT);
            Debug.Assert(status);

            status = rearDifferential.connect(rearDifferentialShaft, agxPowerLine.ConnectorSide.CONNECTOR_INPUT, agxPowerLine.UnitSide.UNIT_OUTPUT);
            Debug.Assert(status);


            status = frontDifferential.connect(frontRightWheelShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);

            status = rearDifferential.connect(rearRightWheelShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);

            status = frontDifferential.connect(frontLeftWheelShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);

            status = rearDifferential.connect(rearLeftWheelShaft, agxPowerLine.ConnectorSide.CONNECTOR_OUTPUT, agxPowerLine.UnitSide.UNIT_INPUT);
            Debug.Assert(status);

            //  Now connect wheel shafts to constraints.
            var frontRightWheelActuator = new agxPowerLine.RotationalActuator(m_wheelHinges["RightFrontHinge"]);
            var frontLeftWheelActuator  = new agxPowerLine.RotationalActuator(m_wheelHinges["LeftFrontHinge"]);
            var rearRightWheelActuator  = new agxPowerLine.RotationalActuator(m_wheelHinges["RightRearHinge"]);
            var rearLeftWheelActuator   = new agxPowerLine.RotationalActuator(m_wheelHinges["LeftRearHinge"]);

            status = frontRightWheelShaft.connect(frontRightWheelActuator);
            Debug.Assert(status);

            status = frontLeftWheelShaft.connect(frontLeftWheelActuator);
            Debug.Assert(status);

            status = rearRightWheelShaft.connect(rearRightWheelActuator);
            Debug.Assert(status);

            status = rearLeftWheelShaft.connect(rearLeftWheelActuator);
            Debug.Assert(status);
        }