This commit is contained in:
2026-06-29 22:08:55 +08:00
parent c093fa32e6
commit 14b967f889
6 changed files with 0 additions and 134 deletions
-19
View File
@@ -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
{ {
-50
View File
@@ -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>
-9
View File
@@ -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;
-17
View File
@@ -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;