Skip to content

Commit 213e1ff

Browse files
author
Peter Vaiko
committed
fix: row start with plow
Rotate the plow before attempting to lower it. No change to the row ending. Contrary to what the issue says, row ending is the same now as it was before the change for independent implement raise/lowering.
1 parent 2762d3f commit 213e1ff

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)