execute() won't work. You're overwriting the vision centerX instead of copying it. You should make the centerX variable in VisionSubsystem be
private to avoid problems like this.
Code:
synchronized (Robot.visionSubsystem.imgLock) {
Robot.visionSubsystem.centerX = this.centerX;
}
should be
Code:
synchronized (Robot.visionSubsystem.imgLock) {
this.centerX = Robot.visionSubsystem.centerX();
}
isFinished should also return true when the robot's driven to wherever it should be. As is, the command will never finish and the robot will never stop.