package com.roboclub.robobuggy.nodes.planners; import com.roboclub.robobuggy.messages.BrakeControlMessage; import com.roboclub.robobuggy.messages.DriveControlMessage; import com.roboclub.robobuggy.messages.GPSPoseMessage; import com.roboclub.robobuggy.ros.NodeChannel; import com.roboclub.robobuggy.ros.Publisher; import java.util.Date; /** * Created by vivaanbahl on 1/27/16. */ public class SweepNode extends PathPlannerNode { private double currentCommandedSteeringAngle = 0; private static final double STEERING_ANGLE_LOWER_BOUND = -20; private static final double STEERING_ANGLE_UPPER_BOUND = 20; private static final double STEERING_ANGLE_INCREMENT = 1; private Publisher steeringPublisher; private Publisher brakePublisher; private Thread t1; /** * Construct a new {@link PathPlannerNode} * * @param channel {@link NodeChannel} on which to broadcast status * information about the node */ public SweepNode(NodeChannel channel) { super(channel); steeringPublisher = new Publisher(NodeChannel.DRIVE_CTRL.getMsgPath()); brakePublisher = new Publisher(NodeChannel.BRAKE_CTRL.getMsgPath()); t1 = new Thread(new Runnable() { private boolean sweepUp = false; public void run() { while (true) { if (!sweepUp && currentCommandedSteeringAngle <= STEERING_ANGLE_LOWER_BOUND) { sweepUp = true; } else if (sweepUp && currentCommandedSteeringAngle >= STEERING_ANGLE_UPPER_BOUND) { sweepUp = false; } if (sweepUp) { currentCommandedSteeringAngle += STEERING_ANGLE_INCREMENT; } else { currentCommandedSteeringAngle -= STEERING_ANGLE_INCREMENT; } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } steeringPublisher.publish(new DriveControlMessage(new Date(), currentCommandedSteeringAngle)); brakePublisher.publish(new BrakeControlMessage(new Date(), false)); } } }); t1.start(); } @Override protected void updatePositionEstimate(GPSPoseMessage m) { // do nothing here, this is just a simple sweep // we don't need to know the position // STUB } @Override protected double getCommandedSteeringAngle() { return currentCommandedSteeringAngle; } @Override protected boolean getDeployBrakeValue() { return false; } @Override public String getName() { return "Sweep Test"; } /** * {@inheritDoc} */ @Override protected final boolean shutdownDecoratorNode() { t1.interrupt(); return true; } }