From ecd7c8591cd11ca47e693479467e3df9e4a77b67 Mon Sep 17 00:00:00 2001 From: yuliang <398780299@qq.com> Date: Tue, 15 Jul 2025 09:01:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E7=94=BB=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/amr/ptr/PtrObject.ts | 63 ++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/src/modules/amr/ptr/PtrObject.ts b/src/modules/amr/ptr/PtrObject.ts index efd1ac3..3bbf4e8 100644 --- a/src/modules/amr/ptr/PtrObject.ts +++ b/src/modules/amr/ptr/PtrObject.ts @@ -672,26 +672,24 @@ export default class PtrObject extends THREE.Object3D { const item = this.viewport.entityManager.findItemByLogicXY(data.EndX, data.EndY) if (endDirection != currentStepTask.EndDirection) { - // 如果此处不能转弯,忽略结束方向 等待后续任务 - if (!item.dt?.agvRotation || item.dt?.agvRotation?.length <= 0) { - debugger - return - } - const stepTask: StepTask = { - SeqNo: data.SeqNo, - StepTaskType: 'ROTATION', - OperationType: 0, - PickMode: 0, - X: data.EndX, - Y: data.EndY, - Speed: currentStepTask.Speed, - EndDirection: endDirection, - ChargeLocation: data.ChargeLocation, - GoodsSlotHeight: data.GoodsSlotHeight, - position: Model.getPositionByLogicXY(data.EndX, data.EndY) as THREE.Vector3, - isCompleted: false + // 如果此处不能转弯,忽略结束方向 等待后续任务 此处判断是否包含当前车型的转弯 + if (item.dt?.agvRotation && item.dt?.agvRotation?.length > 0) { + const stepTask: StepTask = { + SeqNo: data.SeqNo, + StepTaskType: 'ROTATION', + OperationType: 0, + PickMode: 0, + X: data.EndX, + Y: data.EndY, + Speed: currentStepTask.Speed, + EndDirection: endDirection, + ChargeLocation: data.ChargeLocation, + GoodsSlotHeight: data.GoodsSlotHeight, + position: Model.getPositionByLogicXY(data.EndX, data.EndY) as THREE.Vector3, + isCompleted: false + } + this.currentStepTaskList.push(stepTask) } - this.currentStepTaskList.push(stepTask) } if (data.OperationType == 3) { @@ -843,8 +841,7 @@ export default class PtrObject extends THREE.Object3D { keepSpeed: any force: any - reverseForce: any - + stopD: number = 0.01 // 走 addTravel(logicX: number, logicY: number, direction: number, speed: number = 1): Promise { @@ -856,8 +853,9 @@ export default class PtrObject extends THREE.Object3D { this.__toPos = pos as THREE.Vector3 //加速度 const a = 0.4 * (worldModel.state.runState.timeRate ?? 1) - const sa = 0.4 * (worldModel.state.runState.timeRate ?? 1) + const sa = 0.4 speed = speed * (worldModel.state.runState.timeRate ?? 1) + this.stopD = 0.01 * (worldModel.state.runState.timeRate ?? 1) if (this.position.x < this.__toPos.x || this.position.z < this.__toPos.z) { speed = Math.abs(speed) @@ -871,14 +869,11 @@ export default class PtrObject extends THREE.Object3D { this.keepSpeed = new this.viewport.ammoModel.btVector3(0, 0, 0) this.force = new this.viewport.ammoModel.btVector3(0, 0, 0) - this.reverseForce = new this.viewport.ammoModel.btVector3(0, 0, 0) if (direction == 0 || direction == 2) { this.force.setValue(accelForce, 0, 0) - this.reverseForce.setValue(-accelForce, 0, 0) this.keepSpeed.setValue(speed, 0, 0) } else if (direction == 1 || direction == 3) { this.force.setValue(0, 0, accelForce) - this.reverseForce.setValue(0, 0, -accelForce) this.keepSpeed.setValue(0, 0, speed) } @@ -905,7 +900,11 @@ export default class PtrObject extends THREE.Object3D { const cSpeed = velocity.length() const stopTime = cSpeed / a const stopDistance = a * stopTime * stopTime / 2 - if (distance <= 0.01) { + + const maxStopTime = speed / a + const maxStopDistance = a * stopTime * stopTime / 2 + + if (distance <= this.stopD) { const stopVel = new this.viewport.ammoModel.btVector3(0, 0, 0) this.boxBody.setLinearVelocity(stopVel) this.viewport.ammoModel.destroy(stopVel) @@ -920,16 +919,19 @@ export default class PtrObject extends THREE.Object3D { if (cSpeed == 0) { this.boxBody.activate() } + let keepSpeed = this.keepSpeed if (distance <= stopDistance) { if (currentPhase != 'decelerate') { currentPhase = 'decelerate' const sp = new this.viewport.ammoModel.btVector3(velocity.x(), velocity.y(), velocity.z()) this.boxBody.setLinearVelocity(sp) this.viewport.ammoModel.destroy(sp) + keepSpeed = new this.viewport.ammoModel.btVector3(velocity.x(), velocity.y(), velocity.z()) } - } else if (currentPhase == 'decelerate') { - currentPhase = 'accelerate' } + // else if (currentPhase == 'decelerate') { + // currentPhase = 'accelerate' + // } // 运动阶段控制 switch (currentPhase) { @@ -945,7 +947,7 @@ export default class PtrObject extends THREE.Object3D { break case 'uniform': currentPhase = 'uniform' - this.boxBody.setLinearVelocity(this.keepSpeed) + this.boxBody.setLinearVelocity(keepSpeed) this.boxBody.setDamping(0, 0); break case 'decelerate': @@ -953,6 +955,7 @@ export default class PtrObject extends THREE.Object3D { if (cSpeed > 0) { this.boxBody.setDamping(sa, 0); } + this.boxBody.activate() break } @@ -983,7 +986,6 @@ export default class PtrObject extends THREE.Object3D { // 取货 addLoad(height: number, goodsId: string): void { this.actionAnimation = 'wq' - console.log('取货') this.TaskMode = 2 this.PickMode = 1 this.OperationType = 4 @@ -1012,7 +1014,6 @@ export default class PtrObject extends THREE.Object3D { // 卸货 addUnload(height: number, goodsId: string): void { this.actionAnimation = 'wq' - console.log('卸货') this.TaskMode = 2 this.PickMode = 2 this.OperationType = 4