当我们拿到不同的传感器时,我们在调试后希望将他们用ros下的rviz显示在同一页面下,相机(image)和单一的传感器显示通常比较简单,往往我们加入两个有空间坐标的传感器会报错,没有转换关系或者xx frame不存在。这是因为在ROS中,我们需要建立一个rf-tree来管理我们的传感器坐标使其统一,拿出某一点就可以得到其在不同坐标系下的坐标。往往传感器的默认frame都不同,这时候我们需要将其统一方能在同一页面显示。
拿到传感器,我们运行其结点/或发布,使用
rostopic list
查看当前发布的话题,看看我们需要现实的话题是否已发布。
例如点云数据,我们查找其frame_id可以通过:
rostopic ehco /xxxx | grep frame_id
这样可以看到显示的frame_id
显然两者处于不同的坐标下未产生联系,这样自然无法显示。
这时最简单的做法就是利用TF官方文档说的
http://wiki.ros.org/tfhttp://wiki.ros.org/tf
rosrun tf static_transform_publisher 0 0 0 0 0 0 base_link rslidar 20
含义:
rosrun tf static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms
或者
rosrun tf static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
这样就可以将rslidar转化为base_link(当然 0 0 0 0 0 0并不是实际情况)
还可以在launch文件中添加:
<launch>
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>
我们可以使用以下指令来查看当前的tf关系:
rosrun tf view_frames
会在当前(terminal打开的)文件夹下生成一个frames.pdf文档,绘制着树状关系。
注意:当发生缺少yaml文件等报错时,往往是由于安装的python版本的问题,找到对应的文件打开,改为对应的python版本如 python2(若安装的是python2.7)或python3。
使用下述命令直接查看树状图与转换关系
rosrun rqt_tf_tree rqt_tf_tree
核对树状关系,rslidar和base_link产生了联系。
通过
rostopic echo /tf -n1
可以输出一次的变换:
-----------------------------------------------------------------------------------------------------------------------
现在我们来说在rviz中显示的问题:
1.运行节点/launch文件;
2.运行tf转换关系;
3.打开rviz,添加tf(点击add->By display type->TF),展开TF可以看到几个frame的转换关系,是否ok;
4.选取共有的(统一的)frame作为世界坐标的Fixed Frame,完成显示;
5.调整显示的点云等大小颜色等特性,保存为.rviz配置文件以便下次方便使用。
完成显示!
推荐学习内容:
ROS中TF(坐标系转换)原理与使用 - 前路有光,初心莫忘 - 博客园
https://www.youtube.com/watch?v=Ra-nXIfPWdg文章来源:https://www.toymoban.com/news/detail-412513.html
https://www.youtube.com/watch?v=dBATvRhvGRI&t=2706s文章来源地址https://www.toymoban.com/news/detail-412513.html
到了这里,关于多传感器ROS rviz显示,TF转换(如雷达和激光雷达)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!