方法一
global_localization (std_srvs/Empty):通过调用该服务将初始化全局定位,将所有的粒子重新打散随机的分散在地图的空闲地方,可以通过以下命令来调用该服务,当调用后可以发现所有的粒子被重新打散随机分布在地图上,然后使用键盘遥控机器人旋转,这样可以自动重新对机器人进行定位
rosservice call /global_localization "{}"
request_nomotion_update (std_srvs/Empty):该服务是手动的来更新粒子并发布新的粒子,可以使用如下命令来调用服务执行更新粒子的操作,该服务一般需要多次调用才能逐渐看到粒子收敛的效果:
rosservice call /request_nomotion_update "{}"
清理代价地图
rosservice call / move_base / clear_costmaps“{}”
机器人再进行旋转重定位
方法二
全局定位失效时,运行
rosparam dump amcl.yaml /amcl/
修改amcl.yaml文件,将参数"initial_pose_x"、“initial_pose_y”、“initia;_pose_a”注释掉。
<!--param name="initial_pose_x" value="0.0"/-->
<!--param name="initial_pose_y" value="0.0"/-->
<!--param name="initial_pose_a" value="0.0"/-->
重新启动机器人