update
This commit is contained in:
@@ -5,8 +5,6 @@ using MDCSToolBox.Clumsy.MotionControllers;
|
|||||||
using MDCSToolBox.Clumsy.Tracks;
|
using MDCSToolBox.Clumsy.Tracks;
|
||||||
using MDCSToolBox.Commons.Controllers;
|
using MDCSToolBox.Commons.Controllers;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using OpenCvSharp.Dnn;
|
|
||||||
using OpenCvSharp.XFeatures2D;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
@@ -14,7 +12,6 @@ using System.Numerics;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using static ClumsyCore.DTools.Painter;
|
using static ClumsyCore.DTools.Painter;
|
||||||
using static OpenCvSharp.ConnectedComponents;
|
|
||||||
|
|
||||||
namespace MultiWheelC
|
namespace MultiWheelC
|
||||||
{
|
{
|
||||||
@@ -213,22 +210,6 @@ namespace MultiWheelC
|
|||||||
DLog.Log("驱动器下使能完成", "TireFollowing");
|
DLog.Log("驱动器下使能完成", "TireFollowing");
|
||||||
}
|
}
|
||||||
|
|
||||||
//夹抱 close为true时夹抱,否则为还原
|
|
||||||
public void ClamptoTarget(bool close)
|
|
||||||
{
|
|
||||||
if (PilotDefinition.Self.GhostMode)
|
|
||||||
{
|
|
||||||
Thread.Sleep(2000);
|
|
||||||
Console.WriteLine("夹抱完成");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
new DriveTask(new ClampToTarget()
|
|
||||||
{
|
|
||||||
LeftClampTarget = close ? PilotDefinition.Self.LeftArmUpperPos : PilotDefinition.Self.LeftArmLowerPos,
|
|
||||||
RightClampTarget = close ? PilotDefinition.Self.RightArmUpperPos : PilotDefinition.Self.RightArmLowerPos
|
|
||||||
}.Get()).Wait();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void LineTracking(int srcId, int dstId, float LineDistance)
|
public void LineTracking(int srcId, int dstId, float LineDistance)
|
||||||
{
|
{
|
||||||
while (!TryLock(dstId))
|
while (!TryLock(dstId))
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ using FundamentalLib;
|
|||||||
using MDCSToolBox.Clumsy.Calibration;
|
using MDCSToolBox.Clumsy.Calibration;
|
||||||
using MDCSToolBox.Clumsy.Tracks;
|
using MDCSToolBox.Clumsy.Tracks;
|
||||||
using MDCSToolBox.Commons.Controllers;
|
using MDCSToolBox.Commons.Controllers;
|
||||||
using OpenCvSharp.Dnn;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
@@ -211,42 +210,6 @@ namespace MultiWheelC
|
|||||||
private DriveTask _dt;
|
private DriveTask _dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
[MovementTest(name = "抱夹关闭")]
|
|
||||||
public class ClampTest1 : MovementTest
|
|
||||||
{
|
|
||||||
public override void TestStop()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Test()
|
|
||||||
{
|
|
||||||
new DriveTask(new ClampToTarget()
|
|
||||||
{
|
|
||||||
LeftClampTarget = PilotDefinition.Self.LeftArmUpperPos,
|
|
||||||
RightClampTarget = PilotDefinition.Self.RightArmUpperPos
|
|
||||||
}.Get()).Wait();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[MovementTest(name = "抱夹打开")]
|
|
||||||
public class ClampTest2 : MovementTest
|
|
||||||
{
|
|
||||||
public override void TestStop()
|
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Test()
|
|
||||||
{
|
|
||||||
new DriveTask(new ClampToTarget()
|
|
||||||
{
|
|
||||||
LeftClampTarget = PilotDefinition.Self.LeftArmLowerPos,
|
|
||||||
RightClampTarget = PilotDefinition.Self.RightArmLowerPos
|
|
||||||
}.Get()).Wait();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[MovementTest(name = "测试前进基于轮里程")]
|
[MovementTest(name = "测试前进基于轮里程")]
|
||||||
public class LineTrackingTest : MovementTest
|
public class LineTrackingTest : MovementTest
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ using MDCSToolBox.Clumsy.Tracks;
|
|||||||
using MDCSToolBox.Commons;
|
using MDCSToolBox.Commons;
|
||||||
using MDCSToolBox.Commons.Controllers;
|
using MDCSToolBox.Commons.Controllers;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using OpenCvSharp.Dnn;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
@@ -74,55 +73,6 @@ namespace MultiWheelC
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class ClampToTarget : MovementDefinition
|
|
||||||
{
|
|
||||||
public float LeftClampTarget;
|
|
||||||
public float RightClampTarget;
|
|
||||||
|
|
||||||
public float MaxClampSpeed = PilotDefinition.Conf.MaxClampSpeed;
|
|
||||||
public float ClampKp = PilotDefinition.Conf.ClampControlKp;
|
|
||||||
public float ClampKi = PilotDefinition.Conf.ClampControlKi;
|
|
||||||
public float ClampKd = PilotDefinition.Conf.ClampControlKd;
|
|
||||||
public float ClampDeadZone = PilotDefinition.Conf.ClampControlDeadZone;
|
|
||||||
private PIDController leftpid, rightpid;
|
|
||||||
|
|
||||||
public override IEnumerable<bool> Get()
|
|
||||||
{
|
|
||||||
leftpid = new PIDController(() => PilotDefinition.Self.ActualPosLeftArm, ClampKp, ClampKi, ClampKd, 0,
|
|
||||||
ClampDeadZone, MaxClampSpeed)
|
|
||||||
{ SpeedAccPerSec = MaxClampSpeed / 2f };
|
|
||||||
|
|
||||||
rightpid = new PIDController(() => PilotDefinition.Self.ActualPosRightArm, ClampKp, ClampKi, ClampKd, 0,
|
|
||||||
ClampDeadZone, MaxClampSpeed)
|
|
||||||
{ SpeedAccPerSec = MaxClampSpeed / 2f };
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
var leftspeed = leftpid.GetResponse(LeftClampTarget);
|
|
||||||
var rightspeed = rightpid.GetResponse(RightClampTarget);
|
|
||||||
Console.WriteLine($"left arm speed:{leftspeed} right arm speed:{rightspeed}");
|
|
||||||
PilotDefinition.Self.SpeedLeftArm = leftspeed;
|
|
||||||
PilotDefinition.Self.SpeedRightArm = rightspeed;
|
|
||||||
if (leftpid.IsArrived()) PilotDefinition.Self.SpeedLeftArm = 0;
|
|
||||||
if (rightpid.IsArrived()) PilotDefinition.Self.SpeedRightArm = 0;
|
|
||||||
//if(Math.Abs(PilotDefinition.Self.LeftArmActualPos - PilotDefinition.Self.RightArmActualPos) > PilotDefinition.Conf.ClampOutOfSyncThr)
|
|
||||||
//{
|
|
||||||
// PilotDefinition.Self.ClampOutOfSync = true;
|
|
||||||
// Console.WriteLine($"左夹臂位置{PilotDefinition.Self.LeftArmActualPos} 右夹臂位置{PilotDefinition.Self.RightArmActualPos}");
|
|
||||||
// Console.WriteLine($"两个夹臂的位置差了{Math.Abs(PilotDefinition.Self.LeftArmActualPos - PilotDefinition.Self.RightArmActualPos)}");
|
|
||||||
// break;
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (leftpid.IsArrived() && rightpid.IsArrived()) break;
|
|
||||||
yield return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PilotDefinition.Self.SpeedLeftArm = 0;
|
|
||||||
PilotDefinition.Self.SpeedRightArm = 0;
|
|
||||||
Console.WriteLine($"left clamp to target:{LeftClampTarget} right clamp to target:{RightClampTarget}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Sleep : MovementDefinition
|
public class Sleep : MovementDefinition
|
||||||
{
|
{
|
||||||
public float Second = 2;
|
public float Second = 2;
|
||||||
|
|||||||
@@ -10,8 +10,6 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20240615" />
|
|
||||||
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.10.0.20240615" />
|
|
||||||
<PackageReference Include="System.Numerics.Vectors" Version="4.6.1" />
|
<PackageReference Include="System.Numerics.Vectors" Version="4.6.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -230,15 +230,6 @@ public class PilotConfig : MultiWheelPilotConfig
|
|||||||
[FieldMember(desc = "轮胎识别:后雷达参数")] public int TireBackTwoLegSgnDir = 1;
|
[FieldMember(desc = "轮胎识别:后雷达参数")] public int TireBackTwoLegSgnDir = 1;
|
||||||
[FieldMember(desc = "轮胎识别:后雷达参数")] public float TireBackTwoLegCenterChangeX = 0;
|
[FieldMember(desc = "轮胎识别:后雷达参数")] public float TireBackTwoLegCenterChangeX = 0;
|
||||||
|
|
||||||
[FieldMember(desc = "抱夹控制pid:Kp")] public float ClampControlKp = 0.1f;
|
|
||||||
[FieldMember(desc = "抱夹控制pid:Ki")] public float ClampControlKi = 0f;
|
|
||||||
[FieldMember(desc = "抱夹控制pid:Kd")] public float ClampControlKd = 0f;
|
|
||||||
[FieldMember(desc = "抱夹控制pid:MaxI")] public float ClampControlMaxI = 0f;
|
|
||||||
[FieldMember(desc = "抱夹控制pid:Acc")] public float ClampControlSpeedAcc = 1f;
|
|
||||||
[FieldMember(desc = "抱夹控制pid:Thresh")] public float ClampControlThresh = 0.2f;
|
|
||||||
[FieldMember(desc = "抱夹控制pid:DeadZone")] public float ClampControlDeadZone = 5f;
|
|
||||||
[FieldMember(desc = "抱夹最大速度")] public float MaxClampSpeed = 1.5f;
|
|
||||||
|
|
||||||
[FieldMember(desc = "直线行走距离")] public float LineTrackDistance = 1000f;
|
[FieldMember(desc = "直线行走距离")] public float LineTrackDistance = 1000f;
|
||||||
[FieldMember(desc = "直线行走最大速度")] public float LineTrackMaxSpeed = 0.3f;
|
[FieldMember(desc = "直线行走最大速度")] public float LineTrackMaxSpeed = 0.3f;
|
||||||
[FieldMember(desc = "直线行走Kp")] public float LineTrackKp = 0.2f;
|
[FieldMember(desc = "直线行走Kp")] public float LineTrackKp = 0.2f;
|
||||||
|
|||||||
@@ -100,18 +100,6 @@ public class PilotDefinition : MultiWheelPilotDefinition<PilotConfig, PilotDefin
|
|||||||
|
|
||||||
[AsLowerIO(desc = "车号")] public int CarNum = 1;
|
[AsLowerIO(desc = "车号")] public int CarNum = 1;
|
||||||
|
|
||||||
#region 夹臂变量
|
|
||||||
[AsUpperIO(desc = "左夹臂下发速度")] public float SpeedLeftArm;
|
|
||||||
|
|
||||||
[AsUpperIO(desc = "右夹臂下发速度")] public float SpeedRightArm;
|
|
||||||
|
|
||||||
[AsLowerIO(desc = "左夹臂实际位置")] public float ActualPosLeftArm;
|
|
||||||
|
|
||||||
[AsLowerIO(desc = "右夹臂实际位置")] public float ActualPosRightArm;
|
|
||||||
|
|
||||||
[AsUpperIO(desc = "夹臂不同步报警")] public bool ClampOutOfSync = false;
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
[AsLowerIO(desc = "左前左轮实际位置")] public float LFLActualPos;
|
[AsLowerIO(desc = "左前左轮实际位置")] public float LFLActualPos;
|
||||||
[AsLowerIO(desc = "左前右轮实际位置")] public float LFRActualPos;
|
[AsLowerIO(desc = "左前右轮实际位置")] public float LFRActualPos;
|
||||||
[AsLowerIO(desc = "右前左轮实际位置")] public float RFLActualPos;
|
[AsLowerIO(desc = "右前左轮实际位置")] public float RFLActualPos;
|
||||||
@@ -121,11 +109,6 @@ public class PilotDefinition : MultiWheelPilotDefinition<PilotConfig, PilotDefin
|
|||||||
[AsLowerIO(desc = "右后左轮实际位置")] public float RRLActualPos;
|
[AsLowerIO(desc = "右后左轮实际位置")] public float RRLActualPos;
|
||||||
[AsLowerIO(desc = "右后右轮实际位置")] public float RRRActualPos;
|
[AsLowerIO(desc = "右后右轮实际位置")] public float RRRActualPos;
|
||||||
|
|
||||||
[AsLowerIO(desc = "左夹臂低限位")] public float LeftArmLowerPos;
|
|
||||||
[AsLowerIO(desc = "左夹臂高限位")] public float LeftArmUpperPos;
|
|
||||||
[AsLowerIO(desc = "右夹臂低限位")] public float RightArmLowerPos;
|
|
||||||
[AsLowerIO(desc = "右夹臂高限位")] public float RightArmUpperPos;
|
|
||||||
|
|
||||||
[AsUpperIO(desc = "从C往驱动器下使能")] public bool DisableFromC = false;
|
[AsUpperIO(desc = "从C往驱动器下使能")] public bool DisableFromC = false;
|
||||||
[AsUpperIO(desc = "从C上复位")] public bool ResetFromC = false;
|
[AsUpperIO(desc = "从C上复位")] public bool ResetFromC = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user