34 std::size_t windowSize) :
38 this->offsetIndex = 0;
39 this->currentValue = Eigen::Vector3f::Zero();
40 this->currentOffset = Eigen::Vector3f::Zero();
42 this->offsetWindowSize = offsetWindowSize;
82armarx::ParameterTypeList
93armarx::filters::MedianDerivativeFilterV3::median(std::vector<float>& values)
95 std::sort(values.begin(), values.end());
96 return values.size() % 2 == 0
97 ? (values.at(values.size() / 2 - 1) + values.at(values.size() / 2)) / 2
98 : values.at(values.size() / 2);
102armarx::filters::MedianDerivativeFilterV3::calculateMedian(
const std::vector<Eigen::Vector3f>&
data)
105 std::vector<float> values[3];
106 for (
int i = 0; i < 3; ++i)
108 values[i].reserve(
data.size());
110 for (
const Eigen::Vector3f& v :
data)
112 for (
int i = 0; i < 3; ++i)
114 values[i].push_back(v(i));
118 Eigen::Vector3f result;
119 for (
int i = 0; i < 3; ++i)
121 result(i) = median(values[i]);
129 const Ice::Current&
c)
135 Eigen::Vector3f inputValue = VariantPtr::dynamicCast(value)->get<
Vector3>()->
toEigen();
137 bool offsetValid =
false;
138 if (offsetData.size() <
unsigned(offsetWindowSize))
140 offsetData.push_back(inputValue);
144 offsetData[offsetIndex] = inputValue;
145 offsetIndex = (offsetIndex + 1) % offsetWindowSize;
146 this->currentOffset = calculateMedian(offsetData);
150 if (valueData.size() <
unsigned(windowFilterSize))
152 valueData.push_back(inputValue);
156 valueData[valueIndex] = inputValue;
157 valueIndex = (valueIndex + 1) % windowFilterSize;
164 this->currentValue = calculateMedian(valueData) - currentOffset;
void update(Ice::Long timestamp, const VariantBasePtr &value, const Ice::Current &c=Ice::emptyCurrent) override
Adds the given value to the data map, erases old values if maximum size was reached,...
TimeVariantBaseMap dataHistory
FramedDirection is a 3 dimensional direction vector with a reference frame.
The FramedPosition class.
The Variant class is described here: Variants.
#define ARMARX_WARNING_S
The logging level for unexpected behaviour, but not a serious problem.
const VariantTypeId FramedPosition
const VariantTypeId FramedDirection
const VariantTypeId Vector3
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceInternal::Handle< Vector3 > Vector3Ptr
IceInternal::Handle< FramedDirection > FramedDirectionPtr
IceInternal::Handle< Variant > VariantPtr
IceInternal::Handle< FramedPosition > FramedPositionPtr
::IceInternal::Handle<::armarx::VariantBase > VariantBasePtr
Eigen::Vector3f toEigen(const pcl::PointXYZ &pt)