机器人中的坐标变换
例如有A、B两个坐标系,两个坐标系之间的关系可以通过这样一个向量去做描述,这里面会包含一个平移的变换和一个旋转的变换,所以任意两个坐标系之间的变换可以通过一个4*4的矩阵去描述它的平移和旋转
ROS中的坐标系管理系统——TF
一个机器人系统中有很多坐标系,怎么来描述任意两个坐标系之间的关系就是一个比较麻烦的事情
TF功能包给我们提供的很重要的功能就是管理坐标系。用这个功能包就可以通过查询的方式告诉我们这两个坐标系之间的关系是什么样的,所有底层的数学计算都封装到里面帮我们完成了,我们就不需要自己去做一遍运算了
TF的意思就是transform坐标变换
TF坐标变换如何实现
- 广播TF变换
- 监听TF变换
只要启动ros master之后,启动TF之后,就会在后台维护一个TF树,所有坐标系都是通过树形结构保存在这个树当中的,想去查询任意两个坐标系之间的变换关系的话直接可以通过树去查询得到
举例
tf树维护坐标关系,tf其实是个topic
https://blog.csdn.net/qq_25678319/article/details/88090914
turtlesim小乌龟跟随实例
两个小海龟,两个海龟之间会一直保持位置一致。控制一只海龟移动,另一只会自动跟随,同步去做运动。
这就是通过坐标变换实现的
首先安装一个功能包
sudo apt-get install ros-melodic-turtle-tf
roslaunch是用来启动一个在ROS当中的launch文件,launch文件大家可以认为是一个脚本,可以把很多节点的启动都写进去
roslaunch turtle_tf turtle_tf_demo.launch
第二只海龟产生之后,我们没有任何操作,他就已经在跟第一只海龟重叠到一起了
启动键盘控制节点
rosrun turtlesim turtle_teleop_key
我们控制海龟动,另一只海龟就会跟着动。他会抄近道
运行view_frames工具
rosrun tf view_frames
这是tf功能包里面给我们提供的工具,可以可视化的看到系统当中的所有tf的关系
他要稍微监听5s的时间,把5s之内所有坐标系之间的关系都给保存下来。然后生成一个pdf
world就是全局坐标系,表示整个海龟仿真器的坐标原点,就是左下角的零点
turtle1和turtle2就分别是位于两只海龟上面的坐标系
使用rqt_tf_tree
rosrun rqt_tf_tree rqt_tf_tree
这是一个实时工具,观察在ROS上被发布的坐标系树,可用刷新按钮来更新树的内容。
与view_frames工具的区别在于:上一个工具连续采样5s获得的树的内容,并存成一个图片;这个工具可以连续的观察树的内容,使用起来更方便。
命令行工具 tf_echo
rosrun tf tf_echo turtle1 turtle2
直接帮助我们查询两个坐标系之间的位置关系。这里就是查询turtle1和turtle2之间的位置关系
可以看到数据包含translation和rotation两部分
可视化工具 rviz
是一个三维可视化的显示平台
rviz可以做建图,能visualize点云
rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.rviz
add添加一个TF
网格中间的点就是world,左下角就是turtle1和turtle2
现在用键盘控制乌龟动一下
可以看到坐标上的点就跟着不停动
turtle2和turtle1的位置关系可以通过两者相对于world之间的关系来得到
ROS(八)——ROS中的坐标系管理系统(TF坐标系管理系统 & view_frames & tf_echo & rviz)
最新推荐文章于 2024-06-21 12:54:16 发布