ROS导航小车如何用base_footprint作为旋转中心

问题遇到的现象和发生背景

使用的是EAIBOT小车,配有雷达和IMU,使用amcl定位和ekf传感器融合,车比较旧了,两三年前买的。

小车一开始启动时,雷达激光与map是贴合的,但随着小车运动和旋转后,激光越来越偏移,无法与map重合,导致导航有很大的误差。

运行结果及报错内容

img

上图为小车的运行一圈后返回原点,以及/odom的输出信息。可以看到在原点位置,odom的坐标值正常应该贴近0,数值却还这么大,有相当的误差。
补充:经过测试后发现,导致激光偏移主要是因为小车旋转导致的误差,小车并没有严格按照旋转中心旋转,存在平移。所以问题变成了如何更改旋转中心,且采用base_footprint作为旋转中心!

我的解答思路和尝试过的方法

我有自制简单导航小车的经验,使用其他类型的车,激光都是贴合map的,但这辆车仍然存在问题。
尝试过更改小车模型urdf和xcaro里base_link和base_footprint的转换关系,但是没有效果。

我想要达到的结果

用base_footprint作为旋转中心在小车运动过程中,激光仍然贴合map

<!-- 设置一个 baselink与 laser之间的静态坐标变换 -->

<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>

把map_odom_broadcaster 的注释调,二选一,这样小车就不再乱跳


这个问题我也不太清楚