插值函数原型链接如下:
ros::tf中的插值函数
验证代码如下:
#include <ros/ros.h>
#include <geometry_msgs/PointStamped.h>
#include <tf/transform_listener.h>
int main(int argc, char** argv){
while(1)
{
float ratio;
tf::Vector3 data_begin(0,0,0);
tf::Vector3 data_end(2,3,4);
tf::Vector3 data_lerp;
ROS_INFO("data_begin.x = %f data_begin.y = %f data_begin.z = %f",data_begin.x(),data_begin.y(),data_begin.z());
ROS_INFO("data_end.x = %f data_end.y = %f data_end.z = %f",data_end.x(),data_end.y(),data_end.z());
ratio = 0;
data_lerp = data_begin.lerp(data_end,ratio);
ROS_INFO("ratio = %f ",ratio);
ROS_INFO("data_lerp.x = %f data_lerp.y = %f data_lerp.z = %f",data_lerp.x(),data_lerp.y(),data_lerp.z());
ratio = 0.3;
data_lerp = data_begin.lerp(data_end,ratio);
ROS_INFO("ratio = %f ",ratio);
ROS_INFO("data_lerp.x = %f data_lerp.y = %f data_lerp.z = %f",data_lerp.x(),data_lerp.y(),data_lerp.z());
ratio = 0.5;
data_lerp = data_begin.lerp(data_end,ratio);
ROS_INFO("ratio = %f ",ratio);
ROS_INFO("data_lerp.x = %f data_lerp.y = %f data_lerp.z = %f",data_lerp.x(),data_lerp.y(),data_lerp.z());
ratio = 0.7;
data_lerp = data_begin.lerp(data_end,ratio);
ROS_INFO("ratio = %f ",ratio);
ROS_INFO("data_lerp.x = %f data_lerp.y = %f data_lerp.z = %f",data_lerp.x(),data_lerp.y(),data_lerp.z());
ratio = 1;
data_lerp = data_begin.lerp(data_end,ratio);
ROS_INFO("ratio = %f ",ratio);
ROS_INFO("data_lerp.x = %f data_lerp.y = %f data_lerp.z = %f",data_lerp.x(),data_lerp.y(),data_lerp.z());
}
}
运行结果如下:
另外tf还支持四元数球形插值:
函数原型链接如下:
四元数球形插值