Question: in unity engine create a script for a UAV Add methods to display time, and drone speed and range. Display the time in seconds, range

in unity engine create a script for a UAV

Add methods to display time, and drone speed and range. Display the time in seconds, range in feet (ft) and the speed in miles per hour (mph).

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class NewBehaviourScript1 : MonoBehaviour

{

public GameObject drone;

public GameObject medicineBox;

public PIDController altitudePID;

public static int numberofMedicineBoxesDropped;

public float Kp;

public float Ki;

public float Kd;

private Rigidbody droneRigidBody;

private Animator UAVAnimator;

public static float _thrust;

public static Vector3 torque;

private float _maxThrust = 2.0f;

private float _maxYawTorque = 0.6f;

private float _maxPitchRollTorque = 0.50f;

private float hoverForce = 25.0f;

public float hoverHeight = 0.0f;

private Vector3 zeroPosition = new Vector3();

private Quaternion zeroRotation = new Quaternion();

void Start()

{

droneRigidBody = drone.GetComponent();

UAVAnimator = drone.GetComponent();

UAVAnimator.enabled = true;

zeroPosition = drone.transform.position;

zeroRotation = drone.transform.rotation;

altitudePID = new PIDController(Kp, Ki, Kd);

}

// Update is called once per frame

void Update()

{

_thrust = 0;

torque = Vector3.zero;

if (Input.GetAxis("VerticalThrust") != 0.0f) _thrust = Input.GetAxis("VerticalThrust") * _maxThrust;

if (Input.GetAxis("YawThrust") != 0.0f) torque.y = Input.GetAxis("YawThrust") * _maxYawTorque;

if (Input.GetAxis("PitchThrust") != 0.0f) torque.x = Input.GetAxis("PitchThrust") * _maxPitchRollTorque;

if (Input.GetAxis("RollThrust") != 0.0f) torque.z = Input.GetAxis("RollThrust") * _maxPitchRollTorque;

if (Input.GetAxis("JoystickVerticalThrust") != 0.0f) _thrust = Input.GetAxis("JoystickVerticalThrust") * _maxThrust;

if (Input.GetAxis("JoystickYawThrust") != 0.0f) torque.y = Input.GetAxis("JoystickYawThrust") * _maxYawTorque;

if (Input.GetAxis("JoystickPitchThrust") != 0.0f) torque.x = Input.GetAxis("JoystickPitchThrust") * _maxPitchRollTorque;

if (Input.GetAxis("JoystickRollThrust") != 0.0f) torque.z = Input.GetAxis("JoystickRollThrust") * _maxPitchRollTorque;

if (Input.GetKeyDown(KeyCode.B) || Input.GetKeyDown(KeyCode.Joystick1Button1))

{

Instantiate(medicineBox, drone.transform.position,Quaternion.identity);

numberofMedicineBoxesDropped++;

}

// misc.. //

if (_thrust != 0.0f) hoverHeight = drone.transform.position.y;

if (Input.GetKeyDown(KeyCode.R)) ReturnToStartingPosition();

}

private void PowerConsumption(float throttleSetting)

{

}

private void FixedUpdate()

{

Vector3 droneAngles = drone.transform.localEulerAngles;

if (_thrust != 0 || torque.magnitude != 0)

{

if (_thrust != 0.0f || torque.y != 0.0f)

{

float verticalForce = 0.0f;

verticalForce = (float)droneRigidBody.mass * (float)Physics.gravity.y * (1) *(1.0f + _thrust);

droneRigidBody.AddRelativeForce(Vector3.up * verticalForce,ForceMode.Force);

droneRigidBody.AddRelativeTorque(Vector3.up * torque.y,ForceMode.Force);

}

float _throttlePositionTorquePitch = 0.0f;

float _throttlePositionTorqueRoll = 0.0f;

float dampingRoll = .5f;

float dampingPitch = 0.1f;

if (torque.x != 0.0f || torque.z != 0.0f)

{

Quaternion droneQuat = drone.transform.rotation;

//the pitch

if (droneQuat.x > .25f && droneQuat.x < .25f)_throttlePositionTorquePitch = (Mathf.Clamp((torque.x),0.5f, 0.5f));

_throttlePositionTorquePitch = (Mathf.Clamp( rightHandPalm.Pitch / (Mathf.PI / 6.0f), 1.0f, 1.0f));

else if (droneQuat.x >= 0.24f) _throttlePositionTorquePitch = 0.325f * (droneQuat.x.24f);

else if (droneQuat.x <= .24f)_throttlePositionTorquePitch = 0.325f * (droneQuat.x + .24f);

//the roll

if (droneQuat.z > .25f && droneQuat.z < 0.250f)_throttlePositionTorqueRoll = (Mathf.Clamp(torque.z, 0.5f, 0.5f));

if (droneQuat.z >= 0.24f) _throttlePositionTorqueRoll = 0.325f * (droneQuat.z.24f);

if (droneQuat.z <= .24f)_throttlePositionTorqueRoll = 0.325f * (droneQuat.z + 0.24f);

Vector3 totalTorqueVector = (Vector3.forward * _throttlePositionTorqueRoll * dampingRoll) + (Vector3.right * _throttlePositionTorquePitch * dampingPitch);

droneRigidBody.AddRelativeTorque(totalTorqueVector, ForceMode.Force);

direction to compute the force such that the drone stays at a constant altitude when translating in the vertical plane only

Vector3 translation = new Vector3(0, 0, 0);

Vector3 eulerAngles = drone.transform.eulerAngles;

Vector3 scale = new Vector3(2.5, 2.5, 2.5);

Vector3 forceVector = new Vector3(0, 1, 0);

Quaternion rotation = Quaternion.Euler(eulerAngles);

Matrix4x4 transformationMatrix = Matrix4x4.TRS(translation, rotation, scale);

Matrix4x4 inverseTransformationMatrix = transformationMatrix.inverse;

Vector3 newForceVector = inverseTransformationMatrix.MultiplyVector(forceVector);

float _thrust = (float)droneRigidBody.mass * (float)Physics.gravity.y * (1) / (newForceVector.y);

droneRigidBody.AddRelativeForce(Vector3.up * _thrust, ForceMode.Force);

Debug.Log(_thrust);

}

}

if (_thrust == 0.0f && torque.magnitude == 0.0f) Hover();

}

private void Hover()

{

Vector3 droneAngles = drone.transform.localEulerAngles;

float slope = 1.0e3f;

float deltaAngleZ = Mathf.DeltaAngle(0, droneAngles.z);

float deltaAngleX = Mathf.DeltaAngle(0, droneAngles.x);

float torqueZ = slope * deltaAngleZ;

float torqueX = slope * deltaAngleX;

droneRigidBody.AddRelativeTorque(torqueX, 0.0f, torqueZ, ForceMode.Force);

RaycastHit hit;

Ray downRay = new Ray(drone.transform.position, Vector3.up);

Physics.Raycast(downRay, out hit);

float currentAltitude = drone.transform.position.y;

float error = hoverHeight currentAltitude;

float forceMultiplier = Mathf.Clamp01(altitudePID.Update(error));

Vector3 appliedHoverForce = Vector3.up * (forceMultiplier * hoverForce);

droneRigidBody.AddRelativeForce(appliedHoverForce, ForceMode.Force);

}

private void ReturnToStartingPosition()

{

drone.transform.position = zeroPosition;

drone.transform.rotation = zeroRotation;

hoverHeight = 0.0f;

}

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!