TF转换(参考

1、URDFTFodom的关系

在机器人自主导航中,ROS会构建这几个很重要的坐标系,即frame。在urdf文件中定义base_link,它代表了机器人的主干,其它所有的frame都是相对于base_link定义并粘在一起的。它们一起相对于大地图map移动,让机器人移动就是向tf发布geometry_msgs::TransformStamped消息通知ros base_link相对于maptf转换关系 。

2、概念理解

物理语义 理解 原点
base_link 为相对机器人的本体的坐标系 位于tf tree的最根部 原点一般为表示机器人中心
odom 一个对于机器人全局位姿的粗略估计 直接与base_link 相链接,数据一般来源于里程计(odometry) 原点为开始计算位姿那个时刻的机器人的位置
map 一个经过先验(或者SLAM)地图数据矫正过的,在地图中的位姿信息 odom(或者odom_combined)相连,与odom同为全局坐标系 原点为地图原点(地图原点在地图相应的yaml文件中有规定)

3、关系

map --> odom --> base_link odombase_link的坐标转换是从运动源计算出来广播的。mapbase_link的坐标转换是被定位模块计算出来的. 但定位模块不发布map到base_link的转换. 相反它先接受从odombase_link的转换, 再计算并广播mapodom的位置转换关系

fixed_frameRViz中认定的大世界就是fixed_frame

target_frameRviz中视觉跟踪的frametarget_frame

4、坐标转换

在lidar的launch启动文件中增加:

1
2
3
<node pkg="tf" type="static_transform_publisher" name="base_link_to_laser4"
args="0.0 0.0 0.2 0.0 3.1415926 0.0 /base_link /laser_frame 40" />
</launch>
1
2
3
4
5
6
7
8
args="0.0 0.0 0.2 0.0 3.1415926 0.0 /base_link /laser_frame 40"
// 参数意义,分别对应static_transform_publisher的
// x y z yaw pitch roll frame_id child_frame_id period_in_ms
// x y z 是 x y z 的坐标
// yaw pitch roll 是 绕 z旋转弧度角,绕y旋转弧度角,绕x旋转弧度角
// frame_id child_frame_id period_in_ms 父坐标系,子坐标系,发布间隔(ms)
// 上述是指的 z方向增加0.2m,绕y旋转180°
// 这些相对变换就是固定base-link,看其他坐标在base_link下的偏移

修改urdf文件的坐标 找到urdf的描述文件,如turtlebot_description/urdf/turtlebot_library.urdf.xacro,在文件中修改坐标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<joint name="laser" type="fixed">
<origin xyz="0.00 0.00 0.20" rpy="0 3.1415926 0" />
<parent link="base_link" />
<child link="base_laser_link" />
</joint>

<link name="base_laser_link">
<visual>
<geometry>
<box size="0.00 0.05 0.06" />
</geometry>
<material name="Green" />
</visual>
<inertial>
<mass value="0.000001" />
<origin xyz="0 0 0" />
<inertia ixx="0.0001" ixy="0.0" ixz="0.0"
iyy="0.0001" iyz="0.0"
izz="0.0001" />
</inertial>
</link>

©2018 - Felicx 使用 Stellar 创建
总访问 113701 次 | 本页访问 326
共发表 83 篇Blog · 总计 127.5k 字