Giter VIP home page Giter VIP logo

pike's Introduction

pike

Подготовка

Для сборки используются:

  1. CMake
  2. Visual Studio 2015
  3. Qt 5.12 с набором msvc2015_64, опционально Qt Creator/Qt Designer для разработки UI

Сборка

Компиляция для Windows идёт под 64-битную архитектуру, п.ч. Qt поставляет для VS 2015 только 64-битный набор (тулчейн) msvc2015_64. Сама Qt рекомендует собирать 32-bit в VS 2015 с использованием набора msvc2017.

md build
cd build
cmake -G "Visual Studio 14 2015" -A x64 -D Qt5_DIR=${VS_QT}/lib/cmake/Qt5 ..
cmake --build . --target ALL_BUILD --config Release

где ${VS_QT} - путь к тулчейну QT (например, C:/Qt/Qt5.12.3/5.12.3/msvc2015_64).

Сборка с тестами

cmake -G "Visual Studio 14 2015" -A x64 -D Qt5_DIR=${VS_QT}/lib/cmake/Qt5 -D BUILD_TESTING=ON ..
cmake --build . --target ALL_BUILD --config Release
ctest

Дистрибутив

Дистрибутив должен содержать следующие файлы:

  • e440.bio (или другой биос для используемой АЦП) (из _ext/lcomp/bios)
  • inclinometer.tbl (из _misc/deploy)
  • lcomp64.dll (из _ext/lcomp/lib)
  • pike.json (из _misc/deploy)
  • pike-qwidgets.exe
  • Qt5Core.dll
  • Qt5Gui.dll
  • Qt5Network.dll
  • Qt5Widgets.dll

Для сбора всех необходимых файлов Qt рекомендуется использовать windeployqt.exe (для примера см. Korsar3RPi). Также в системе должен быть установлен VCRedist 2015 x64.

Архитектура ПО

Термины:

  • Сечение - измерение глубины в одной плоскости и результат такого измерения.

Проект разбит на библиотеки (по логическим уровням):

  • dc - устройство сбора данных (Л-Кард и DummyDaq).
  • devices - устройства, входящие в "Пику" (двигатели, одометр, инклинометр, глубинометр и "концевые" датчики).
  • logic - логика работы/операции (определение пройденного расстояния, положения в пространстве и текущих показаний глубины и "концевых" датчиков, управление с помощью джойстика через UDP, измерение глубины и конфигурация).
  • modules - MVP-модули окон приложения (main). Частично логика перемещения и вращения измерительного блока.
  • pike-qwidgets - GUI-приложение на основе QtWidgets.

Все устройства и операции "развязаны" через интерфейсы (абстрактные классы). Разделение логики и GUI через MVP.

Реализация devices

  • Depthometer - Датчик расстояния/глубины (FASTUS CD22). Подключение через COM-порт.
  • Ender - "Концевой" датчик. Подключение через входную линию ТТЛ.
  • Inclinometer - Инклинометр. Подключение через АЦП - с датчика приходят два PWM-сигнала. Для упрощения считаем по ним СКЗ и используем таблицы пересчёта (вместо расчёта коэффициента заполнения).
  • Mover - Перемещение вперёд-назад с помощью коллекторного двигателя. Подключение через выходные линии ТТЛ - PWM и Dir. Ожидаемая частота импульсов PWM 10 кГц, но мы используем режим максимальной скорости (единичный коэфф. заполнения).
  • Odometer - Одометр/курвиметр/датчик пройденного расстояния (ЛИР-119). Подключение через АЦП - с датчика приходят два strobe-сигнала.
  • Rotator - Вращение измерительного блока с помощью шагового двигателя (TI DRV8825). Подключение через выходные линии ТТЛ - Enable, Step, Dir и M0.

Реализация logic

  • Conf - Конфигурация ПО через файл pike.json.
  • OngoingReader - Режим измерения пройденного расстояния, положения в пространстве, состояния "концевых" датчиков и глубины. Измерение идёт постоянно, кроме "концевых" датчиков и глубины, которые "приостанавливаются" на время измерения сечения (Slicer).
  • Pike - "Пика". По идее сюда нужно перенести управление перемещением, вращением и измерением сечения из MainPresenterImpl.
  • RemoteServer - Режим приёма событий от джойстка, подключенного на удалённом копьютере, через UDP.
  • Slicer - Режим измерения сечения - поворот измерительного блока в крайнее левое положение, измерение положения в пространстве и циклическое измерение глубины (и инкремент угла) до крайнего правого положения.

TODO

  • камеры
  • сохранение видео и фото
  • джойстик (через pike-remote)
  • сохранение "сечения" (SliceMsrMapper)
  • логирование?
  • перед запуском на устройстве:
    • "активное" состояние "концевого" датчика - 0 или 1? (нужен тест)
    • одометр: вперёд/назад - запаздывание фронтов (нужен тест)
    • инклинометр: неполная блок-схема (СНН)
    • инклинометр: СКЗ? (нужен тест)
    • инклинометр: файл с таблицей пересчёта СКЗ в угол

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.