Worked on heading stuff.
This commit is contained in:
parent
308b6a7fe2
commit
2e23715e48
@ -134,6 +134,13 @@ local function attemptMove(movef)
|
||||
return true
|
||||
end
|
||||
|
||||
local function locatePosition()
|
||||
local x, y, z = gps.locate()
|
||||
if x == nil then return false end
|
||||
position = vector.new(x, y, z)
|
||||
return true
|
||||
end
|
||||
|
||||
local function attemptMoveUp()
|
||||
if attemptMove(turtle.up) then
|
||||
relativePos.y = relativePos.y + 1
|
||||
@ -155,8 +162,12 @@ end
|
||||
local function attemptMoveForward()
|
||||
if attemptMove(turtle.forward) then
|
||||
relativePos = relativePos + relHeading
|
||||
if (position ~= nil and heading ~= nil) then
|
||||
if (position ~= nil) then
|
||||
if ( heading ~= nil and heading:length() ~= 0) then
|
||||
position = position + heading
|
||||
else
|
||||
locatePosition()
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
@ -166,8 +177,12 @@ end
|
||||
local function attemptMoveBackward()
|
||||
if attemptMove(turtle.back) then
|
||||
relativePos = relativePos - relHeading
|
||||
if (position ~= nil and heading ~= nil) then
|
||||
if (position ~= nil) then
|
||||
if (heading ~= nil and heading:length() ~= 0) then
|
||||
position = position - heading
|
||||
else
|
||||
locatePosition()
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
@ -180,7 +195,7 @@ local function attemptMoveLeft()
|
||||
relHeading = -relRightAxis
|
||||
relRightAxis = previousHeading
|
||||
|
||||
if heading ~= nil then
|
||||
if heading ~= nil and heading:length() ~= 0 then
|
||||
local previousHeading = heading
|
||||
heading = -rightAxis
|
||||
rightAxis = previousHeading
|
||||
@ -196,7 +211,7 @@ local function attemptMoveRight()
|
||||
relHeading = relRightAxis
|
||||
relRightAxis = -previousHeading
|
||||
|
||||
if heading ~= nil then
|
||||
if heading ~= nil and heading:length() ~= 0 then
|
||||
local previousHeading = heading
|
||||
heading = rightAxis
|
||||
rightAxis = -previousHeading
|
||||
@ -231,20 +246,21 @@ local function attemptStartTask(name, f, ...)
|
||||
taskArgs = arg
|
||||
end
|
||||
|
||||
-- actions
|
||||
|
||||
local function locatePosition()
|
||||
sendLog(POSITION, "Using GPS to determine position.")
|
||||
local x, y, z = gps.locate()
|
||||
if x == nil then sendLog(POSITION, "could not locate.") end
|
||||
position = vector.new(x, y, z)
|
||||
-- Actions
|
||||
|
||||
local function determinePosition()
|
||||
if not locatePosition() then
|
||||
sendLog(FAILED, "Unable to obtain GPS based position.")
|
||||
return
|
||||
end
|
||||
sendLog(POSITION, "Position obtained: " .. tostring(position))
|
||||
end
|
||||
|
||||
local function determineHeading()
|
||||
sendLog(HEADING, "Calculating heading.")
|
||||
if position == nil then
|
||||
sendLog(FAILED, "No current position")
|
||||
if position == nil && locatePosition() then
|
||||
sendLog(FAILED, "Unable to get current position.")
|
||||
return
|
||||
end
|
||||
local oldPos = vector.new(position.x, position.y, position.z)
|
||||
@ -252,28 +268,34 @@ local function determineHeading()
|
||||
sendLog(FAILED, "Could not move to get delta.")
|
||||
return
|
||||
end
|
||||
if position == nil then
|
||||
sendLog(FAILED, "Could not locate.")
|
||||
return
|
||||
end
|
||||
local fDelta = position - oldPos
|
||||
|
||||
if not attemptMoveBackward() then
|
||||
sendLog(FAILED, "Could not return to original position after first axis.")
|
||||
return
|
||||
end
|
||||
|
||||
if not attemptMoveRight() then
|
||||
sendLog(FAILED, "Unable to rotate right.")
|
||||
return
|
||||
end
|
||||
local oldPos = vector.new(position.x, position.y, position.z)
|
||||
|
||||
if not attemptMoveForward() then
|
||||
sendLog(FAILED, "Unable to move forward after rotation.")
|
||||
return
|
||||
end
|
||||
local rDelta = position - oldPos
|
||||
if not attemptMoveBackward() then
|
||||
sendLog(FAILED, "Could not return to original position after second axis.")
|
||||
return
|
||||
end
|
||||
if not attemptMoveLeft() then
|
||||
sendLog(FAILED, "Unable to rotate left.")
|
||||
return
|
||||
end
|
||||
|
||||
heading = fDelta
|
||||
rightAxis = position - oldPos
|
||||
rightAxis = rDelta
|
||||
sendLog(HEADING, "Heading obtained. \nForward: " .. textutils.serialiseJSON(heading) .. "\nRight direction: " .. textutils.serialiseJSON(rightAxis))
|
||||
end
|
||||
|
||||
@ -389,7 +411,7 @@ local function listen()
|
||||
"\nfuel: " .. tostring(status["fuel"]) ..
|
||||
"\ncurrent task: " .. status["task"], status)
|
||||
elseif data["request"] == POSITION then
|
||||
locatePosition()
|
||||
determinePosition()
|
||||
elseif data["request"] == HEADING then
|
||||
determineHeading()
|
||||
elseif data["request"] == QUARRY then
|
||||
|
Loading…
Reference in New Issue
Block a user