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