changes to alignment software for final position

main
mwinter 1 year ago
parent 4a399ff43d
commit 73b1420c3a

@ -36,8 +36,8 @@ bool ySafeMode = false;
long yLimitPos = 0;
int microsteps = 1;
float maxSpeedConstant = 100 * microsteps;
float accelerationConstant = 50 * microsteps;
float maxSpeedConstant = 300 * microsteps;
float accelerationConstant = 100 * microsteps;
void setup() {

@ -628,7 +628,7 @@
"target": "",
"bypass": false,
"decimals": 2,
"mode": "push",
"mode": "toggle",
"lock": false,
"visible": true,
"interaction": true,
@ -1273,39 +1273,6 @@
"ignoreDefaults": false,
"onCreate": "",
"onValue": ""
},
{
"type": "frame",
"top": "auto",
"left": "auto",
"id": "frame_3",
"linkId": "",
"width": 600,
"height": 400,
"css": "> .frame {\n background-color: black;\n border: 2px solid grey;\n}\n:host {\n top:calc(50% - 200rem);\n left:calc(50% - 800rem);\n z-index: 10;\n}",
"default": "",
"value": "http://10.0.0.5:5000",
"address": "/frame_3",
"preArgs": "",
"colorWidget": "auto",
"html": "@{this.id}",
"lock": false,
"visible": true,
"interaction": true,
"comments": "",
"expand": "false",
"colorText": "auto",
"colorStroke": "auto",
"colorFill": "auto",
"alphaStroke": "auto",
"alphaFillOff": "auto",
"alphaFillOn": "auto",
"lineWidth": "auto",
"borderRadius": "auto",
"padding": "auto",
"target": "",
"onCreate": "",
"onValue": ""
}
],
"tabs": [],

@ -86,10 +86,10 @@ def track(frame, roi, dKernel):
replaceCrop(frame, roiFineOuter, thresh)
meanCourse = pow(cropCoarse.mean(), 1)
#print(meanCourse)
print(meanCourse)
mean = 0
direction = 1
if(meanCourse > 20):
if(meanCourse > 40):
# this could potentially be made more efficient by cropping from cropFineOuter
cropFineInner = crop(frame, roiFineInner)
# this could potentially be made more efficient by cropping from cropFineInner
@ -129,7 +129,7 @@ def picameraToCVTrack():
distanceX = track(frame, roiX, dilationKernel)
distanceY = track(frame, roiY, dilationKernel) * -1
oscClient.send_message("/trackerpos", [distanceX, distanceY])
oscClient.send_message("/trackerpos", [distanceX, distanceY * -1])
drawRoi(frame, roiX)
drawRoi(frame, roiY)
@ -208,7 +208,7 @@ picam2 = Picamera2()
#picam2.start_preview(Preview.QTGL)
#max resolution is (4056, 3040) which is more like 10 fps
#config = picam2.create_preview_configuration(main={"size": (2028, 1520)}, lores={"size": (768, 768), "format": "YUV420"}, transform=Transform(vflip=False))
config = picam2.create_preview_configuration(main={"size": (4056, 3040)}, lores={"size": (768, 768), "format": "YUV420"}, transform=Transform(vflip=False))
config = picam2.create_preview_configuration(main={"size": (4056, 3040)}, lores={"size": (768, 768), "format": "YUV420"}, transform=Transform(hflip=True, vflip=False))
picam2.configure(config)
app = QApplication([])
@ -237,8 +237,8 @@ cv2.resizeWindow("Frame", 1350, 1350)
cv2.setMouseCallback("Frame", moveROI)
#picam2.controls.ScalerCrop = (800, 0, 3040, 3040)
picam2.controls.ScalerCrop = (1375, 550, 1800, 1800)
picam2.controls.ScalerCrop = (1100, 400, 2125, 2125)
#picam2.controls.ScalerCrop = (1375, 550, 1800, 1800)
picam2.controls.ScalerCrop = (925, 630, 2025, 2025)
#picam2.controls.Brightness = 0.2
picam2.controls.Contrast = 1.1
#picam2.set_controls({"ExposureValue": 2})
@ -251,7 +251,6 @@ picam2.set_controls({"Saturation": 0})
(w0, h0) = picam2.stream_configuration("main")["size"]
(w1, h1) = picam2.stream_configuration("lores")["size"]
s1 = picam2.stream_configuration("lores")["stride"]
print(h1)
picam2.start()

