NDEVR
API Documentation
OptechScanner.h
1#pragma once
2#define OPTECH_RT_API 0
3#if OPTECH_RT_API
4#include "Hardware/Headers/Scanner3D.h"
5#include "Hardware/Headers/GPSSensor.h"
6#include "Widgets/Headers/PhysicalCameraView.h"
7#include "Design/Headers/PolarPointFilter.h"
8#include "Base/Headers/Time.h"
9#include "Base/Headers/Pointer.hpp"
10#include "Base/Headers/Thread.h"
11#include "Base/Headers/INIInterface.h"
12#include <Rt_Types.h>
13#include <Rt_Integration.h>
14#include <QObject>
15#include <vector>
16class ScannerDriver;
17namespace NDEVR
18{
19 class FileRequest;
21 class Log;
22 class OptechMotor;
23 class Battery;
25 class OptechRangeSensor;
27 class SocketIOChannel;
28 class OptechBase;
29
35 class OptechScanner : public Scanner3D, public INIInterface
36 {
37 Q_OBJECT
38 public:
44 OptechScanner(Connection* connection, DesignObjectLookup* manager, Log* log, QObject* parent = nullptr);
45 virtual ~OptechScanner();
46 virtual TimeSpan updateInterval() const override;
47
48 virtual TimeSpan getScanTime(ScanMode scan, fltp04 speed, Vector<2, Angle> angle_of_separation) const override;
49 virtual String scannerType() const override;
50 virtual void standardUpdate();
51 virtual Motor* headMotor(uint01 axis) const override;
52 virtual void startScan(ScanMode scan_mode, fltp04 speed, Vector<2, Angle> angle_of_separation, bool continuous) override;
53 virtual void stopScan() override;
54 virtual void pauseScan() override;
55 virtual void resumeScan() override;
56 virtual void createScanner() override;
57 virtual bool isValid() const override;
58 virtual bool canDeploy() const override;
59 void updateCamera();
60 virtual void recordPoint(bool record_to_cloud = true, bool record_to_mesh = true) override;
61 Vector<3, Angle> headAngle() const override;
62
63 virtual void orientHead(const Vector<3, Angle>& head_orientation) override;
64 virtual bool supportsContinuousScan() const override { return false; }
65 virtual bool executeManualCommand(const String& command) override;
66 virtual bool scanModeSupported(ScanMode scan_mode) const override;
67 virtual Bounds<2, Angle> scanBounds() const;
68 void requestDisconnect(bool disconnect) { m_request_disconnect = disconnect; }
69 virtual String defaultStationName() const override;
70 virtual void setScannerState(ScannerState scanner_state) override;
71 virtual PositionSensor* positionSensor() const override;
72 virtual RangeSensor* rangeSensor() const override;
73 ScannerState scannerState() const override;
74
75 virtual Connection* connection() const override;
76 bool requestRemoteForwarding() override;
77 [[nodiscard]] virtual Buffer<Battery*> batteries() const;
78 [[nodiscard]] virtual Buffer<TemperatureSensor*> temperatureSensors() const;
79 [[nodiscard]] virtual OrientationSensor* orientationSensor() const;
80
81
82 protected:
83 void updateModel();
84 void setSerialNo(int serial);
85 void recordPoint(const PolarScanRecord& record, bool record_to_cloud = true, bool record_to_mesh = true) override;
86 virtual FileRequest scanModelFile() const override;
87 virtual Matrix<fltp08> scanModelFileTransform() const;
88 virtual void update() override;
89 void parkDevice() override;
90 Matrix<fltp08> laserTransform(const Vector<3, Angle>& head_angle) const override;
91 virtual Matrix<fltp08> scanTransform() const;
92 virtual INIFactory getINI() override;
93 void disconnect();
94
95
96 protected:
97 bool updateState();
98 int ProcessPoints(std::vector<Optech::RtLidar::LidarPoint>& lidarPointsArray);
100 struct BinaryFrameData
101 {
102 uint02 measurement_data_points;
103 TypeAngle<fltp08> rotation_speed;
104 TypeAngle<fltp08> resolution;
105 uint01 time_status;
106 Time frame_time;
107 };
108 Optech::RtLidar::ScannerType m_scanner_type;
109 Optech::RtLidar::SelectedReturn m_selected_return;
110 Optech::RtLidar::SystemState m_optech_scanner_state;
111 Optech::RtLidar::ConnectionState m_connection_state;
112
113 Time m_start_time;
114
115 Time m_last_standard_refresh;
116 bool m_is_valid;
117 bool m_responses_on;
118 Angle m_current_angle;
119 PolarPointFilter m_filter;
120 Vector<3, Angle> m_beam_offset;
121 Vertex<3, fltp08> m_last_position;
122 Vertex<3, fltp08> m_velocity;
123 Bounds<1, Angle> m_angle_bounds;
124 mutable Time m_last_scan_update_time;
125 mutable Time m_last_prop_update_time;
126 mutable String m_station_name;
127 bool m_is_dynamic;
128 bool m_use_filter;
129 bool m_record_points;
130 bool m_motion_only;
131 bool m_has_reference;
132 bool m_is_initializing_scan;
133 Bounds<1, Angle> m_current_sweep_bounds;
134 String m_connection_string;
135 Motor* m_scope = nullptr;
136 Motor* m_head = nullptr;
137 Connection* m_connection = nullptr;
138 OptechScannerPositionSensor* m_position_sensor = nullptr;
139 RangeSensor* m_range_sensor = nullptr;
140 SurveyParameters m_survey_parameters;
141 TemperatureSensor* m_booster_temp = nullptr;
142 TemperatureSensor* m_prepump_temp = nullptr;
143 TemperatureSensor* m_seed_temp = nullptr;
144 TemperatureSensor* m_case_temp = nullptr;
145 Battery* m_battery = nullptr;
146
147 GPSSensor* m_gps_sensor;
148 OrientationSensor* m_orientation_sensor = nullptr;
149 };
150}
151#endif
A device which has an associated voltage or percent that changes.
Definition Battery.h:106
A core class where all Design Objects including models, materials, and geometries are stored.
Contains methods for easily reading and writing to an INI file including efficient casting,...
Serves as the primary program interface for processes to report issues and allows any number of LogSt...
Definition Log.h:50
A Connection subclass that manages the network connection to an Optech scanner.
A PositionSensor implementation for Optech scanners that tracks instrument position using station/dep...
A specific channel of communication within the SocketIO framework.
The primary namespace for the NDEVR SDK.
uint16_t uint02
-Defines an alias representing a 2 byte, unsigned integer -Can represent exact integer values 0 throu...
uint8_t uint01
-Defines an alias representing a 1 byte, unsigned integer -Can represent exact integer values 0 throu...
A FileRequest bundles format data as well as a particular file.
Definition FileFormat.h:101