本文所列问题都是我在仿真过程中真实遇到的,不是总结网上的办法。
(1)在gazebo中仿真导航时:Timed out waiting for transform from base_footprint to map to become available......
原因:gazebo launch与导航 launch使用的时间不同步。我在导航launch中写了
<param name="use_sim_time" value="false" />
而gazebo launch没写,所以时间不同步。
解决:删除导航launch中的这句话。
(2)上面问题解决后,导航能正常启动,但是开始导航后,机器人不按照全局路径规划走,而是乱走。
原因:(说起来比较蠢)在最开始建机器人模型的时候,没有仔细看源码,把turtlebot底盘的左右电机和左右轮搞反了,在y轴上,左轮的offset是-1,右轮的offset是1,左右电机同理。(为什么会没注意呢?按照经验,小车已前进的方向为forward,左边是left,右边right,但是机器人建模中是以小车后退的方向为forward,所以left和right正好需要倒过来。)
怎么发现的呢?把launch文件和gazebo文件检查了个遍也没发现哪有问题,最后在rviz中把视图修改为三维视图,从下向上看,可以看到move_base计算的局部路径(红色线),turtlebot底盘在一瞬间运动的方向刚好跟局部路径方向相反,才想到gazebo中的差速轮可能写反了。倒过来后果然问题解决了。
解决办法,在xacro文件中把offset倒过来就可以了。