@ -14,6 +14,7 @@ imgPositions = 9.collect({nil});
curPos = Point.new(0, 0);
tarPos = Point.new(0, 0);
netAddress = NetAddr.new("127.0.0.1", 8080);
lastSelect = 0;
~serialPort = SerialPort("/dev/ttyACM0", baudrate: 115200, crtscts: true);
// recieve motor feedback
@ -27,7 +28,7 @@ netAddress = NetAddr.new("127.0.0.1", 8080);
byte = ~serialPort.read;
if(byte==13, {
if(str[1].asString == "[", {
valArray = str.asString.interpret;//.postln;
valArray = str.asString.interpret.postln;
curPos = Point.new(valArray[0], valArray[1]);
limitSwitchNeg = valArray[2];
limitSwitchPos = valArray[3];
@ -82,7 +83,7 @@ jogControl = {arg axis;
count.postln;
jogRate = pow(count, 2) * 500;
if(axis == '/jog_horizontal', {
tarPos.x = curPos.x + (jogRate * jogDirection);
tarPos.x = curPos.x + (jogRate * jogDirection * -1);
}, {
tarPos.y = curPos.y + (jogRate * jogDirection);
});
@ -99,13 +100,6 @@ jogControl = {arg axis;
automation = false;
//netAddress.sendMsg("/STATE/SET", "{automate: 0}");
}, axis, netAddress);
OSCFunc({arg msg;
//tarPos.x = curPos.x + (1000 * msg[1]);
//moveTo.value(tarPos);
if(msg[1] == 0, {count = 0; jogRate = 0; jog.pause()}, {jogRate = 10; jogDirection = msg[1]; jog.play(AppClock)});
automation = false;
//netAddress.sendMsg("/STATE/SET", "{automate: 0}");
}, axis, NetAddr.localAddr)
};
jogHorizontal = jogControl.value('/jog_horizontal');
@ -115,7 +109,8 @@ imgSelect = {
//var lastSelect = nil;
OSCFunc({arg msg;
var imgIndex;
if(msg[1] > 0, {
msg.postln;
if((msg[1] > 0), {
imgIndex = msg[1] - 1;
imgIndex.postln;
if(imgPositions[imgIndex] != nil, {tarPos = imgPositions[imgIndex].deepCopy; moveTo.value(tarPos)});
@ -125,6 +120,8 @@ imgSelect = {
//netAddress.sendMsg("/STATE/SET", "{automate: 0}");
lastSelect = imgIndex;
}, {
lastSelect.postln;
if(msg[1] == ((lastSelect + 1) * -1), {"here".postln; lastSelect = 0})
//lastSelect = 0;
/*
imgIndex = msg[1].neg - 1;
@ -170,18 +167,17 @@ automate = OSCFunc({arg msg;
trackerPos = OSCFunc({arg msg;
//imgPositions.postln[lastSelect.postln];
if(lastSelect != nil, {
if(lastSelect.postln > 0, {
var distX, distY, isFocusing;
distX = curPos.x - imgPositions[lastSelect].x;
distY = curPos.y - imgPositions[lastSelect].y;
isFocusing = false;
if((imgPositions[lastSelect] != nil) && (distX.abs < 500) && (msg[1].abs > 6000), {
tarPos.x = curPos.x + (10 * msg[1].sign * -1);
if((imgPositions[lastSelect] != nil) && (distX.abs < 500) && (msg[1].abs > 8000), {
tarPos.x = curPos.x + (10 * msg[1].sign);// * -1);
isFocusing = true;
//NetAddr.localAddr.sendMsg('/jog_horizontal', msg[1].sign.postln * -1);
});
if((imgPositions[lastSelect] != nil) && (distY.abs < 500) && (msg[2].abs > 6000), {
tarPos.y = curPos.y + (10 * msg[2].sign * -1);
if((imgPositions[lastSelect] != nil) && (distY.abs < 500) && (msg[2].abs > 8000), {
tarPos.y = curPos.y + (10 * msg[2].sign);// * -1);
isFocusing = true;
});
if(isFocusing, {moveTo.value(tarPos)});
@ -189,11 +185,14 @@ trackerPos = OSCFunc({arg msg;
//msg.postln;
}, '/trackerpos');
)
//in case of emergency
~serialPort.close
~serialPort = SerialPort.new("/dev/ttyACM0", baudrate: 115200, crtscts: true);
~serialListener.reset
~serialListener.play(AppClock);
//This is legacy code - should be removed soonish
(
// TODO:
// set position to 0

Loading…
Cancel
Save