ROS中Transform的使用笔记
1、需求
在使用ROS的过程中,我们常常需要在应用中获取某个或者整体的tf树,或者发布某个frame与某个节点之间的transform关系。
2、发布transforms
// 1. 引入头文件
#include <tf/transform_broadcaster.h>
// 2. 创建TransformBroadcaster对象
tf::TransformBroadcaster br;
// 3. 创建Transform对象
tf::Transform transform;
// 4. 给tranform填入目标值
transform.setOrigin(tf::Vector3(x, y, 0.0));
tf::Quaternion q;
q.setRPY(0, 0, 0);
transform.setRotation(q);
// 5. 将Transform填充到StampedTransform对象中,并使用Broadcaster发布StampedTransform话题,
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "/parent_id", "/child_id"));
3、获取transform
// 1. 引入listener头文件
#include <tf/transform_listener.h>
// 2. 创建listener对象
tf::TransformListener listener;
// 3. 创建StampedTransform对象
tf::StampedTransform transform;
// 4. 尝试获取指定的transform, 如果获取失败会返回TransformException
try{
listener.lookupTransform("/parent_id", "/child_id",
ros::Time(0), transform);
}
catch (tf::TransformException ex){
ROS_ERROR("%s",ex.what());
}
// getOrigin() 获取transition
transform.getOrigin()
// getRotation() 获取orientation
transform.getRotation()
4、编译设置
add_executable(turtle_tf_listener src/turtle_tf_listener.cpp)
target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES})
5、编译
catkin_make