35 this->windowFilterSize = windowSize;
36 this->dataIndex = -windowSize;
37 this->offset = Eigen::Vector3f::Zero();
38 this->currentValue = Eigen::Vector3f::Zero();
78armarx::ParameterTypeList
89armarx::filters::PoseMedianOffsetFilter::median(std::vector<float>& values)
91 std::sort(values.begin(), values.end());
92 return values.size() % 2 == 0
93 ? (values.at(values.size() / 2 - 1) + values.at(values.size() / 2)) / 2
94 : values.at(values.size() / 2);
98armarx::filters::PoseMedianOffsetFilter::calculateMedian()
100 Eigen::Vector3f result;
101 for (
int i = 0; i < 3; ++i)
103 std::vector<float> values;
104 values.reserve(
data.size());
106 for (
const Eigen::Vector3f& v :
data)
108 values.push_back(v(i));
110 result(i) = median(values);
118 const Ice::Current&
c)
124 Eigen::Vector3f currentValue = VariantPtr::dynamicCast(value)->get<
Vector3>()->
toEigen();
127 data.push_back(currentValue);
128 this->currentValue = Eigen::Vector3f::Zero();
132 offset = calculateMedian();
137 data.at(dataIndex) = currentValue;
138 dataIndex = (dataIndex + 1) % windowFilterSize;
139 this->currentValue = calculateMedian() - offset;
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)