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"
13#include <Rt_Integration.h>
25 class OptechRangeSensor;
35 class OptechScanner :
public Scanner3D,
public INIInterface
44 OptechScanner(Connection* connection, DesignObjectLookup* manager, Log* log, QObject* parent =
nullptr);
45 virtual ~OptechScanner();
46 virtual TimeSpan updateInterval()
const override;
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;
60 virtual void recordPoint(
bool record_to_cloud =
true,
bool record_to_mesh =
true)
override;
61 Vector<3, Angle> headAngle()
const override;
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;
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;
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;
98 int ProcessPoints(std::vector<Optech::RtLidar::LidarPoint>& lidarPointsArray);
100 struct BinaryFrameData
102 uint02 measurement_data_points;
103 TypeAngle<fltp08> rotation_speed;
104 TypeAngle<fltp08> resolution;
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;
115 Time m_last_standard_refresh;
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;
129 bool m_record_points;
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;
147 GPSSensor* m_gps_sensor;
148 OrientationSensor* m_orientation_sensor =
nullptr;
A device which has an associated voltage or percent that changes.
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...
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.