From 3872bfab8feb9f86607bb109c87964c5c323c20c Mon Sep 17 00:00:00 2001 From: "E. A. Graham Jr" <10370165+EAGrahamJr@users.noreply.github.com> Date: Sun, 12 Nov 2023 12:51:30 -0800 Subject: [PATCH] Rebuilt the extender for more range Kind of -- running into binding issues due to weight distribution. --- .../kotlin/crackers/kobots/app/Thingie.kt | 6 +--- .../kotlin/crackers/kobots/app/arm/TheArm.kt | 23 +++++++-------- .../kobots/app/enviro/DieAufseherin.kt | 28 +------------------ .../crackers/kobots/app/enviro/Segmenter.kt | 7 ++++- ...ckUpAndMoveStuff.kt => MoveStuffAround.kt} | 27 +++++------------- .../crackers/kobots/app/execution/QuickRun.kt | 22 ++++++++++++++- 6 files changed, 46 insertions(+), 67 deletions(-) rename armthing/src/main/kotlin/crackers/kobots/app/execution/{PickUpAndMoveStuff.kt => MoveStuffAround.kt} (87%) diff --git a/armthing/src/main/kotlin/crackers/kobots/app/Thingie.kt b/armthing/src/main/kotlin/crackers/kobots/app/Thingie.kt index 444046f..86e8dd9 100644 --- a/armthing/src/main/kotlin/crackers/kobots/app/Thingie.kt +++ b/armthing/src/main/kotlin/crackers/kobots/app/Thingie.kt @@ -16,6 +16,7 @@ package crackers.kobots.app +import crackers.kobots.app.AppCommon.REMOTE_PI import crackers.kobots.app.AppCommon.executor import crackers.kobots.app.arm.ArmMonitor import crackers.kobots.app.arm.ManualController @@ -39,8 +40,6 @@ var manualMode: Boolean private val logger = LoggerFactory.getLogger("BRAINZ") -const val REMOTE_PI = "diozero.remote.hostname" - /** * Run this. */ @@ -60,9 +59,6 @@ fun main(args: Array? = null) { DieAufseherin.start() RosetteStatus.start() - // start alive-check - AppCommon.mqttClient.startAliveCheck() - AppCommon.awaitTermination() logger.warn("Exiting") // always "home" the Arm diff --git a/armthing/src/main/kotlin/crackers/kobots/app/arm/TheArm.kt b/armthing/src/main/kotlin/crackers/kobots/app/arm/TheArm.kt index 0489654..2fad63b 100644 --- a/armthing/src/main/kotlin/crackers/kobots/app/arm/TheArm.kt +++ b/armthing/src/main/kotlin/crackers/kobots/app/arm/TheArm.kt @@ -16,13 +16,13 @@ package crackers.kobots.app.arm -import com.diozero.api.ServoTrim import crackers.kobots.app.AppCommon import crackers.kobots.app.AppCommon.SLEEP_TOPIC import crackers.kobots.app.AppCommon.runFlag import crackers.kobots.app.crickitHat import crackers.kobots.app.execution.armSleep import crackers.kobots.app.execution.homeSequence +import crackers.kobots.devices.MG90S_TRIM import crackers.kobots.devices.at import crackers.kobots.parts.app.KobotsAction import crackers.kobots.parts.app.KobotsSubscriber @@ -68,7 +68,7 @@ object TheArm : SequenceExecutor("TheArm", AppCommon.mqttClient) { val _OPEN = 0f val _CLOSE = 65f - val servo = crickitHat.servo(3, ServoTrim.TOWERPRO_SG90).apply { + val servo = crickitHat.servo(3, MG90S_TRIM).apply { this at _CLOSE } @@ -77,16 +77,16 @@ object TheArm : SequenceExecutor("TheArm", AppCommon.mqttClient) { } val extender by lazy { - val _IN = 180f - val _OUT = 0f - val servo = crickitHat.servo(1, ServoTrim.TOWERPRO_SG90).apply { + val _IN = 0f + val _OUT = 90f + val servo = crickitHat.servo(1, MG90S_TRIM).apply { this at _IN } ServoLinearActuator(servo, _IN, _OUT) } val elbow by lazy { - val servo2 = crickitHat.servo(2, ServoTrim.TOWERPRO_SG90).apply { + val servo2 = crickitHat.servo(2, MG90S_TRIM).apply { this at 0 } val physicalRange = IntRange(ELBOW_DOWN, ELBOW_UP) @@ -95,13 +95,10 @@ object TheArm : SequenceExecutor("TheArm", AppCommon.mqttClient) { } val waist by lazy { - val _HOME = 0 - val _MAX = 180 - - val servoRange = IntRange(_HOME, _MAX) - val physicalRange = IntRange(0, 140) // MG90S servo trim - val servo = crickitHat.servo(4, ServoTrim(1500, 1100)).apply { - this at _HOME + val servoRange = IntRange(0, 180) + val physicalRange = IntRange(0, 140) + val servo = crickitHat.servo(4, MG90S_TRIM).apply { + this at 0 } ServoRotator(servo, physicalRange, servoRange) } diff --git a/armthing/src/main/kotlin/crackers/kobots/app/enviro/DieAufseherin.kt b/armthing/src/main/kotlin/crackers/kobots/app/enviro/DieAufseherin.kt index 06ed480..fe3008c 100644 --- a/armthing/src/main/kotlin/crackers/kobots/app/enviro/DieAufseherin.kt +++ b/armthing/src/main/kotlin/crackers/kobots/app/enviro/DieAufseherin.kt @@ -24,7 +24,6 @@ import crackers.kobots.app.execution.PickUpAndMoveStuff.moveEyeDropsToDropZone import crackers.kobots.app.execution.excuseMe import crackers.kobots.app.execution.homeSequence import crackers.kobots.app.execution.sayHi -import crackers.kobots.devices.sensors.VCNL4040 import crackers.kobots.mqtt.KobotsMQTT.Companion.KOBOTS_EVENTS import crackers.kobots.parts.app.publishToTopic import crackers.kobots.parts.enumValue @@ -57,33 +56,8 @@ object DieAufseherin { // AppCommon.executor.scheduleAtFixedRate(5.seconds, 100.milliseconds, ::youHaveOneJob) } - const val CLOSE_ENOUGH = 15 // this is **approximately** 25mm - const val PROXIMITY_TOPIC = "Prox.TooClose" - - private val sensor by lazy { - VCNL4040().apply { - proximityEnabled = true - ambientLightEnabled = true - } - } - private var wasTriggered = false - private fun youHaveOneJob() { - try { - val prox = sensor.proximity - wasTriggered = if (prox > CLOSE_ENOUGH) { - if (!wasTriggered) { - logger.info("Proximity sensor triggered: $prox") -// publishToTopic(PROXIMITY_TOPIC, prox) - } - true - } else false - - } catch (e: Exception) { - logger.error("Proximity sensor error: ${e.message}") - } - } - private fun mqttStuff() = with(AppCommon.mqttClient) { + startAliveCheck() allowEmergencyStop() subscribeJSON("homebody/bedroom/casey") { payload -> diff --git a/armthing/src/main/kotlin/crackers/kobots/app/enviro/Segmenter.kt b/armthing/src/main/kotlin/crackers/kobots/app/enviro/Segmenter.kt index 499fcc2..6307233 100644 --- a/armthing/src/main/kotlin/crackers/kobots/app/enviro/Segmenter.kt +++ b/armthing/src/main/kotlin/crackers/kobots/app/enviro/Segmenter.kt @@ -19,7 +19,12 @@ package crackers.kobots.app.enviro import crackers.kobots.app.AppCommon import crackers.kobots.app.AppCommon.SLEEP_TOPIC import crackers.kobots.app.AppCommon.whileRunning -import crackers.kobots.app.execution.* +import crackers.kobots.app.execution.MoveStuffAround.Companion.ROTO_PICKUP +import crackers.kobots.app.execution.MoveStuffAround.Companion.ROTO_RETURN +import crackers.kobots.app.execution.armSleep +import crackers.kobots.app.execution.excuseMe +import crackers.kobots.app.execution.homeSequence +import crackers.kobots.app.execution.sayHi import crackers.kobots.devices.display.HT16K33 import crackers.kobots.devices.display.QwiicAlphanumericDisplay import crackers.kobots.parts.app.KobotSleep diff --git a/armthing/src/main/kotlin/crackers/kobots/app/execution/PickUpAndMoveStuff.kt b/armthing/src/main/kotlin/crackers/kobots/app/execution/MoveStuffAround.kt similarity index 87% rename from armthing/src/main/kotlin/crackers/kobots/app/execution/PickUpAndMoveStuff.kt rename to armthing/src/main/kotlin/crackers/kobots/app/execution/MoveStuffAround.kt index 32bb7d7..4757853 100644 --- a/armthing/src/main/kotlin/crackers/kobots/app/execution/PickUpAndMoveStuff.kt +++ b/armthing/src/main/kotlin/crackers/kobots/app/execution/MoveStuffAround.kt @@ -25,27 +25,8 @@ import crackers.kobots.app.arm.TheArm.waist import crackers.kobots.parts.movement.sequence /** - * Picks up stuff from the places and returns it. + * Defines how to pick something up from a place and put it somewhere else, with the reverse also available. */ -object PickUpAndMoveStuff { - private val dropMover = MoveStuffAround( - closeOnItem = 93, - extenderToPickupTarget = 85, - elbowForPickupTarget = 15, - dropOffElbow = 10, - dropOffExtender = 15 - ) - val moveEyeDropsToDropZone = dropMover.moveObjectToTarget() - val returnDropsToStorage = dropMover.pickupAndReturn() -} - -/** - * Magic things for transporting stuff. - */ -const val MAGIC_EXTENDER = 15 -const val ROTO_PICKUP = "LocationPickup" -const val ROTO_RETURN = "ReturnPickup" - class MoveStuffAround( val closeOnItem: Int = 90, // how much to close the gripper to grab the item - this stresses the technic a bit @@ -130,4 +111,10 @@ class MoveStuffAround( } this += returnToPickupLocation } + + companion object { + const val MAGIC_EXTENDER = 15 + const val ROTO_PICKUP = "LocationPickup" + const val ROTO_RETURN = "ReturnPickup" + } } diff --git a/armthing/src/main/kotlin/crackers/kobots/app/execution/QuickRun.kt b/armthing/src/main/kotlin/crackers/kobots/app/execution/QuickRun.kt index c63d82b..25fa33b 100644 --- a/armthing/src/main/kotlin/crackers/kobots/app/execution/QuickRun.kt +++ b/armthing/src/main/kotlin/crackers/kobots/app/execution/QuickRun.kt @@ -32,8 +32,19 @@ import crackers.kobots.parts.movement.ActionSpeed import crackers.kobots.parts.movement.sequence /** - * Home the arm. + * Picks up stuff from the places and returns it. */ +object PickUpAndMoveStuff { + val dropMover = MoveStuffAround( + closeOnItem = 93, + extenderToPickupTarget = 80, + elbowForPickupTarget = 10, + dropOffElbow = 0, + dropOffExtender = 15 + ) + val moveEyeDropsToDropZone = dropMover.moveObjectToTarget() + val returnDropsToStorage = dropMover.pickupAndReturn() +} /** * Wave hello kinda. @@ -61,6 +72,9 @@ val sayHi by lazy { } } +/** + * Get attention + */ val excuseMe by lazy { sequence { name = "Excuse Me" @@ -83,6 +97,9 @@ val excuseMe by lazy { } } +/** + * Kinda sorta sleepy + */ val armSleep by lazy { sequence { name = "Go To Sleep" @@ -99,6 +116,9 @@ val armSleep by lazy { } } +/** + * Send it home + */ val homeSequence by lazy { sequence { name = "Home"