Apollo 11.0
自动驾驶开放平台
apollo::perception::onboard::TransformCache类 参考

#include <transform_wrapper.h>

apollo::perception::onboard::TransformCache 的协作图:

Public 成员函数

 TransformCache ()=default
 
 ~TransformCache ()=default
 
void AddTransform (const StampedTransform &transform)
 
bool QueryTransform (double timestamp, StampedTransform *transform, double max_duration=0.0)
 
void SetCacheDuration (double duration)
 

Protected 属性

std::deque< StampedTransform > transforms_
 
double cache_duration_ = 1.0
 

详细描述

在文件 transform_wrapper.h 第 48 行定义.

构造及析构函数说明

◆ TransformCache()

apollo::perception::onboard::TransformCache::TransformCache ( )
default

◆ ~TransformCache()

apollo::perception::onboard::TransformCache::~TransformCache ( )
default

成员函数说明

◆ AddTransform()

void apollo::perception::onboard::TransformCache::AddTransform ( const StampedTransform &  transform)

在文件 transform_wrapper.cc 第 42 行定义.

42 {
43 if (transforms_.empty()) {
44 transforms_.push_back(transform);
45 return;
46 }
47 double delt = transform.timestamp - transforms_.back().timestamp;
48 if (delt < 0.0) {
49 AINFO << "ERROR: add earlier transform to transform cache";
50 return;
51 }
52
53 do {
54 delt = transform.timestamp - transforms_.front().timestamp;
55 if (delt < cache_duration_) {
56 break;
57 }
58 transforms_.pop_front();
59 } while (!transforms_.empty());
60
61 transforms_.push_back(transform);
62}
std::deque< StampedTransform > transforms_
#define AINFO
Definition log.h:42

◆ QueryTransform()

bool apollo::perception::onboard::TransformCache::QueryTransform ( double  timestamp,
StampedTransform *  transform,
double  max_duration = 0.0 
)

在文件 transform_wrapper.cc 第 93 行定义.

95 {
96 if (transforms_.empty() || transform == nullptr) {
97 return false;
98 }
99
100 double delt = timestamp - transforms_.back().timestamp;
101 if (delt > max_duration) {
102 AINFO << "ERROR: query timestamp is " << delt
103 << "s later than cached timestamp";
104 return false;
105 } else if (delt < 0.0) {
106 AINFO << "ERROR: query earlier timestamp than transform cache";
107 return false;
108 }
109
110 int size = static_cast<int>(transforms_.size());
111 if (size == 1) {
112 (*transform) = transforms_.back();
113 transform->timestamp = timestamp;
114 AINFO << "use transform at " << transforms_.back().timestamp << " for "
115 << timestamp;
116 } else {
117 double ratio =
118 (timestamp - transforms_[size - 2].timestamp) /
119 (transforms_[size - 1].timestamp - transforms_[size - 2].timestamp);
120
121 transform->rotation = Slerp(transforms_[size - 2].rotation, ratio,
122 transforms_[size - 1].rotation);
123
124 transform->translation.x() =
125 transforms_[size - 2].translation.x() * (1 - ratio) +
126 transforms_[size - 1].translation.x() * ratio;
127 transform->translation.y() =
128 transforms_[size - 2].translation.y() * (1 - ratio) +
129 transforms_[size - 1].translation.y() * ratio;
130 transform->translation.z() =
131 transforms_[size - 2].translation.z() * (1 - ratio) +
132 transforms_[size - 1].translation.z() * ratio;
133
134 AINFO << "estimate pose at " << timestamp << " from poses at "
135 << transforms_[size - 2].timestamp << " and "
136 << transforms_[size - 1].timestamp;
137 }
138 return true;
139}
Eigen::Quaterniond Slerp(const Eigen::Quaterniond &source, const double &t, const Eigen::Quaterniond &other)

◆ SetCacheDuration()

void apollo::perception::onboard::TransformCache::SetCacheDuration ( double  duration)
inline

在文件 transform_wrapper.h 第 57 行定义.

57{ cache_duration_ = duration; }

类成员变量说明

◆ cache_duration_

double apollo::perception::onboard::TransformCache::cache_duration_ = 1.0
protected

在文件 transform_wrapper.h 第 62 行定义.

◆ transforms_

std::deque<StampedTransform> apollo::perception::onboard::TransformCache::transforms_
protected

在文件 transform_wrapper.h 第 61 行定义.


该类的文档由以下文件生成: