31 using namespace filters;
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;
48 std::unique_lock lock(historyMutex);
50 if (dataHistory.size() == 0)
55 VariantPtr var = VariantPtr::dynamicCast(dataHistory.begin()->second);
82 armarx::ParameterTypeList
93 armarx::filters::MedianDerivativeFilterV3::median(std::vector<float>&
values)
96 return values.size() % 2 == 0
102 armarx::filters::MedianDerivativeFilterV3::calculateMedian(
const std::vector<Eigen::Vector3f>&
data)
105 std::vector<float>
values[3];
106 for (
int i = 0; i < 3; ++i)
110 for (
const Eigen::Vector3f&
v :
data)
112 for (
int i = 0; i < 3; ++i)
118 Eigen::Vector3f result;
119 for (
int i = 0; i < 3; ++i)
121 result(i) = median(
values[i]);
129 const Ice::Current&
c)
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;