Пример #1
0
    public RobotSample GetSample(bool force = false)
    {
        RobotSample sample = null;

        if (Time.time > nextRecordTime || force)
        {
            if (m_saveLocation != "")
            {
//				Debug.Log ( "Recording!" );
                sample = new RobotSample();

                sample.timestamp  = System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss_fff");
                sample.steerAngle = SteerAngle;
//				sample.steerAngle = m_SteerAngle / m_MaximumSteerAngle;
                sample.verticalAngle = VerticalAngle;
                sample.throttle      = ThrottleInput;
                sample.brake         = BrakeInput;
                sample.speed         = Speed;
                sample.pitch         = Pitch;
                // new: convert yaw angle to CCW, x-based
                sample.yaw      = ConvertAngleToCCWXBased(Yaw);
                sample.roll     = Roll;
                sample.position = transform.position;
                sample.rotation = transform.rotation;
//				Debug.Log ( "Throt " + sample.throttle + " brake " + sample.brake + " pos " + sample.position + " yaw " + sample.yaw );

                samples.Enqueue(sample);
//				ObjectiveSpawner.Sample ();
            }
            nextRecordTime = Time.time + recordTime;
        }
        return(sample);
    }
Пример #2
0
    public void StopPickup()
    {
        RobotSample s = GetSample(true);

        s.stopPickup = true;
//		var iter = samples.GetEnumerator ();
//		RobotSample s = null;
//		while ( iter.MoveNext () )
//		{
//			s = iter.Current;
//		}
//		s.stopPickup = true;
    }
Пример #3
0
    public void TriggerPickup()
    {
        RobotSample s = GetSample(true);

        s.triggerPickup = true;
        s.curSample     = curObjective.gameObject;
//		var iter = samples.GetEnumerator ();
//		RobotSample s = null;
//		while ( iter.MoveNext () )
//		{
//			s = iter.Current;
//		}
//		s.triggerPickup = true;
//		s.curSample = curObjective.gameObject;
    }
