add,山地所贡嘎山11:
完成整个采集流程
This commit is contained in:
@ -137,7 +137,7 @@ void AppSettings::setRgbCameraDataFolder(const QString& path)
|
||||
|
||||
QString AppSettings::rgbCameraFileName() const
|
||||
{
|
||||
return m_settings.value("RgbCamera/FileName", "test").toString();
|
||||
return m_settings.value("RgbCamera/FileName", "test_rgb_data").toString();
|
||||
}
|
||||
|
||||
void AppSettings::setRgbCameraFileName(const QString& name)
|
||||
@ -145,6 +145,16 @@ void AppSettings::setRgbCameraFileName(const QString& name)
|
||||
m_settings.setValue("RgbCamera/FileName", name);
|
||||
}
|
||||
|
||||
QString AppSettings::fodisCameraFileName() const
|
||||
{
|
||||
return m_settings.value("FodisCamera/FileName", "test_fodis_data").toString();
|
||||
}
|
||||
|
||||
void AppSettings::setFodisCameraFileName(const QString& name)
|
||||
{
|
||||
m_settings.setValue("FodisCamera/FileName", name);
|
||||
}
|
||||
|
||||
double AppSettings::scanSpeed() const
|
||||
{
|
||||
return m_settings.value("OneMotorControl/ScanSpeed", kDefaultScanSpeed).toDouble();
|
||||
|
||||
@ -45,6 +45,9 @@ public:
|
||||
QString rgbCameraFileName() const;
|
||||
void setRgbCameraFileName(const QString& name);
|
||||
|
||||
QString fodisCameraFileName() const;
|
||||
void setFodisCameraFileName(const QString& name);
|
||||
|
||||
// 扫描速度
|
||||
double scanSpeed() const;
|
||||
void setScanSpeed(double value);
|
||||
|
||||
@ -459,7 +459,9 @@ OneMotionCaptureCoordinator::OneMotionCaptureCoordinator(
|
||||
connect(this, &OneMotionCaptureCoordinator::stopRecordHSISignal,
|
||||
m_cameraCtrl, &ImagerOperationBase::stop_record);
|
||||
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberMeet,
|
||||
this, &OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet);
|
||||
this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete);
|
||||
connect(m_cameraCtrl, &ImagerOperationBase::RecordFinishedSignal_WhenFrameNumberNotMeet,
|
||||
this, &OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete);
|
||||
}
|
||||
|
||||
OneMotionCaptureCoordinator::~OneMotionCaptureCoordinator()
|
||||
@ -498,12 +500,9 @@ void OneMotionCaptureCoordinator::stopStepMotion()
|
||||
{
|
||||
m_cameraCtrl->stop_record();
|
||||
}
|
||||
|
||||
emit stopMotorSignal(0);
|
||||
m_isHypercamStopRecord = true;
|
||||
}
|
||||
|
||||
void OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet()
|
||||
void OneMotionCaptureCoordinator::handleHyperImagerCaptureComplete()
|
||||
{
|
||||
emit stopMotorSignal(0);
|
||||
m_isHypercamStopRecord = true;
|
||||
@ -588,13 +587,11 @@ void OneMotionCaptureCoordinator::handleMotorStoped(int motorID, double pos)
|
||||
}
|
||||
move2LocBeforeStart();
|
||||
|
||||
emit sequenceComplete_cam_stop_before_motorback(0);
|
||||
emit sequenceCompleteSignal_hyperImagerStopRecord(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// emit sequenceComplete last: the slot connected to it may delete this object,
|
||||
// so no member access is allowed after this point.
|
||||
emit sequenceComplete(0);
|
||||
emit sequenceCompleteSignal_motorBack2Origin(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -141,11 +141,11 @@ public slots:
|
||||
void startStepMotion(OneMotionCapturePathLine pathLine);
|
||||
void stopStepMotion();
|
||||
|
||||
void handleCaptureCompleteWhenFrameNumberMeet();
|
||||
void handleHyperImagerCaptureComplete();
|
||||
|
||||
signals:
|
||||
void sequenceComplete_cam_stop_before_motorback(int);
|
||||
void sequenceComplete(int);
|
||||
void sequenceCompleteSignal_hyperImagerStopRecord(int);
|
||||
void sequenceCompleteSignal_motorBack2Origin(int);
|
||||
void errorOccurred(const QString& error);
|
||||
void moveTo(int, double, double, int);
|
||||
void moveSignal(int, bool, double, int);
|
||||
|
||||
@ -50,7 +50,7 @@ private:
|
||||
|
||||
public slots:
|
||||
virtual void recordDark(QString path) = 0;
|
||||
virtual void recordTarget(int recordTimes, QString path) = 0;
|
||||
virtual void recordTarget2csv(int recordTimes, QString path) = 0;
|
||||
virtual void autoExpose() = 0;
|
||||
|
||||
signals:
|
||||
|
||||
@ -27,10 +27,9 @@ FodisWindow::FodisWindow(QWidget* parent)
|
||||
|
||||
connect(this->ui.dataFolderBtn, SIGNAL(clicked()), this, SLOT(onSelectDataFolder()));
|
||||
|
||||
// 初始化数据保存路径显示(从 AppSettings 恢复或使用默认)
|
||||
ui.dataFolderLineEdit->setText(AppSettings::instance().depthCameraDataFolder());
|
||||
connect(ui.fileNameLineEdit, &QLineEdit::textChanged, this, &FodisWindow::onFileNameChanged);
|
||||
|
||||
setDataFolder(AppSettings::instance().FiberImagerDataFolder());
|
||||
loadSettings();
|
||||
}
|
||||
|
||||
FodisWindow::~FodisWindow()
|
||||
@ -41,6 +40,12 @@ FodisWindow::~FodisWindow()
|
||||
m_JinspFiberImagerOperation = nullptr;
|
||||
}
|
||||
|
||||
void FodisWindow::loadSettings()
|
||||
{
|
||||
ui.dataFolderLineEdit->setText(AppSettings::instance().FiberImagerDataFolder());
|
||||
ui.fileNameLineEdit->setText(AppSettings::instance().fodisCameraFileName());
|
||||
}
|
||||
|
||||
void FodisWindow::onSelectDataFolder()
|
||||
{
|
||||
QString dir = QFileDialog::getExistingDirectory(this,
|
||||
@ -59,6 +64,17 @@ void FodisWindow::setDataFolder(QString dir)
|
||||
}
|
||||
}
|
||||
|
||||
void FodisWindow::setFileName(QString name)
|
||||
{
|
||||
ui.fileNameLineEdit->setText(name);
|
||||
AppSettings::instance().setFodisCameraFileName(name);
|
||||
}
|
||||
|
||||
void FodisWindow::onFileNameChanged(const QString& text)
|
||||
{
|
||||
AppSettings::instance().setFodisCameraFileName(text);
|
||||
}
|
||||
|
||||
void FodisWindow::setCaptureInterval(int captureIntervalSeconds)
|
||||
{
|
||||
m_JinspFiberImagerOperation->setCaptureInterval(captureIntervalSeconds);
|
||||
@ -69,11 +85,24 @@ void FodisWindow::openFiberImager()
|
||||
openFiberImager_expose_record("pos_null");
|
||||
}
|
||||
|
||||
void FodisWindow::openFiberImager_expose_record(QString posInfo)
|
||||
void FodisWindow::openFiberImager_expose_record(QString posInfo, QString dataFolder)
|
||||
{
|
||||
setDataFolder(dataFolder);
|
||||
setFileName(posInfo);
|
||||
|
||||
if (!m_JinspFiberImagerOperation->getRecordStatus())
|
||||
{
|
||||
emit openFiberImagerSignal(posInfo);
|
||||
QString folder = AppSettings::instance().FiberImagerDataFolder();
|
||||
QDir dir(folder);
|
||||
if (!dir.exists())
|
||||
{
|
||||
dir.mkpath(".");
|
||||
}
|
||||
QString eventPrefix = posInfo.isEmpty() ? "default" : posInfo;
|
||||
QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
|
||||
QString m_qstrFullFileName = folder + QDir::separator() + dateStr + "_" + eventPrefix + "_fodis_data.dat";
|
||||
|
||||
emit openFiberImagerSignal(m_qstrFullFileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -31,15 +31,17 @@ public:
|
||||
|
||||
public Q_SLOTS:
|
||||
void openFiberImager();
|
||||
void openFiberImager_expose_record(QString posInfo);
|
||||
void openFiberImager_expose_record(QString posInfo, QString dataFolder = "");
|
||||
void onCamOpened();
|
||||
void closeFiberImager();
|
||||
void onCamClosed();
|
||||
|
||||
void onSelectDataFolder();
|
||||
void onFileNameChanged(const QString& text);
|
||||
void setFileName(QString name);
|
||||
|
||||
signals:
|
||||
void openFiberImagerSignal(QString posInfo);
|
||||
void openFiberImagerSignal(QString filePath);
|
||||
void PlotSpectralSignal();
|
||||
void FiberImagerClosedSignal();
|
||||
|
||||
@ -53,4 +55,6 @@ private:
|
||||
QThread* m_FiberImagerThread;
|
||||
|
||||
JinspFiberImager* m_JinspFiberImagerOperation;
|
||||
|
||||
void loadSettings();
|
||||
};
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#include "GonggaShanRecordCtl.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <Windows.h>
|
||||
|
||||
GonggaShanRecordCtl::GonggaShanRecordCtl(QWidget* parent)
|
||||
: QDialog(parent)
|
||||
@ -124,6 +125,26 @@ void GonggaShanRecordCtl::onGpsAcquisition()
|
||||
|
||||
// 发送GPS数据给任务执行器
|
||||
emit gpsAcquisitionDoneSignal_gonggashan(data.latitude, data.longitude, data.altitude);
|
||||
|
||||
// 使用GPS时间同步系统时间
|
||||
SYSTEMTIME st;
|
||||
memset(&st, 0, sizeof(SYSTEMTIME));
|
||||
|
||||
// 解析GPS日期 (DDMMYY格式)
|
||||
st.wDay = data.utcDate.mid(0, 2).toUShort();
|
||||
st.wMonth = data.utcDate.mid(2, 2).toUShort();
|
||||
st.wYear = 2000 + data.utcDate.mid(4, 2).toUShort();
|
||||
|
||||
// 解析GPS时间 (HHMMSS格式) - GPS时间是UTC时间
|
||||
st.wHour = data.utcTime.mid(0, 2).toUShort();
|
||||
st.wMinute = data.utcTime.mid(2, 2).toUShort();
|
||||
st.wSecond = data.utcTime.mid(4, 2).toUShort();
|
||||
st.wMilliseconds = 0;
|
||||
st.wDayOfWeek = 0;
|
||||
|
||||
// 设置系统时间 (UTC时间直接设置,Windows会自动转换为本地时间显示)
|
||||
SetSystemTime(&st);
|
||||
qDebug() << "System time synced from GPS:" << st.wYear << "-" << st.wMonth << "-" << st.wDay << " " << st.wHour << ":" << st.wMinute << ":" << st.wSecond;
|
||||
}
|
||||
});
|
||||
|
||||
@ -153,9 +174,8 @@ void GonggaShanRecordCtl::onCalculateMotorSpeed(double hyperFrameRate)
|
||||
{
|
||||
FramerateRotateSpeedCal tmp;
|
||||
double rotationSpeed = tmp.calculate(300, 17.6, 900, hyperFrameRate);
|
||||
double rotationSpeed2 = tmp.calculate(300, 17.6, 900, 60);
|
||||
|
||||
int a;
|
||||
|
||||
emit calculateMotorSpeedDoneSignal_gonggashan(rotationSpeed);
|
||||
}
|
||||
|
||||
void GonggaShanRecordCtl::logStatus(const QString& message, bool isHearderBlankLine, bool isTailBlankLine)
|
||||
@ -297,6 +317,17 @@ void GonggashanTaskExecutor::buildStateMachine()
|
||||
// ---- GpsAcquisition 状态:等待外部硬件回调 ----
|
||||
connect(m_gpsAcquisitionState, &QState::entered, this, [this]() {
|
||||
qDebug() << "GonggashanTaskExecutor: Enter m_gpsAcquisitionState";
|
||||
|
||||
// 创建当天日期的文件夹
|
||||
QString appDir = QCoreApplication::applicationDirPath();
|
||||
QString todayFolder = QDate::currentDate().toString("yyyy-MM-dd");
|
||||
m_todayDataFolder = appDir + "/" + todayFolder;
|
||||
QDir dir;
|
||||
if (!dir.exists(m_todayDataFolder)) {
|
||||
dir.mkpath(m_todayDataFolder);
|
||||
qDebug() << "Created today's data folder:" << m_todayDataFolder;
|
||||
}
|
||||
|
||||
emit gpsAcquisitionSignal();
|
||||
});
|
||||
connect(m_gpsAcquisitionState, &QState::exited, this, [this]() {
|
||||
@ -325,7 +356,7 @@ void GonggashanTaskExecutor::buildStateMachine()
|
||||
// ---- FiberExposure 状态:等待外部硬件回调 ----
|
||||
connect(m_fiberExposureState, &QState::entered, this, [this]() {
|
||||
qDebug() << "GonggashanTaskExecutor: Enter m_fiberExposureState";
|
||||
emit fiberExposureRecordSignal(m_posInfo);
|
||||
emit fiberExposureRecordSignal(m_posInfo, m_todayDataFolder);
|
||||
});
|
||||
connect(m_fiberExposureState, &QState::exited, this, [this]() {
|
||||
qDebug() << "GonggashanTaskExecutor: Exit m_fiberExposureState";
|
||||
@ -351,7 +382,7 @@ void GonggashanTaskExecutor::buildStateMachine()
|
||||
// ---- DataCollection 状态:同步阶段 ----
|
||||
connect(m_dataCollectionState, &QState::entered, this, [this]() {
|
||||
qDebug() << "GonggashanTaskExecutor: Enter m_dataCollectionState";
|
||||
emit startCollectionSignal(m_posInfo, m_gpsData);
|
||||
emit startCollectionSignal(m_posInfo, m_gpsData, m_motorRotationSpeed, m_todayDataFolder);
|
||||
});
|
||||
connect(m_dataCollectionState, &QState::exited, this, [this]() {
|
||||
qDebug() << "GonggashanTaskExecutor: Exit m_dataCollectionState";
|
||||
@ -457,14 +488,13 @@ void GonggashanTaskExecutor::onGpsAcquired(double latitude, double longitude, do
|
||||
emit gpsAcquisitionDone();
|
||||
}
|
||||
|
||||
void GonggashanTaskExecutor::onMotorSpeedCalculated(double speed)
|
||||
void GonggashanTaskExecutor::onMotorSpeedCalculated(double rotationSpeed)
|
||||
{
|
||||
if (currentState() != m_motorCalcState) return;
|
||||
m_motorSpeed = speed;
|
||||
emit motorSpeedSignal(speed);
|
||||
if (motorCalcImpl()) {
|
||||
emit motorSpeedDone();
|
||||
}
|
||||
m_motorRotationSpeed = rotationSpeed;
|
||||
emit motorSpeedSignal(rotationSpeed);
|
||||
motorCalcImpl();
|
||||
emit motorSpeedDone();
|
||||
}
|
||||
|
||||
void GonggashanTaskExecutor::onRcordComplete()
|
||||
@ -499,7 +529,7 @@ bool GonggashanTaskExecutor::gpsAcquisitionImpl(double lat, double lon, double a
|
||||
|
||||
bool GonggashanTaskExecutor::motorCalcImpl()
|
||||
{
|
||||
qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorSpeed;
|
||||
qDebug() << "GonggashanTaskExecutor: Motor speed calculated:" << m_motorRotationSpeed;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -55,15 +55,15 @@ public slots:
|
||||
void onHyperExposureComplete(double exposureTime, double frameRate);
|
||||
void onFiberExposureComplete(double exposureTime);
|
||||
void onGpsAcquired(double latitude, double longitude, double altitude);
|
||||
void onMotorSpeedCalculated(double speed);
|
||||
void onMotorSpeedCalculated(double rotationSpeed);
|
||||
void onRcordComplete();
|
||||
|
||||
signals:
|
||||
void hyperAutoExposureSignal_gonggashan();
|
||||
void fiberExposureRecordSignal(QString posInfo);
|
||||
void fiberExposureRecordSignal(QString posInfo, QString dataFolder);
|
||||
void gpsAcquisitionSignal();
|
||||
void motorSpeedSignal(double speed);
|
||||
void startCollectionSignal(const QString& posInfo, const QString& gpsData);
|
||||
void startCollectionSignal(const QString& posInfo, const QString& gpsData, double m_motorRotationSpeed, QString dataFolder);
|
||||
|
||||
void calculateMotorSpeedSignal(double hyperFrameRate);
|
||||
|
||||
@ -97,11 +97,12 @@ private:
|
||||
|
||||
QString m_posInfo;
|
||||
QString m_gpsData;
|
||||
double m_motorSpeed = 0.0;
|
||||
double m_motorRotationSpeed = 0.0;
|
||||
double m_hyperExposureTime = 0;
|
||||
double m_hyperFrameRate = 0;
|
||||
double m_fiberExposureTime = 0;
|
||||
bool m_stopRequested = false;
|
||||
QString m_todayDataFolder; // 当天日期的数据保存文件夹
|
||||
|
||||
// Qt State Machine
|
||||
QStateMachine* m_machine = nullptr;
|
||||
@ -130,15 +131,15 @@ public Q_SLOTS:
|
||||
Q_SIGNALS:
|
||||
void gpsAcquisitionDoneSignal_gonggashan(double lat, double lon, double alt);
|
||||
|
||||
void calculateMotorSpeedDoneSignal_gonggashan(double speed);
|
||||
void calculateMotorSpeedDoneSignal_gonggashan(double rotationSpeed);
|
||||
|
||||
void hyperAutoExposureSignal_gonggashan();
|
||||
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
|
||||
|
||||
void fiberExposureRecordSignal_gonggashan(QString posInfo);
|
||||
void fiberExposureRecordSignal_gonggashan(QString posInfo, QString dataFolder);
|
||||
void fiberExposureDoneSignal_gonggashan(double exposureTime);
|
||||
|
||||
void startRcordSignal_gonggashan(QString posInfo);
|
||||
void startRcordSignal_gonggashan(const QString& posInfo, const QString& gpsData, double m_motorRotationSpeed, QString dataFolder);
|
||||
void recordFinishedSignal_gonggashan();
|
||||
|
||||
private Q_SLOTS:
|
||||
|
||||
@ -1121,8 +1121,10 @@ void HPPA::setupGonggashanAutoRecordConnection()
|
||||
connect(m_fodisWindow, &FodisWindow::exposureCompleteSignal, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::fiberExposureDoneSignal_gonggashan);
|
||||
|
||||
connect(m_gonggaShanRecordCtl, &GonggaShanRecordCtl::startRcordSignal_gonggashan, this, &HPPA::onGonggashanRecord);
|
||||
connect(m_omc, &OneMotorControl::sequenceComplete, m_fodisWindow, &FodisWindow::closeFiberImager);
|
||||
connect(m_omc, &OneMotorControl::sequenceComplete, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan);
|
||||
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_rgbCameraControlWindow, &rgbCameraWindow::toggleTakePhoto);
|
||||
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_fodisWindow, &FodisWindow::closeFiberImager);
|
||||
connect(m_omc, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::recordFinishedSignal_gonggashan);
|
||||
//connect(m_omc, &OneMotorControl::sequenceComplete_motorBack2Origin, m_gonggaShanRecordCtl, &GonggaShanRecordCtl::);
|
||||
}
|
||||
|
||||
void HPPA::onGonggashanHyperAutoExposure()
|
||||
@ -1139,17 +1141,18 @@ void HPPA::onGonggashanHyperAutoExposure()
|
||||
m_omc->multiPosHyperAutoExposure();
|
||||
}
|
||||
|
||||
void HPPA::onGonggashanFiberAutoExposureRecord(QString posInfo)
|
||||
void HPPA::onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder)
|
||||
{
|
||||
m_fodisWindow->openFiberImager_expose_record(posInfo);
|
||||
//设置数据存储路径和文件名
|
||||
m_fodisWindow->openFiberImager_expose_record(posInfo, dataFolder);
|
||||
}
|
||||
|
||||
void HPPA::onGonggashanRecord(QString posInfo)
|
||||
void HPPA::onGonggashanRecord(const QString& posInfo, const QString& gpsData, double motorRotationSpeed, QString dataFolder)
|
||||
{
|
||||
//设置文件名
|
||||
//AppSettings::instance().setFrameRate(f);
|
||||
//AppSettings::instance().setIntegrationTime(e);
|
||||
//AppSettings::instance().setDataFolder(filePath);
|
||||
AppSettings::instance().setDataFolder(dataFolder);
|
||||
|
||||
QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
|
||||
//QString fi = AppSettings::instance().fileName() + "_" + dateStr;
|
||||
@ -1159,6 +1162,7 @@ void HPPA::onGonggashanRecord(QString posInfo)
|
||||
|
||||
//连接马达和光谱仪
|
||||
m_omc->connectMotor(false);
|
||||
m_omc->setScanSpeed(motorRotationSpeed);
|
||||
|
||||
if (!testImagerVality())
|
||||
{
|
||||
@ -1168,7 +1172,7 @@ void HPPA::onGonggashanRecord(QString posInfo)
|
||||
onStartRecordStep1();
|
||||
|
||||
//采集rgb图像
|
||||
|
||||
m_rgbCameraControlWindow->toggleTakePhoto();
|
||||
}
|
||||
|
||||
void HPPA::recordFromRobotArm(int fileCounter)
|
||||
|
||||
@ -457,9 +457,9 @@ public Q_SLOTS:
|
||||
void onStretchedImageReady(int fileNumber, const QString& filePath, QPixmap& pixmap);
|
||||
void onStretchProcessingError(int fileNumber, const QString& filePath, const QString& error);
|
||||
|
||||
void onGonggashanRecord(QString posInfo);
|
||||
void onGonggashanRecord(const QString& posInfo, const QString& gpsData, double motorRotationSpeed, QString dataFolder);
|
||||
void onGonggashanHyperAutoExposure();
|
||||
void onGonggashanFiberAutoExposureRecord(QString posInfo);
|
||||
void onGonggashanFiberAutoExposureRecord(QString posInfo, QString dataFolder);
|
||||
|
||||
protected:
|
||||
void closeEvent(QCloseEvent* event) override;
|
||||
|
||||
@ -2,7 +2,8 @@
|
||||
// Created by 73505 on 2023/5/7.
|
||||
//
|
||||
#include <algorithm>
|
||||
|
||||
#include <QFile>
|
||||
#include <QDir>
|
||||
#include "JinspFiberImager.h"
|
||||
|
||||
JinspFiberImager::JinspFiberImager(bool bIsUSBMode, std::string ucPortNumber, std::string strDeviceName)
|
||||
@ -132,7 +133,7 @@ void JinspFiberImager::recordDark(QString path)
|
||||
outfile.close();
|
||||
}
|
||||
|
||||
void JinspFiberImager::recordTarget(int recordTimes, QString path)
|
||||
void JinspFiberImager::recordTarget2csv(int recordTimes, QString path)
|
||||
{
|
||||
//获取设备信息
|
||||
DeviceAttribute attribute;
|
||||
@ -318,10 +319,8 @@ void JinspFiberImager::setCaptureInterval(int captureIntervalSeconds)
|
||||
m_captureIntervalMilliseconds = captureIntervalSeconds * 1000;
|
||||
}
|
||||
|
||||
void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo)
|
||||
void JinspFiberImager::OpenFiberImagerAndRecord(QString filePath)
|
||||
{
|
||||
m_posInfo = posInfo;
|
||||
|
||||
//连接光谱仪
|
||||
QString SN;
|
||||
QString pixelCount;
|
||||
@ -335,13 +334,25 @@ void JinspFiberImager::OpenFiberImagerAndRecord(QString posInfo)
|
||||
emit exposureCompleteSignal(m_iExposureTime);
|
||||
|
||||
//采集
|
||||
QFile qfData(filePath);
|
||||
bool bRes = qfData.open(QFile::WriteOnly | QIODevice::Append);
|
||||
if (!bRes)
|
||||
{
|
||||
printf("WriteData QFile open Failed");
|
||||
return;
|
||||
}
|
||||
|
||||
m_record = true;
|
||||
DataFrame data;
|
||||
while (m_record)
|
||||
{
|
||||
recordTarget(1, AppSettings::instance().FiberImagerDataFolder());
|
||||
singleShot(data);
|
||||
qfData.write((char*)&data, sizeof(DataFrame));
|
||||
qfData.flush();
|
||||
|
||||
QThread::msleep(m_captureIntervalMilliseconds);
|
||||
}
|
||||
qfData.close();
|
||||
|
||||
std::cout << "close.........." << std::endl;
|
||||
m_FiberSpectrometer->Close();
|
||||
|
||||
@ -61,10 +61,10 @@ private:
|
||||
|
||||
public slots:
|
||||
void recordDark(QString path);
|
||||
void recordTarget(int recordTimes, QString path);
|
||||
void recordTarget2csv(int recordTimes, QString path);
|
||||
void autoExpose();
|
||||
|
||||
void OpenFiberImagerAndRecord(QString posInfo);
|
||||
void OpenFiberImagerAndRecord(QString filePath);
|
||||
|
||||
signals:
|
||||
void sendExposureTimeSignal(int exposureTime);
|
||||
|
||||
@ -42,6 +42,11 @@ void OneMotorControl::onConnectMotor()
|
||||
connectMotor(true);
|
||||
}
|
||||
|
||||
void OneMotorControl::setScanSpeed(double speed)
|
||||
{
|
||||
ui.speed_lineEdit->setText(QString::number(speed));
|
||||
}
|
||||
|
||||
void OneMotorControl::connectMotor(bool isNotification)
|
||||
{
|
||||
if (getMotorsConnectionStatus())
|
||||
@ -225,16 +230,20 @@ void OneMotorControl::run()
|
||||
{
|
||||
if (m_coordinator)//当高光谱相机停止采集后,马达还未回到原点时,上次任务的m_coordinator还没有被销毁
|
||||
{
|
||||
onSequenceComplete(0);
|
||||
onSequenceComplete_motorBack2Origin(0);
|
||||
}
|
||||
|
||||
qRegisterMetaType<OneMotionCapturePathLine>("OneMotionCapturePathLine");
|
||||
m_coordinator = new OneMotionCaptureCoordinator(m_multiAxisController, m_Imager);
|
||||
m_coordinator->setObjectName("testOneMotionCaptureCoordinator");
|
||||
connect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine)));
|
||||
connect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion()));
|
||||
|
||||
connect(m_coordinator, SIGNAL(sequenceComplete(int)), this, SLOT(onSequenceComplete(int)));
|
||||
connect(this, &OneMotorControl::start, m_coordinator, &OneMotionCaptureCoordinator::startStepMotion);
|
||||
connect(this, &OneMotorControl::stopStepMotionSignal, m_coordinator, &OneMotionCaptureCoordinator::stopStepMotion);
|
||||
|
||||
connect(m_coordinator, &OneMotionCaptureCoordinator::sequenceCompleteSignal_hyperImagerStopRecord,
|
||||
this, &OneMotorControl::sequenceCompleteSignal_hyperImagerStopRecord);
|
||||
connect(m_coordinator, &OneMotionCaptureCoordinator::sequenceCompleteSignal_motorBack2Origin,
|
||||
this, &OneMotorControl::onSequenceComplete_motorBack2Origin);
|
||||
|
||||
OneMotionCapturePathLine tmp;
|
||||
tmp.speedRecord = ui.speed_lineEdit->text().toDouble();
|
||||
@ -271,18 +280,14 @@ void OneMotorControl::multiPosHyperAutoExposure()
|
||||
|
||||
void OneMotorControl::onSequenceComplete_gonggashan_autoexpose(int state)
|
||||
{
|
||||
emit sequenceComplete();
|
||||
emit multiPosAutoexposeSequenceCompleteSignal();
|
||||
|
||||
m_coordinator_gonggashan_autoexpose->deleteLater();
|
||||
}
|
||||
|
||||
void OneMotorControl::onSequenceComplete(int state)
|
||||
void OneMotorControl::onSequenceComplete_motorBack2Origin(int state)
|
||||
{
|
||||
emit sequenceComplete();
|
||||
|
||||
disconnect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine)));
|
||||
disconnect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion()));
|
||||
disconnect(m_coordinator, SIGNAL(sequenceComplete(int)), this, SLOT(onSequenceComplete(int)));
|
||||
emit sequenceComplete_motorBack2Origin();
|
||||
|
||||
// Use deleteLater() instead of delete: this slot may have been called directly
|
||||
// from OneMotionCaptureCoordinator's call stack (direct connection), so deleting
|
||||
|
||||
@ -35,6 +35,8 @@ public:
|
||||
|
||||
void connectMotor(bool isNotification);
|
||||
|
||||
void setScanSpeed(double speed);
|
||||
|
||||
public Q_SLOTS:
|
||||
void onConnectMotor();
|
||||
|
||||
@ -48,7 +50,7 @@ public Q_SLOTS:
|
||||
void onxMotorLeft();
|
||||
void onxMotorStop();
|
||||
|
||||
void onSequenceComplete(int state);
|
||||
void onSequenceComplete_motorBack2Origin(int state);
|
||||
void onSequenceComplete_gonggashan_autoexpose(int state);
|
||||
|
||||
signals:
|
||||
@ -65,11 +67,16 @@ signals:
|
||||
void stopStepMotionSignal();
|
||||
|
||||
void sequenceComplete();
|
||||
void sequenceComplete_motorBack2Origin();
|
||||
|
||||
void broadcastLocationSignal(std::vector<double>);
|
||||
|
||||
void hyperAutoExposureDoneSignal_gonggashan(double exposureTime, double frameRate);
|
||||
|
||||
void multiPosAutoexposeSequenceCompleteSignal();
|
||||
|
||||
void sequenceCompleteSignal_hyperImagerStopRecord(int);
|
||||
|
||||
private:
|
||||
Ui::OneMotorControl_UI ui;
|
||||
|
||||
@ -135,6 +142,7 @@ signals:
|
||||
|
||||
void broadcastLocationSignal(std::vector<double>);
|
||||
|
||||
|
||||
private:
|
||||
Ui::OneMotorControl_UI ui;
|
||||
|
||||
|
||||
100
HPPA/fodis.ui
100
HPPA/fodis.ui
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>857</width>
|
||||
<height>477</height>
|
||||
<width>438</width>
|
||||
<height>330</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -83,7 +83,7 @@ QPushButton:pressed
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<item row="1" column="1" colspan="2">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QPushButton" name="close_btn">
|
||||
@ -113,33 +113,7 @@ QPushButton:pressed
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>135</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>135</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="2" column="1" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
@ -184,7 +158,71 @@ QPushButton:pressed
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<item row="3" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>135</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLabel {
|
||||
color: rgb(255, 255, 255);
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>文件名</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="fileNameLineEdit">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLineEdit {
|
||||
background-color: #142D7F;
|
||||
color: #e6eeff;
|
||||
border: 1px solid #2f6bff;
|
||||
border-radius: 6px;
|
||||
padding: 4px 8px;
|
||||
min-width: 70px;
|
||||
min-height: 20px;
|
||||
font-size: 13px;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>test</string>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>135</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<spacer name="verticalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
||||
@ -64,6 +64,11 @@ rgbCameraWindow::~rgbCameraWindow()
|
||||
delete m_RgbCameraThread;
|
||||
}
|
||||
|
||||
void rgbCameraWindow::toggleTakePhoto()
|
||||
{
|
||||
emit ui.take_photo_btn->clicked();
|
||||
}
|
||||
|
||||
void rgbCameraWindow::setupCaptureCoordinator()
|
||||
{
|
||||
m_captureCoordinator = new RgbCameraCaptureCoordinator(m_RgbCamera, this);
|
||||
|
||||
@ -32,6 +32,8 @@ public Q_SLOTS:
|
||||
void onSelectDataFolder();
|
||||
void onFileNameChanged(const QString& text);
|
||||
|
||||
void toggleTakePhoto();
|
||||
|
||||
Q_SIGNALS:
|
||||
void PlotRgbImageSignal();
|
||||
void CamClosedSignal();
|
||||
|
||||
Reference in New Issue
Block a user