ros nvigation 不能避障

转载https://blog.csdn.net/sunyoop/article/details/78201761?locationNum=9&fps=1

前提:

1.要保证传感器节点正常运行,即发布到主题/scan(或者是laserscan)数据是ok的,可以通过rostopic echo /scan 查看是否有数据生成

2.通常使用的设备为kobuki+kinect(或者3d其他的设备)时,运行turtlebot_navigation中gmapping的例子就可以实现kobuki动态避障功能

3.运行例子后,运行命令

roslaunch turtlebot_rviz_launchers view_navigation.launch


查看运行的例子中各项数据是否会出现问题。要保证这里面显示的数据无warning或者error,如果有,请自行用wtf或rqt工具排查tf和topic数据,基本上如果出问题就是tf/坐标系的问题。

 

a.有可能是哪个father node运行不正常导致相应坐标系无transform数据,导致son node因为收不到数据而超时;

b.或者是tf分成两段,没有连接上;

4.ros中避障功能在move_base中实现,主要由costmap_2d组件实现,详细方式可见:ros中的costmap

问题:

终于到我所遇到的问题,使用新的地盘,适配odom tf和odom topic后基本就可以正常运行了,当然没有红外,悬崖,陀螺仪,碰撞传感器。只使用电机编码器信息配合修改一些参数就可以基本实现odom的适配。我所修改的是kobuki driver代码。

在新的地盘+hokuyo上跑gmapping,然后运行gmapping例子,发现不能动态避障,rviz上可以显示到laser扫描到前方有动态障碍,但不会显示膨胀区域+碰撞区域+膨胀区域,简单说就是地图上没有网格标识成红,蓝色。

使用kobuki+hokuyo,发现也不行,使用kobuki+kinect发现可以,然后对比这几种场景的rviz显示的各项数据,都是一致的。然后查看costmap的参数配置,发现也是一样的。

最后不得已查看代码,发现在mark 网格时,需要做min_obstacle_height和max_obstacle_height过滤,然后查看了相应的配置参数。

在新的地盘上,laser的高度是0.18m,而min_obstacle_height和max_obstacle_height设置成0.25和0.35,so costmap认为扫描到的障碍不能影响到robot的运行。这里面设置是kobuki上kinect的配置,0~0.15是碰撞传感器,0.25~0.35是kinect的区域。相对于hoyuko这种雷达传感器,只是一个平面。

对于飞机这种robot,min和max才都用到,而对于地面行走的robot,max应该比robot的高度还要更高一点,同时还要区分传感器。

主要原因costmap yaml 参数配置有问题正如上面所说。