最近在学习ROS2的过程中碰到了一点问题也是折腾了好久,最后找到问题也是让自己有点无语。
问题的现象:启动键盘控制节点控制机器人,按j默认应该是左转,按l应该是右转,但是实际操作时与此相反,一开始并没有在意。在使用rviz2接收slam_toolbox发布的map话题生成地图时,机器人转动的方向与实际的方向相反,并且会往回闪烁(TF树中odom与base_link的变换关系因轮子反向而冲突),转动角度会比gazebo中小,生成的地图是杂乱的并机器人转动时地图有很多残留的影像(里程计积分方向错误导致SLAM建图时定位漂移),并且在加入rviz2加入map后会报错:
[ERROR] [1747293604.748822749] [rviz2]: Vertex Program:rviz/glsl120/indexed_8bit_image.vert Fragment Program:rviz/glsl120/indexed_8bit_image.frag GLSL link result :
active samplers with a different type refer to the same texture image unit
首先排除这个报错,它可能会导致可能导致部分可视化元素的纹理显示异常(如地图颜色错乱),但不会破坏数据本身,这个错误通常不影响RViz2的核心功能,地图可以正常生成(我在不知道的情况下折腾了这个错误很久,而且还没有解决掉它)。
查找资料排查问题时我的猜测:房间太小,轮子的模型参数和差速控制器的的参数没有对应,TF关系不正确,没有校准里程计、噪声过大等,试错的环节我就不赘述了。
最后排查出来的结果:在设置驱动器(轮子)的物理属性时,我在没有了解轮子各个轴的朝向的情况下,我以为轮子的x轴是朝向屏幕外的(朝向我),所以就以为左边轮子在y轴负方向,右边轮子在y轴正方向,如下所示:
<xacro:wheel_xacro wheel_name="left_wheel" xyz="0.0 -0.10 -0.06"/>
<xacro:wheel_xacro wheel_name="right_wheel" xyz="0.0 0.10 -0.06"/>
实际上x轴(红色)应该朝向轮子前进的方向,Y轴(绿色)朝向轮子旋转轴的方向,Z轴(蓝色)垂直地面向上(遵循右手定则),那就应该是:
<xacro:wheel_xacro wheel_name="left_wheel" xyz="0.0 0.10 -0.06"/>
<xacro:wheel_xacro wheel_name="right_wheel" xyz="0.0 -0.10 -0.06"/>
也就是说我把机器人的左右轮给放反了,发现真正的原因后我也是很无语,折腾了这么久就因为自己马虎大意,哪怕我建完模型看一下rviz2中的TF或者使用两轮差速仿真发现方向相反查一下资料,也不会在map生成有问题时才来排查这个问题。
(啰啰嗦嗦说了半天就是这么一个小问题哈哈哈哈,发这个出来我也是希望和我遇到同样问题的朋友不要走弯路了)
2174

被折叠的 条评论
为什么被折叠?



