8 changed files with 157 additions and 66 deletions
-
61src/main/java/com/iflytop/colortitration/hardware/command/handlers/ClawHandler.java
-
32src/main/java/com/iflytop/colortitration/hardware/controller/ServoController.java
-
35src/main/java/com/iflytop/colortitration/hardware/drivers/MiniServoDriverWrapper.java
-
28src/main/java/com/iflytop/colortitration/hardware/service/ServoService.java
-
2src/main/java/com/iflytop/colortitration/hardware/type/Servo/LeisaiServoMId.java
-
1src/main/java/com/iflytop/colortitration/hardware/type/Servo/LiquidArmMId.java
-
12src/main/java/com/iflytop/colortitration/hardware/type/Servo/MiniServoId.java
@ -0,0 +1,61 @@ |
|||
package com.iflytop.colortitration.hardware.command.handlers; |
|||
|
|||
|
|||
import com.iflytop.colortitration.app.core.command.DeviceCommand; |
|||
import com.iflytop.colortitration.common.enums.Action; |
|||
import com.iflytop.colortitration.common.enums.Device; |
|||
import com.iflytop.colortitration.hardware.command.CommandHandler; |
|||
import com.iflytop.colortitration.hardware.drivers.MiniServoDriverWrapper; |
|||
import com.iflytop.colortitration.hardware.type.MId; |
|||
import com.iflytop.colortitration.hardware.type.Servo.MiniServoMId; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import java.util.Map; |
|||
import java.util.Set; |
|||
import java.util.stream.Collectors; |
|||
|
|||
@Slf4j |
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class ClawHandler extends CommandHandler { |
|||
private final MiniServoDriverWrapper driver_; |
|||
|
|||
private final Map<Device, MiniServoMId> servoMIdMap_ = Map.ofEntries( |
|||
Map.entry(Device.CLAW, MiniServoMId.RobotArmClawSV) |
|||
); |
|||
private final Map<Device, MId> supportCmdDeviceMIdMap = servoMIdMap_.entrySet().stream(). |
|||
collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().mid)); |
|||
private final Set<Action> supportActions = Set.of(Action.SET, Action.ORIGIN, Action.MOVE, Action.STOP); |
|||
|
|||
@Override |
|||
protected Map<Device, MId> getSupportCmdDeviceMIdMap() |
|||
{ |
|||
return supportCmdDeviceMIdMap; |
|||
} |
|||
|
|||
@Override |
|||
protected Set<Action> getSupportActions() { |
|||
return supportActions; |
|||
} |
|||
|
|||
@Override |
|||
public void handleCommand(DeviceCommand command) throws Exception { |
|||
// 发送命令 |
|||
MiniServoMId servoMId = servoMIdMap_.get(command.getDevice()); |
|||
if(command.getAction() == Action.STOP) { |
|||
driver_.stop(servoMId); |
|||
} |
|||
else if(command.getAction() == Action.MOVE) { |
|||
double position = command.getParam().getPosition(); |
|||
driver_.moveTo(servoMId, position); |
|||
} |
|||
else if(command.getAction() == Action.SET) { |
|||
Double speed = command.getParam().getSpeed(); |
|||
if(speed != null) { |
|||
driver_.setSpeed(servoMId, speed); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,35 @@ |
|||
package com.iflytop.colortitration.hardware.drivers; |
|||
|
|||
|
|||
import com.iflytop.colortitration.hardware.exception.HardwareException; |
|||
import com.iflytop.colortitration.hardware.type.Servo.MiniServoMId; |
|||
import com.iflytop.colortitration.hardware.type.Servo.MiniServoRegIndex; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Component; |
|||
import static java.lang.Math.abs; |
|||
|
|||
@Slf4j |
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class MiniServoDriverWrapper { |
|||
private final MiniServoDriver miniServoDriver; |
|||
// ==== ==== ==== ==== ==== ==== Set ==== ==== ==== ==== ==== ==== |
|||
public void setSpeed(MiniServoMId servoMid, double speed) { |
|||
log.info("[ {} ] Setting speed to {}", servoMid.mid.getDescription(), speed); |
|||
} |
|||
|
|||
// ==== ==== ==== ==== ==== ==== Ctrl ==== ==== ==== ==== ==== ==== |
|||
public void moveTo(MiniServoMId servoMid, double position) throws HardwareException |
|||
{ |
|||
miniServoDriver.miniServoEnable(servoMid, 1); |
|||
int servoPosition = (int) (abs(position)); |
|||
miniServoDriver.miniServoMoveToBlock(servoMid, servoPosition); |
|||
log.info("[ {} ] moveTo {}, servo position {} end", servoMid, position, servoPosition); |
|||
} |
|||
|
|||
public void stop(MiniServoMId servoMid) throws HardwareException { |
|||
miniServoDriver.miniServoStop(servoMid); |
|||
log.info("[ {} ] stop", servoMid.mid.getDescription()); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue