ROS|ROS Tranform出错简易处理 tf出错现象及解析
有时候由于urdf以及代码中有些遗漏,可能导致TF出现问题,此文只作为阐明TF重要性的示例,不是解决方案!
请注意此方法不保证正确和唯一,解决方案多样,欢迎留言补充,这里抛砖引玉~
以下面为例:
启动地图构建程序,但是没有出现地图,rviz现象为:
这里有两个警告和两个错误:
文章图片
文章图片
使用下面命令查看TF tree:
$ rosrun rqt_tf_tree rqt_tf_tree
文章图片
/odom和/base_footprint断开了!
这里有一点需要重点说明,tf中的odom和topic的odom虽然名称一样,但完全不是一类。
怎么办呢?
只需要一步即可:可以参考官网robot_state_publisher具体可以参考附录:~
在launch文件中添加:
然后重新运行:
文章图片
熟悉的地图出来了,再看一下tf:
文章图片
OK!
在自己的机器人上使用机器人状态发布器 说明:
本教程介绍如何发布机器人的状态,
TF
,使用机器人状态出版商。
教程级别:
BEGINNER
下一个教程:
有关如何结合使用robot_state_publisher与urdf的详细教程,请查看
本教程
内容
- 作为ROS节点运行
- robot_state_publisher
- 订阅主题
- 参数
- 示例启动文件
- robot_state_publisher
- 作为库运行
当你使用一个有许多相关框架的机器人时,将它们全部发布到tf就成了一项任务。机器人状态发布者是一个工具,将为您完成这项工作。
文章图片
机器人状态发布器帮助您将机器人的状态广播到tf转换库。机器人状态发布器内部具有机器人的运动学模型; 因此给定机器人的关节位置,机器人状态发布者可以计算和广播机器人中每个链接的3D姿态。
您可以将robot状态发布者用作独立的ROS节点或库:
作为ROS节点运行 robot_state_publisher
运行机器人状态发布器的最简单方法是作为节点。对于正常用户,这是建议的用法。你需要两件事来运行机器人状态发布者:
- 一个urdf XML描述机器人装上的参数服务器。
- 将关节??位置发布为sensor_msgs / JointState的源。
订阅主题 joint_states(sensor_msgs / JointState)
- 关节位置信息
- 该urdf XML机器人的描述。这是通过访问`urdf_model :: initParam`
- 设置TF的变换的空间感知出版前缀。见tf_prefix了解更多详情。
- 状态发布者的发布频率,默认值:50Hz。
示例启动文件
一旦你设置了XML机器人描述和一个关节位置信息源,只需创建一个启动文件,像这样:
node> launch>
作为库运行 高级用户还可以从自己的C ++代码中将机器人状态发布者作为库运行。在添加标题后:
#include
所有你需要的是一个发生在一个构造函数KDL树
RobotStatePublisher(const KDL :: Tree&tree);
现在,每次你想发布你的机器人的状态,你调用publishTransforms函数:
//发布移动关节 void publishTransforms(const std :: map &joint_positions, const ros ::时间&time); //发布固定关节 void publishFixedTransforms();
第一个参数是具有关节名称和关节位置的映射,第二个参数是记录关节位置的时间。如果地图不包含所有的联合名称,可以。如果地图包含一些不是运动模型一部分的关节名称,也可以。但请注意,如果你不告诉关节状态出版者关于你的运动学模型中的一些关节,那么你的tf树将不完整。
【ROS|ROS Tranform出错简易处理 tf出错现象及解析】
推荐阅读
- 高效纠错
- maven使用tomcat7插件编译jsp出错
- 在珠海賞植物──【粉花夾竹桃】Rose|在珠海賞植物──【粉花夾竹桃】Rose oleander
- 急
- 伦敦市长萨迪克汗Crossrail受挫,转进准备引入租金管控。
- 为什么我老在领导面前出错()
- Fourth|Fourth season twenty-first episode,Ross invited Rachel to his wedding,what will happen?
- 对生活中出错的觉察
- ubuntu16.04安装ROS
- redis|redis cross slot error