在 ROS 中,坐标变换(TF:Transform)它允许机器人系统中的各个部分使用不同的坐标系,并通过转换关系进行通信和协作。
静态坐标变换是指两个坐标系之间的相对位置关系是固定的,不会随时间改变。
例如,一个机器人的基座相对于车轮的位置关系通常被认为是静态的。在ROS中,静态坐标变换由tf2_ros::StaticTransformBroadcaster发布,并且一旦发布就不再更新。
如现有一机器人模型,其构成包含主体与雷达,各对应一坐标系,已知雷达原点相对于主体原点位移关系如下: x 0.2 y 0.0 z 0.5。当前雷达检测到一障碍物,在雷达坐标系中障碍物的坐标为 (2.0 3.0 5.0),则障碍物相对于主体的坐标是
实现分析:
坐标系相对关系,可以通过发布方发布
订阅方,订阅到发布的坐标系相对关系,再传入坐标点信息,然后借助于 tf 实现坐标变换,并将结果输出
实现流程:
1、创建项目功能包依赖于 tf2、tf2_ros、tf2_geometry_msgs、roscpp rospy std_msgs geometry_msgs
2、当坐标系之间的相对位置固定时,那么所需参数也是固定的: 父系坐标名称、子级坐标系名称、x偏移量、y偏移量、z偏移量、x 翻滚角度、y俯仰角度、z偏航角度,实现逻辑相同,参数不同, ROS 系统就已经封装好了专门的节点,使用方式如下:
rosrun tf2_ros static_transform_publisher x偏移量 y偏移量 z偏移量 z偏航角度 y俯仰角度 x翻滚角度 父级坐标系 子级坐标系
如:rosrun tf2_ros static_transform_publisher 0.2 0 0.5 0 0 0 /baselink /laser
3、可以借助于rviz显示坐标系关系,具体操作:
rviz 中设置Fixed Frame 为 base_link;
在弹出的窗口中选择 TF 组件,即可显示坐标关系。