forked from CPL/Simulator
Исправления
This commit is contained in:
parent
46e296b7c2
commit
bf037b0870
@ -9,16 +9,17 @@ namespace DroneSimulator
|
|||||||
public float Mass; // Масса
|
public float Mass; // Масса
|
||||||
public bool Active; // Живой?
|
public bool Active; // Живой?
|
||||||
public float Length; // Длинна лучей
|
public float Length; // Длинна лучей
|
||||||
public float Dynamic; // Физика поведения
|
public const float Dynamic = 10; // Динамика вращения
|
||||||
public Vector3 PosXYZ, SpdXYZ, AccXYZ; // Положение в пространстве: Позиция, Скорость, Ускорение
|
public Vector3 PosXYZ, SpdXYZ, AccXYZ; // Положение в пространстве: Позиция, Скорость, Ускорение
|
||||||
public Quaternion Quat; // Основной кватернион
|
public Quaternion Quat; // Основной кватернион
|
||||||
public float Power = 0; // Тяга всех двигателей
|
public float Power = 0; // Тяга всех двигателей
|
||||||
|
public float MaxPower; // Тяга всех двигателей
|
||||||
public Vector3 SpdPRY, AccPRY; // Поворот в пространстве: pitch roll yaw
|
public Vector3 SpdPRY, AccPRY; // Поворот в пространстве: pitch roll yaw
|
||||||
|
|
||||||
public Vector3 Acc, Gyr; // Имитация: Акселерометр, Гироскоп
|
public Vector3 Acc, Gyr; // Имитация: Акселерометр, Гироскоп
|
||||||
public float LaserRange; // Имитация: Дальномер
|
public float LaserRange; // Имитация: Дальномер
|
||||||
|
|
||||||
private const float Gravity = 1.0f;
|
private const float Gravity = 9.8f;
|
||||||
|
|
||||||
private const float TO_GRAD = 180 / MathF.PI;
|
private const float TO_GRAD = 180 / MathF.PI;
|
||||||
private const float TO_RADI = MathF.PI / 180;
|
private const float TO_RADI = MathF.PI / 180;
|
||||||
@ -133,11 +134,11 @@ namespace DroneSimulator
|
|||||||
DroneThread.Start();
|
DroneThread.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Create(float mass, float len, float dynamic)
|
public int Create(float power, float mass, float len)
|
||||||
{
|
{
|
||||||
Mass = Range(mass);
|
Mass = mass;
|
||||||
Dynamic = dynamic * 100;
|
|
||||||
Length = len;
|
Length = len;
|
||||||
|
MaxPower = power;
|
||||||
|
|
||||||
Active = true;
|
Active = true;
|
||||||
|
|
||||||
@ -201,17 +202,15 @@ namespace DroneSimulator
|
|||||||
flow += flow * 0.1f; // Воздушная подушка
|
flow += flow * 0.1f; // Воздушная подушка
|
||||||
}
|
}
|
||||||
|
|
||||||
SpdPRY += AccPRY * ((time * Dynamic) / (Mass * Length));
|
SpdPRY += AccPRY * (Dynamic * time / (Mass * Length));
|
||||||
|
|
||||||
float dyn = Dynamic / 10;
|
|
||||||
|
|
||||||
Quaternion pow = Quaternion.Inverse(Quat) * new Quaternion(0, 0, flow, 0) * Quat;
|
Quaternion pow = Quaternion.Inverse(Quat) * new Quaternion(0, 0, flow, 0) * Quat;
|
||||||
AccXYZ = new Vector3(pow.X, pow.Y, pow.Z) * (dyn / Mass);
|
AccXYZ = new Vector3(pow.X, pow.Y, pow.Z) * (Gravity / Mass);
|
||||||
|
|
||||||
SpdXYZ += (AccXYZ + new Vector3(0, 0, -Gravity * dyn)) * time;
|
SpdXYZ += (AccXYZ + new Vector3(0, 0, -Gravity)) * time;
|
||||||
PosXYZ += SpdXYZ * time;
|
PosXYZ += SpdXYZ * time;
|
||||||
|
|
||||||
AccXYZ /= dyn;
|
AccXYZ /= Gravity; // Вернуть измерения в G
|
||||||
|
|
||||||
if (PosXYZ.Z < 0)
|
if (PosXYZ.Z < 0)
|
||||||
{
|
{
|
||||||
@ -269,7 +268,7 @@ namespace DroneSimulator
|
|||||||
if (pow > 1) pow = 1;
|
if (pow > 1) pow = 1;
|
||||||
if (pow < 0) pow = 0;
|
if (pow < 0) pow = 0;
|
||||||
|
|
||||||
return pow;
|
return pow * MaxPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetQadroPow(float ul, float ur, float dl, float dr)
|
public void SetQadroPow(float ul, float ur, float dl, float dr)
|
||||||
|
@ -33,7 +33,7 @@ namespace DroneSimulator
|
|||||||
if (data.Connect)
|
if (data.Connect)
|
||||||
{
|
{
|
||||||
Drone drone = new Drone(data.ID);
|
Drone drone = new Drone(data.ID);
|
||||||
drone.Create(0.5f, 1.0f, 1.0f);
|
drone.Create(1.0f, 0.5f, 1.0f);
|
||||||
|
|
||||||
screen2D.CreateDrone(Color.Red, data.ID);
|
screen2D.CreateDrone(Color.Red, data.ID);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user