AbstractMotionModel.cpp
Go to the documentation of this file.
1
3
5
8{
9 std::unique_lock lock(motionPredictionLock);
10
11 this->robotStateProxy = robotStateProxy;
12 poseAtLastLocalization = new armarx::LinkedPose();
13 predictedPoseAtStartOfCurrentLocalization = nullptr;
14 globalRobotPoseAtLastLocalization = nullptr;
15 uncertaintyAtLastLocalization = nullptr;
16 uncertaintyAtStartOfCurrentLocalization = nullptr;
17 timeOfLastLocalizationStart = new armarx::TimestampVariant(IceUtil::Time::now());
18 timeOfLastSuccessfulLocalization = new armarx::TimestampVariant(IceUtil::Time::now());
19}
20
21armarx::LinkedPoseBasePtr
23{
24 std::unique_lock lock(motionPredictionLock);
25
27 return ret;
28}
29
30memoryx::MultivariateNormalDistributionBasePtr
32{
33 std::unique_lock lock(motionPredictionLock);
34
35 MultivariateNormalDistributionBasePtr ret = getUncertaintyInternal();
36 return ret;
37}
38
39void
41 const armarx::LinkedPoseBasePtr& poseAtLastLocalization,
42 const armarx::PoseBasePtr& globalRobotPoseAtLastLocalization,
43 const memoryx::MultivariateNormalDistributionBasePtr& uncertaintyAtLastLocalization,
44 const Ice::Current&)
45{
46 std::unique_lock lock(motionPredictionLock);
47 this->poseAtLastLocalization = poseAtLastLocalization;
48 timeOfLastSuccessfulLocalization =
49 armarx::TimestampVariantPtr::dynamicCast(timeOfLastLocalizationStart->clone());
50
51 if (globalRobotPoseAtLastLocalization)
52 {
53 this->globalRobotPoseAtLastLocalization = globalRobotPoseAtLastLocalization;
54 }
55
56 if (uncertaintyAtLastLocalization)
57 {
58 this->uncertaintyAtLastLocalization = uncertaintyAtLastLocalization;
59 }
60}
61
62void
64{
65 std::unique_lock lock(motionPredictionLock);
66
67 predictedPoseAtStartOfCurrentLocalization = getPredictedPoseInternal();
68 uncertaintyAtStartOfCurrentLocalization = getUncertaintyInternal();
69 timeOfLastLocalizationStart = new armarx::TimestampVariant(IceUtil::Time::now());
70}
71
72armarx::LinkedPoseBasePtr
74{
75 return predictedPoseAtStartOfCurrentLocalization;
76}
77
78memoryx::MultivariateNormalDistributionBasePtr
80{
81 return uncertaintyAtStartOfCurrentLocalization;
82}
83
84std::string
89
92{
93 if (motionModelName.compare("Static") == 0)
94 {
96 }
97 else if (motionModelName.compare("RobotHand") == 0)
98 {
100 }
101 else if (motionModelName.compare("AttachedToOtherObject") == 0)
102 {
104 }
105 else if (motionModelName.compare("KBM") == 0)
106 {
107 return eMotionModelKBM;
108 }
109 else if (motionModelName.empty())
110 {
111 ARMARX_WARNING_S << "Motion model name is empty!";
113 }
114 else
115 {
116 ARMARX_WARNING_S << "Unknown motion model: " << motionModelName;
118 }
119}
120
121armarx::LinkedPoseBasePtr
123{
124 std::unique_lock lock(motionPredictionLock);
125
126 armarx::LinkedPoseBasePtr ret = poseAtLastLocalization;
127 return ret;
128}
129
The LinkedPose class.
Definition LinkedPose.h:61
Implements a Variant type for timestamps.
armarx::LinkedPoseBasePtr getPredictedPoseAtStartOfCurrentLocalization(const Ice::Current &=Ice::emptyCurrent) override
std::recursive_mutex motionPredictionLock
armarx::LinkedPoseBasePtr getPredictedPose(const Ice::Current &=Ice::emptyCurrent) override
MultivariateNormalDistributionBasePtr getUncertainty(const Ice::Current &=Ice::emptyCurrent) override
armarx::LinkedPoseBasePtr getPoseAtLastLocalisation(const Ice::Current &=Ice::emptyCurrent) override
virtual std::string getMotionModelName()
virtual armarx::LinkedPosePtr getPredictedPoseInternal()=0
MultivariateNormalDistributionBasePtr getUncertaintyAtStartOfCurrentLocalization(const Ice::Current &=Ice::emptyCurrent) override
virtual MultivariateNormalDistributionBasePtr getUncertaintyInternal()=0
void savePredictedPoseAtStartOfCurrentLocalization(const Ice::Current &=Ice::emptyCurrent) override
static EMotionModelType getMotionModelTypeByName(std::string motionModelName)
void setPoseAtLastLocalisation(const armarx::LinkedPoseBasePtr &poseAtLastLocalization, const armarx::PoseBasePtr &globalRobotPoseAtLastLocalization, const MultivariateNormalDistributionBasePtr &uncertaintyAtLastLocalization, const Ice::Current &=Ice::emptyCurrent) override
#define ARMARX_WARNING_S
The logging level for unexpected behaviour, but not a serious problem.
Definition Logging.h:213
IceInternal::Handle< LinkedPose > LinkedPosePtr
Definition LinkedPose.h:52
::IceInternal::ProxyHandle<::IceProxy::armarx::RobotStateComponentInterface > RobotStateComponentInterfacePrx