RMVL  2.5.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到

线程安全的坐标变换缓存 更多...

#include <rmvl/lpss/transform.hpp>

rm::lpss::tf::Buffer 的协作图:

Public 成员函数

 Buffer (std::chrono::nanoseconds cache_duration=std::chrono::seconds(10))
 构造坐标变换缓存,默认保留最近 10 秒的动态历史
 Buffer (Buffer &&) noexcept
Bufferoperator= (Buffer &&) noexcept
 ~Buffer ()
 Buffer (const Buffer &)=delete
Bufferoperator= (const Buffer &)=delete
Status set (const msg::TransformStamped &transform)
 插入一条坐标变换
Status set (const msg::TF &transforms)
 批量插入动态坐标变换
Status setStatic (const msg::TransformStamped &transform)
 插入静态坐标变换
Status setStatic (const msg::TF &transforms)
 批量插入静态坐标变换
LookupResult lookup (std::string_view target_frame, std::string_view source_frame, const msg::Time &time={}) const
 查询 source 坐标系到 target 坐标系的变换
bool can (std::string_view target_frame, std::string_view source_frame, const msg::Time &time={}) const
 判断指定时间是否可完成坐标变换
void setCacheDuration (std::chrono::nanoseconds cache_duration) noexcept
 设置动态历史缓存时长;负值按零处理,并立即裁剪现有历史
std::chrono::nanoseconds cacheDuration () const noexcept
 获取动态历史缓存时长
std::size_t size () const noexcept
 获取当前坐标树边数
void clear () noexcept
 清空全部静态和动态变换

详细描述

线程安全的坐标变换缓存

  • 坐标关系组成单父节点、无环的森林,其中,互不连通的树允许分别维护;
  • 静态边保存单个变换,查询时不受时间限制,动态边按时间保存历史;
  • 查询时间为零时使用整条路径上所有动态边的最新公共时间,全静态路径返回零时间;
  • 动态变换使用平移线性插值和单位四元数 SLERP,不允许向缓存区间外外推。

构造及析构函数说明

◆ Buffer() [1/3]

rm::lpss::tf::Buffer::Buffer ( std::chrono::nanoseconds cache_duration = std::chrono::seconds(10))
explicit

构造坐标变换缓存,默认保留最近 10 秒的动态历史

◆ Buffer() [2/3]

rm::lpss::tf::Buffer::Buffer ( Buffer && )
noexcept
函数调用图:

◆ ~Buffer()

rm::lpss::tf::Buffer::~Buffer ( )
函数调用图:

◆ Buffer() [3/3]

rm::lpss::tf::Buffer::Buffer ( const Buffer & )
delete
函数调用图:

成员函数说明

◆ cacheDuration()

std::chrono::nanoseconds rm::lpss::tf::Buffer::cacheDuration ( ) const
noexcept

获取动态历史缓存时长

◆ can()

bool rm::lpss::tf::Buffer::can ( std::string_view target_frame,
std::string_view source_frame,
const msg::Time & time = {} ) const

判断指定时间是否可完成坐标变换

◆ clear()

void rm::lpss::tf::Buffer::clear ( )
noexcept

清空全部静态和动态变换

函数调用图:

◆ lookup()

LookupResult rm::lpss::tf::Buffer::lookup ( std::string_view target_frame,
std::string_view source_frame,
const msg::Time & time = {} ) const

查询 source 坐标系到 target 坐标系的变换

参数
[in]target_frame目标坐标系
[in]source_frame源坐标系
[in]time查询时间;零时间表示最新公共时间
返回
查询结果,成功时得到 \(T_{target,source}\)
函数调用图:

◆ operator=() [1/2]

Buffer & rm::lpss::tf::Buffer::operator= ( Buffer && )
noexcept
函数调用图:

◆ operator=() [2/2]

Buffer & rm::lpss::tf::Buffer::operator= ( const Buffer & )
delete
函数调用图:

◆ set() [1/2]

Status rm::lpss::tf::Buffer::set ( const msg::TF & transforms)

批量插入动态坐标变换

返回
首个失败状态;所有变换都会尝试插入
函数调用图:

◆ set() [2/2]

Status rm::lpss::tf::Buffer::set ( const msg::TransformStamped & transform)

插入一条坐标变换

参数
[in]transform父子坐标变换,方向为 \(T_{parent,child}\)
返回
插入状态;同一时间的动态样本会被新值替换
函数调用图:

◆ setCacheDuration()

void rm::lpss::tf::Buffer::setCacheDuration ( std::chrono::nanoseconds cache_duration)
noexcept

设置动态历史缓存时长;负值按零处理,并立即裁剪现有历史

◆ setStatic() [1/2]

Status rm::lpss::tf::Buffer::setStatic ( const msg::TF & transforms)

批量插入静态坐标变换

返回
首个失败状态;所有变换都会尝试插入
函数调用图:

◆ setStatic() [2/2]

Status rm::lpss::tf::Buffer::setStatic ( const msg::TransformStamped & transform)

插入静态坐标变换

函数调用图:

◆ size()

std::size_t rm::lpss::tf::Buffer::size ( ) const
noexcept

获取当前坐标树边数

函数调用图: