机器人在导航的时候雷达点云不和地图贴合,并且定位不准确
-
背景
ROS Noetic
Ubuntu 20.04 (工控机)问题描述:
小车启动导航了之后,通过cmd_vel话题控制移动,在一开始的1-2分钟之内都一切正常,但是大概2分钟左右就会出现小车在转向的时候,雷达的点云不能和地图贴合在一起而是和小车一起旋转。出现这个问题的时间都是在启动导航后1-2分钟就会出现。请问如何解决这个问题?
具体细节和上下文:
小车出现该问题的RVIZ显示:
图片中的雷达点云已经脱离了地图,跟随小车一起旋转了,正常应该是贴合地图的墙壁才对。
小车的节点详细:(没法上传大图,仅截取部分)
我使用了robot_pose_ekf来输出融合里程计给到amcl的。
小车的TF树:(没法上传大图,仅截取部分)
代价地图的参数配置:
文件 [global_costmap_params.yaml]
#全局代价地图参数命名空间 global_costmap: global_frame: map robot_base_frame: base_footprint transform_tolerance: 0.5 #代价地图刷新频率,单位:Hz update_frequency: 1 #代价地图的可视化话题发布频率,单位:Hz publish_frequency: 1 #是否直接使用静态地图生成代价地图 #static_map: true #使用plugins手动配置代价地图时,该参数无效 #代价地图是否跟随机器人移动,static_map为true时该参数必须为false rolling_window: false #代价地图宽度,这里会被静态层扩宽,单位:m width: 10.0 #代价地图高度,这里会被静态层扩宽,单位:m height: 10.0 #代价地图分辨率(米/单元格) resolution: 0.05 #为代价地图设置地图层,这里设置了三层,分别作为静态层、障碍层和膨胀层 plugins: #定义地图层的名称,设置地图层的类型 - {name: static_layer, type: "costmap_2d::StaticLayer"} #定义地图层的名称,设置地图层的类型。 #障碍层可以使用VoxelLayer代替ObstacleLayer - {name: obstacle_layer, type: "costmap_2d::VoxelLayer"} #定义地图层的名称,设置地图层的类型 - {name: inflation_layer, type: "costmap_2d::InflationLayer"} #各地图层的参数,会以地图层名称作为命名空间 #各地图层的参数,会在【costmap_common_params.yaml】内进行设置
文件 [local_costmap_params.yaml]
#局部代价地图参数命名空间 local_costmap: #代价地图的TF参考坐标系 global_frame: map #机器人的TF坐标名称 robot_base_frame: base_footprint #global_frame和robot_base_frame间的TF坐标停止发布多久后,控制机器人停止,单位:s transform_tolerance: 0.5 #代价地图刷新频率,单位:Hz update_frequency: 10 #代价地图的可视化话题发布频率,单位:Hz publish_frequency: 10 #是否直接使用静态地图生成代价地图 #static_map: false #使用plugins手动配置代价地图时,该参数无效 #代价地图是否跟随机器人移动,static_map为true时该参数必须为false rolling_window: true #代价地图宽度,单位:m width: 5.0 #代价地图高度,单位:m height: 5.0 #代价地图分辨率(米/单元格) resolution: 0.05 #为代价地图设置地图层,这里设置了两层,分别作为障碍层和膨胀层 #局部代价动态要求高刷新率,不使用静态层以节省计算资源 plugins: #定义地图层的名称,设置地图层的类型 - {name: static_layer, type: "costmap_2d::StaticLayer"} #定义地图层的名称,设置地图层的类型 - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} #定义地图层的名称,设置地图层的类型 - {name: inflation_layer, type: "costmap_2d::InflationLayer"} #各地图层的参数,会以地图层名称作为命名空间 #各地图层的参数,会在【costmap_common_params.yaml】内进行设置
尝试过的解决方法:
1、尝试了解过是不是IMU模块的累积误差问题,但是对于IMU没有太多的了解,放弃了这个方向。
-
@1992558282 有没有谁遇到过类似这个问题的情况呢,可以分享一下解决思路吗?或者我应该往哪个方向去解决问题呢?这个问题实在卡的挺久的
-
@1992558282 里程计校准了嘛
-
你好,这个问题解决了吗,我也遇到了同样的问题
-
@2816329007 里程计校准,是测量小车x轴行走1米,然后用尺子量一下是不是1m,还有测量小车转90°是否准确,指的是这个吗?
-
@1992558282 他说的是这个意思应该,从传感器入手检查问题是正确思路
-
-
兄弟,这个问题你解决了吗?有思路吗?我查的都说是校准里程计,可是怎么校准里程计啊?我机器人上面就装了一个激光雷达,一个摄像头导航的时候还没有启动
-
你好,这个问题解决了吗,我也遇到了类似的问题