从 tf2_ros::Buffer 中检索内插变换
Retrieve interpolated transform from tf2_ros::Buffer
任何人都可以确认以下 returns 从 query_stamp 处的 tf2_ros_buffer_ 进行的 插值 转换吗?
auto t = tf2_ros_buffer_.lookupTransform(frame_a, frame_b, query_stamp);
更具体地说,这是笛卡尔插值吗?
是的,但不完全是 lookupTransform
的工作方式(作为 tf2) is that it performs spherical linear interpolation (SLERP) between the transform right before and the transform right after the query time (see the original TF paper 的一部分)。这是从计算机图形世界中提取的一个技巧,可促进恒定 angular 速度模型。
slerp 的等式如下,其中 q_a
和 q_b
是表示帧的四元数,q
是输出四元数,t
是时间比, 并且 theta
是 q_a
和 q_b
之间的最短路径角的一半
虽然结果通常以笛卡尔形式使用。
您可以查看源代码here (look lookupTransform
, transformTF2ToMsg
, and the core TF2 interpolation code here)。
任何人都可以确认以下 returns 从 query_stamp 处的 tf2_ros_buffer_ 进行的 插值 转换吗?
auto t = tf2_ros_buffer_.lookupTransform(frame_a, frame_b, query_stamp);
更具体地说,这是笛卡尔插值吗?
是的,但不完全是 lookupTransform
的工作方式(作为 tf2) is that it performs spherical linear interpolation (SLERP) between the transform right before and the transform right after the query time (see the original TF paper 的一部分)。这是从计算机图形世界中提取的一个技巧,可促进恒定 angular 速度模型。
slerp 的等式如下,其中 q_a
和 q_b
是表示帧的四元数,q
是输出四元数,t
是时间比, 并且 theta
是 q_a
和 q_b
虽然结果通常以笛卡尔形式使用。
您可以查看源代码here (look lookupTransform
, transformTF2ToMsg
, and the core TF2 interpolation code here)。