AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
EncoderOutput.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or having been
9advised so by Algoryx Simulation AB for a time limited evaluation, or having purchased a
10valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16#pragma once
19
20#include <agx/Referenced.h>
21
22namespace agxSensor
23{
25
48 {
49 public:
50 enum Field : int32_t
51 {
57 NUM_FIELDS
58 };
59
60 using FieldVector = std::vector<Field>;
61
62 public:
67 static size_t sizeOf( Field field );
68
73 static const char* getFieldName( Field field );
74
75 public:
79 EncoderOutput() = default;
80
84 template<Field... field>
85 void build();
86
93
98 virtual size_t getElementSize() const override;
99
103 virtual const BinaryOutputBuffer& getData() override;
104
112 virtual bool hasUnreadData( bool markAsRead = true ) override;
113
117 bool contains(Field field) const;
118
125 size_t getOffset(Field field) const;
126
130 const FieldVector& getFields() const;
131
137
139
140 public:
141 virtual ~EncoderOutput() = default;
142
143 virtual void result( const CallbackData& data ) override;
144 virtual void cleanup() override;
145
147
149
150 private:
151 FieldVector m_fields{};
152 size_t m_elementSize{ 0u };
153 bool m_hasUnreadData{ false };
154 BinaryOutputBuffer m_output{};
155 };
156
157 template<EncoderOutput::Field... field>
159 {
160 m_fields.clear();
161 m_elementSize = 0u;
162 ( this->add( field ), ... );
163 }
164
166
167#pragma pack(push, 1)
168 struct PositionSpeedValue
169 {
170 agx::Real position, speed;
171
172 inline PositionSpeedValue() {}
173 inline PositionSpeedValue(const agx::Vec2& v)
174 : position(v.x())
175 , speed(v.y())
176 {
177 }
178 inline PositionSpeedValue(const PositionSpeedValue&) = default;
179 inline PositionSpeedValue& operator=(const PositionSpeedValue&) = default;
180
181 inline agx::Vec2 asVec2() const { return agx::Vec2(position, speed); }
182 };
183#pragma pack(pop)
184
185 class AGXSENSOR_EXPORT EncoderOutputPosition : public EncoderOutput
186 {
187 public:
188 EncoderOutputPosition();
189 };
190
191 class AGXSENSOR_EXPORT EncoderOutputSpeed : public EncoderOutput
192 {
193 public:
194 EncoderOutputSpeed();
195 };
196
197 class AGXSENSOR_EXPORT EncoderOutputPositionSpeed : public EncoderOutput
198 {
199 public:
200 EncoderOutputPositionSpeed();
201 };
202
204}
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGXSTREAM_DECLARE_SERIALIZABLE(T)
Use this in a Serializable class to add the required methods Important: Use full namespace in the dec...
Definition: Serializable.h:207
#define AGXSENSOR_EXPORT
Buffer used for sensor output of a wide range of output element types.
Encoder sensor output data where EncoderOutput::Field is used to define the data available.
Definition: EncoderOutput.h:48
virtual bool hasUnreadData(bool markAsRead=true) override
EncoderOutput()=default
Default constructor.
EncoderOutput & add(Field field)
Add new field.
@ POSITION_F64
1x 64-bit floating point encoder output position.
Definition: EncoderOutput.h:53
@ SPEED_F64
1x 64-bit floating point encoder output position change speed.
Definition: EncoderOutput.h:55
std::vector< Field > FieldVector
Definition: EncoderOutput.h:60
virtual size_t getElementSize() const override
"Element size" is the summed data size of the currently added fields.
static size_t sizeOf(Field field)
static const char * getFieldName(Field field)
void build()
Add one or more fields, build a matching data structure.
const FieldVector & getFields() const
size_t getOffset(Field field) const
Offset in bytes of the first entry of field in the pack of fields.
virtual const BinaryOutputBuffer & getData() override
bool contains(Field field) const
agx::Vec2 computeCovariance() const
Computes and returns the encoder signal value covariance.
Common interface for sensor output data.
Definition: SensorOutput.h:27
System node is a separate step/operation in an execution tree representing a sensor (or such) in a se...
Definition: SystemNode.h:44
#define DOXYGEN_END_INTERNAL_BLOCK()
Definition: macros.h:89
#define DOXYGEN_START_INTERNAL_BLOCK()
Definition: macros.h:88
The agxSensor namespace contains components to model real-time sensors connected to the physics of AG...
Vec2T< Real > Vec2
The object holding 2 dimensional vectors and providing basic arithmetic.
Definition: Vec2.h:35
double Real
Definition: Real.h:41