Пример #4
0
    //Changed the WriteSamplesToDisk to a IEnumerator method that plays back recording along with percent status from UISystem script
    //instead of showing frozen screen until all data is recorded
    public IEnumerator WriteSamplesToDisk()
    {
        string newLine = "\n";

        if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
        {
            newLine = "\r\n";
        }

        if (string.IsNullOrEmpty(csvSeparatorChar))
        {
            Debug.LogWarning("Warning: empty/null separator. using `,`");
            csvSeparatorChar = ",";
        }
        yield return(null);

        if (samples.Count > 0)
        {
            string row = "Path" + csvSeparatorChar + "SteerAngle" + csvSeparatorChar + "Throttle" + csvSeparatorChar + "Brake" + csvSeparatorChar + "Speed" + csvSeparatorChar + "X_Position" +
                         csvSeparatorChar + "Y_Position" + csvSeparatorChar + "Pitch" + csvSeparatorChar + "Yaw" + csvSeparatorChar + "Roll" + newLine;
            File.AppendAllText(Path.Combine(m_saveLocation, CSVFileName), row);

            ObjectiveSpawner.SetInitialPositions();
            int         count          = samples.Count;
            RobotSample sample         = null;
            int         badPickupCount = 0;
            bool        isPickingUp    = false;
            for (int i = 0; i < count; i++)
            {
                // hack: for some reason there are lots of extra samples during the pickup, so artificially advance and drop them
                if (!IsPickingUpSample && isPickingUp)
                {
                    do
                    {
                        sample = samples.Dequeue();
                        i++;
                        badPickupCount++;
                    } while (!sample.stopPickup && samples.Count > 0 && i < count);
                    isPickingUp       = false;
                    IsPickingUpSample = false;
                }
                sample             = samples.Dequeue();
                transform.position = sample.position;
                transform.rotation = sample.rotation;
                if (sample.triggerPickup)
                {
                    isPickingUp = true;
//					Debug.Log ( "recorded pickup" );
                    curObjective = sample.curSample.GetComponent <PickupSample> ();
                    curObjective.transform.parent = null;
                    curObjective.Collider.enabled = true;
                    PickupObjective(null);
                }
                if (sample.stopPickup)
                {
                    Debug.Log("STOP!!");
                    isPickingUp       = false;
                    IsPickingUpSample = false;
                }
                string camPath = WriteImage(recordingCam, "robocam", sample.timestamp);

                row = camPath + csvSeparatorChar + sample.steerAngle + csvSeparatorChar + sample.throttle + csvSeparatorChar + sample.brake + csvSeparatorChar + sample.speed + csvSeparatorChar +
                      sample.position.x + csvSeparatorChar + sample.position.z + csvSeparatorChar + sample.pitch + csvSeparatorChar + sample.yaw + csvSeparatorChar + sample.roll + newLine;
                File.AppendAllText(Path.Combine(m_saveLocation, CSVFileName), row);

                yield return(null);
            }
            Debug.Log("bad pickup count: " + badPickupCount);
            isSaving = false;
            //need to reset the car back to its position before ending recording, otherwise sometimes the car ended up in strange areas
            transform.position = saved_position;
            transform.rotation = saved_rotation;
            Vector3 euler = cameraVAxis.localEulerAngles;
            euler.x = saved_vAngle;
            cameraVAxis.localEulerAngles = euler;
            Move(0);
            Rotate(0);
            RotateCamera(0, 0);
        }
    }
    //Changed the WriteSamplesToDisk to a IEnumerator method that plays back recording along with percent status from UISystem script
    //instead of showing frozen screen until all data is recorded
    public IEnumerator WriteSamplesToDisk()
    {
        string newLine = "\n";

        if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
        {
            newLine = "\r\n";
        }

        yield return(null);

        if (samples.Count > 0)
        {
            string row = "Path,SteerAngle,Throttle,Brake,Speed,X_Position,Y_Position,Pitch,Yaw,Roll" + newLine;
            File.AppendAllText(Path.Combine(m_saveLocation, CSVFileName), row);

            ObjectiveSpawner.SetInitialPositions();
            int         count          = samples.Count;
            RobotSample sample         = null;
            int         badPickupCount = 0;
            bool        isPickingUp    = false;
            for (int i = 0; i < count; i++)
            {
                // hack: for some reason there are lots of extra samples during the pickup, so artificially advance and drop them
                if (!IsPickingUpSample && isPickingUp)
                {
                    do
                    {
                        sample = samples.Dequeue();
                        i++;
                        badPickupCount++;
                    } while (!sample.stopPickup && samples.Count > 0 && i < count);
                    isPickingUp = false;
                }
                sample             = samples.Dequeue();
                transform.position = sample.position;
                transform.rotation = sample.rotation;
                if (sample.triggerPickup)
                {
                    isPickingUp = true;
//					Debug.Log ( "recorded pickup" );
                    curObjective = sample.curSample.GetComponent <PickupSample> ();
                    curObjective.transform.parent = null;
                    curObjective.Collider.enabled = true;
                    PickupObjective(null);
                }
                if (sample.stopPickup)
                {
                    Debug.Log("STOP!!");
                    isPickingUp = false;
                }
                string camPath = WriteImage(recordingCam, "robocam", sample.timestamp);

                row = camPath + "," + sample.steerAngle + "," + sample.throttle + "," + sample.brake + "," + sample.speed + "," +
                      sample.position.x + "," + sample.position.z + "," + sample.pitch + "," + sample.yaw + "," + sample.roll + newLine;
                File.AppendAllText(Path.Combine(m_saveLocation, CSVFileName), row);

                yield return(null);
            }
            Debug.Log("bad pickup count: " + badPickupCount);
            isSaving = false;
            //need to reset the car back to its position before ending recording, otherwise sometimes the car ended up in strange areas
            transform.position = saved_position;
            transform.rotation = saved_rotation;
            Vector3 euler = cameraVAxis.localEulerAngles;
            euler.x = saved_vAngle;
            cameraVAxis.localEulerAngles = euler;
            Move(0);
            Rotate(0);
            RotateCamera(0, 0);
        }

/*		yield return new WaitForSeconds(0.000f); //retrieve as fast as we can but still allow communication of main thread to screen and UISystem
 *              if (samples.Count > 0) {
 *                      //pull off a sample from the que
 *                      RobotSample sample = samples.Dequeue();
 *
 *                      //pysically moving the car to get the right camera position
 *                      transform.position = sample.position;
 *                      transform.rotation = sample.rotation;
 * //			Vector3 euler = cameraVAxis.localEulerAngles;
 * //			euler.x = sample.verticalAngle;
 * //			cameraVAxis.localEulerAngles = euler;
 *
 *                      // Capture and Persist Image
 *                      string camPath = WriteImage ( recordingCam, "robocam", sample.timestamp );
 *
 *                      string row = camPath + "," + sample.steerAngle + "," + sample.throttle + "," + sample.brake + "," + sample.speed + "," +
 *                              sample.position.x + "," + sample.position.y + "," + sample.position.z + "," + sample.yaw + "\r\n";
 * //			string row = string.Format ("{0},{1},{2},{3},{4},{5},{6}\n", centerPath, leftPath, rightPath, sample.steeringAngle, sample.throttle, sample.brake, sample.speed);
 *                      File.AppendAllText (Path.Combine (m_saveLocation, CSVFileName), row);
 *              }
 *              if (samples.Count > 0) {
 *                      //request if there are more samples to pull
 *                      StartCoroutine(WriteSamplesToDisk());
 *              }
 *              else
 *              {
 *                      //all samples have been pulled
 *                      StopCoroutine(WriteSamplesToDisk());
 *                      isSaving = false;
 *
 *                      //need to reset the car back to its position before ending recording, otherwise sometimes the car ended up in strange areas
 *                      transform.position = saved_position;
 *                      transform.rotation = saved_rotation;
 *                      Vector3 euler = cameraVAxis.localEulerAngles;
 *                      euler.x = saved_vAngle;
 *                      cameraVAxis.localEulerAngles = euler;
 *                      Move ( 0 );
 *                      Rotate ( 0 );
 *                      RotateCamera ( 0, 0 );
 *              }*/
    }