From ac241f45cc2fc0a77eb161128f36594c57f5c679 Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Mon, 25 Aug 2025 14:09:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B1=E4=BA=8E=E9=A9=AC=E8=BE=BE=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E5=87=86=E7=A1=AE=E6=80=A7=E8=BE=83=E4=BD=8E=EF=BC=8C?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=B0=83=E7=84=A6=E5=AE=8C=E6=88=90=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E7=9B=B4=E6=8E=A5=E7=A7=BB=E5=8A=A8=E5=88=B0m=5FgoodP?= =?UTF-8?q?os=E6=95=88=E6=9E=9C=E4=B8=8D=E5=A5=BD=EF=BC=8C=E6=89=80?= =?UTF-8?q?=E4=BB=A5=E5=85=88=E7=A7=BB=E5=8A=A8=E5=88=B0tmpPos=EF=BC=8C?= =?UTF-8?q?=E7=84=B6=E5=90=8E=E7=A7=BB=E5=8A=A8=E5=88=B0m=5FgoodPos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HPPA/OneMotorControl.cpp | 4 ++- HPPA/focusWindow.cpp | 56 +++++++++++++++++++++++++++++++++------- HPPA/focusWindow.h | 5 ++++ 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/HPPA/OneMotorControl.cpp b/HPPA/OneMotorControl.cpp index 5923c55..8002e2a 100644 --- a/HPPA/OneMotorControl.cpp +++ b/HPPA/OneMotorControl.cpp @@ -32,7 +32,7 @@ void OneMotorControl::onConnectMotor() } m_multiAxisController->moveToThread(&m_motorThread); - m_motorThread.start(); + connect(&m_motorThread, SIGNAL(finished()), m_multiAxisController, SLOT(deleteLater())); connect(this->ui.right_btn, SIGNAL(pressed()), this, SLOT(onxMotorRight())); connect(this->ui.right_btn, SIGNAL(released()), this, SLOT(onxMotorStop())); @@ -59,6 +59,8 @@ void OneMotorControl::onConnectMotor() connect(this, SIGNAL(testConnectivitySignal(int, int)), m_multiAxisController, SLOT(testConnectivity(int, int))); connect(m_multiAxisController, SIGNAL(broadcastConnectivity(std::vector)), this, SLOT(display_motors_connectivity(std::vector))); + + m_motorThread.start(); emit testConnectivitySignal(0, 1000); } diff --git a/HPPA/focusWindow.cpp b/HPPA/focusWindow.cpp index 8afbfda..888f318 100644 --- a/HPPA/focusWindow.cpp +++ b/HPPA/focusWindow.cpp @@ -118,6 +118,7 @@ void focusWindow::onConnectMotor() connect(this, SIGNAL(zeroStartSignal(int)), m_multiAxisController, SLOT(zeroStart(int))); connect(this, SIGNAL(move2MaxLocSignal(int, double, int)), m_multiAxisController, SLOT(moveToMax(int, double, int))); connect(m_multiAxisController, SIGNAL(broadcastLocationSignal(std::vector)), this, SLOT(display_x_loc(std::vector))); + connect(m_multiAxisController, SIGNAL(motorStopSignal(int, double)), this, SLOT(moveAfterAutoFocus(int, double))); m_motorThread.start(); //归零 @@ -408,10 +409,14 @@ void focusWindow::onAutoFocusFinished() if (mu < 0 || mu > maxPos) { std::cout << "拟合失败!!!!!" << std::endl; - QMessageBox msgBox; - msgBox.setText(QString::fromLocal8Bit("纹理较弱,自动调焦效果不佳!请使用调焦纸进行自动调焦!")); - msgBox.exec(); - mu = mu_init; + m_goodPos = mu_init; + m_isAutoFocusSuccess = false; + } + else + { + std::cout << "拟合成功!!!!!" << std::endl; + m_goodPos = mu; + m_isAutoFocusSuccess = true; } FileOperation* fileOperation = new FileOperation(); @@ -420,13 +425,13 @@ void focusWindow::onAutoFocusFinished() QString format1 = "yyyyMMdd_HHmmss"; QString fileName = now.toString("yyyyMMdd_HHmmss"); - QString tmp = QDir::cleanPath(QString::fromStdString(directory) + QDir::separator() + fileName + "_" + QString::number(m_iStepSize) + "interval_" + QString::number(mu) + ".csv"); + QString fitDataFile = QDir::cleanPath(QString::fromStdString(directory) + QDir::separator() + fileName + "_" + QString::number(m_iStepSize) + "interval_" + QString::number(mu) + ".csv"); + m_coordinator->saveToCsv(fitDataFile); - QString focusFilePath = QString::fromStdString(directory) + "\\focus.csv"; - m_coordinator->saveToCsv(tmp); - - //移动马达到最佳位置 - emit move2LocSignal(0, (double)mu, m_dSpeed, 1000); + //由于马达移动准确性较低,自动调焦完成后,直接移动到m_goodPos效果不好,所以先移动到tmpPos,然后移动到m_goodPos + double tmpPos = m_goodPos - positionData[positionData.size() - 1].actualPosition / 10; + m_isMoveAfterAutoFocus = true; + emit move2LocSignal(0, (double)tmpPos, m_dSpeed, 1000); } else { @@ -436,6 +441,37 @@ void focusWindow::onAutoFocusFinished() this->setDisabled(false); } +void focusWindow::moveAfterAutoFocus(int motorID, double location) +{ + if (!m_isMoveAfterAutoFocus) + { + return; + } + + std::cout << "\n已经到达位置:" << location << std::endl; + + //移动马达到最佳位置 + emit move2LocSignal(0, (double)m_goodPos, m_dSpeed, 1000); + + double tmp = abs(location - m_goodPos) / m_goodPos * 100; + if (tmp<5) + { + if (!m_isAutoFocusSuccess) + { + QMessageBox msgBox; + msgBox.setText(QString::fromLocal8Bit("纹理较弱,自动调焦效果不佳!请使用调焦纸进行自动调焦!")); + msgBox.exec(); + } + else + { + QMessageBox msgBox; + msgBox.setText(QString::fromLocal8Bit("自动调焦成功!")); + msgBox.exec(); + } + m_isMoveAfterAutoFocus = false; + } +} + void focusWindow::getGaussianInitParam(const std::vector& pos, const std::vector& index, double& a_init, double& mu_init, double& sigma_init, double& c_init) { auto minmax_element = std::minmax_element(index.begin(), index.end()); diff --git a/HPPA/focusWindow.h b/HPPA/focusWindow.h index fc98a01..496a0a7 100644 --- a/HPPA/focusWindow.h +++ b/HPPA/focusWindow.h @@ -125,6 +125,9 @@ private: MotionCaptureCoordinator* m_coordinator; int m_iStepSize; + double m_goodPos; + bool m_isAutoFocusSuccess; + bool m_isMoveAfterAutoFocus = false; void getGaussianInitParam(const std::vector& pos, const std::vector& index, double& a_init, double& mu_init, double& sigma_init, double& c_init); void gaussian_fit(const std::vector& x_data, const std::vector& y_data, double& a, double& mu, double& sigma, double& c); @@ -146,6 +149,8 @@ public Q_SLOTS: void display_x_loc(std::vector loc); void onx_rangeMeasurement(); + void moveAfterAutoFocus(int motorID, double location); + signals: void StartManualFocusSignal(int);//1ʼ0ֹͣ