Skip to content

Commit 3a6cb60

Browse files
authored
Merge pull request #750 from Courseplay/749-pflug-hebensenkendrehen-gleichzeitig-mit-pathfinder-turn
fix: row start with plow
2 parents 2762d3f + 213e1ff commit 3a6cb60

2 files changed

Lines changed: 10 additions & 6 deletions

File tree

scripts/ai/turns/AITurn.lua

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function AITurn:init(vehicle, driveStrategy, ppc, proximityController, turnConte
5555
self:addState('WAITING_FOR_PATHFINDER')
5656
self.vehicle = vehicle
5757
self.workEndHandler = WorkEndHandler(vehicle, driveStrategy)
58-
self.workStartHandler = WorkStartHandler(vehicle, driveStrategy)
58+
self.workStartHandler = WorkStartHandler(vehicle, driveStrategy, turnContext)
5959
self.settings = vehicle:getCpSettings()
6060
self.turningRadius = AIUtil.getTurningRadius(self.vehicle)
6161
---@type PurePursuitController
@@ -643,8 +643,7 @@ end
643643
function CourseTurn:endTurn(dt)
644644
-- keep driving on the turn course until we need to lower our implements
645645
local dz = self.workStartHandler:lowerImplementsAsNeeded(self:getLowerImplementNode(), self.ppc:isReversing())
646-
self.driveStrategy:raiseControllerEvent(AIDriveStrategyCourse.onTurnEndProgressEvent,
647-
self:getLowerImplementNode(), self.ppc:isReversing(), self.workStartHandler:allLowered(), self.turnContext:isLeftTurn())
646+
648647
if self.workStartHandler:allLowered() then
649648
if self.ppc:isReversing() then
650649
self:debug('Turn ending in reverse')
@@ -1008,7 +1007,7 @@ function StartRowOnly:init(vehicle, driveStrategy, ppc, turnContext, startRowCou
10081007
self:addState('IMPLEMENTS_LOWERING')
10091008
self.vehicle = vehicle
10101009
self.settings = vehicle:getCpSettings()
1011-
self.workStartHandler = WorkStartHandler(vehicle, driveStrategy)
1010+
self.workStartHandler = WorkStartHandler(vehicle, driveStrategy, turnContext)
10121011
self.turningRadius = AIUtil.getTurningRadius(self.vehicle)
10131012
---@type AIDriveStrategyFieldWorkCourse
10141013
self.driveStrategy = driveStrategy

scripts/ai/turns/WorkStartHandler.lua

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ WorkStartHandler = CpObject()
44

55
---@param vehicle table
66
---@param driveStrategy AIDriveStrategyFieldWorkCourse
7-
function WorkStartHandler:init(vehicle, driveStrategy)
7+
function WorkStartHandler:init(vehicle, driveStrategy, turnContext)
88
self.logger = Logger('WorkStartHandler', Logger.level.debug, CpDebug.DBG_TURN)
99
self.vehicle = vehicle
1010
self.driveStrategy = driveStrategy
11+
self.turnContext = turnContext
1112
self.settings = vehicle:getCpSettings()
1213
self.objectsAlreadyLowered = {}
1314
self.nObjectsAlreadyLowered = 0
@@ -42,7 +43,7 @@ end
4243
--- same time, once all of them are beyond the work start node.
4344
---@return number distance between the work start and the implement furthest to the work start in meters,
4445
---<0 when driving forward, nil when driving backwards
45-
function WorkStartHandler:lowerImplementsAsNeeded(workStartNode, reversing, loweringCheckDistance)
46+
function WorkStartHandler:lowerImplementsAsNeeded(workStartNode, reversing)
4647
local function lowerThis(object)
4748
self.objectsAlreadyLowered[object] = true
4849
self.nObjectsAlreadyLowered = self.nObjectsAlreadyLowered + 1
@@ -54,6 +55,10 @@ function WorkStartHandler:lowerImplementsAsNeeded(workStartNode, reversing, lowe
5455
local allShouldBeLowered, dz = true, 0
5556
for object in pairs(self.objectsToLower) do
5657
local shouldLowerThis, thisDz = self:shouldLowerThisImplement(object, workStartNode, reversing)
58+
-- this must be called before the implement is lowered, for instance to rotate the plow before lowering it.
59+
-- ideally, this should all be in the PlowController since it is internal to the plow.
60+
self.driveStrategy:raiseControllerEvent(AIDriveStrategyCourse.onTurnEndProgressEvent,
61+
workStartNode, reversing, shouldLowerThis, self.turnContext:isLeftTurn())
5762
if reversing then
5863
dz = math.max(dz, thisDz)
5964
allShouldBeLowered = allShouldBeLowered and shouldLowerThis

0 commit comments

Comments
 (0)