ROS2键盘控制方向(J/L键)与Gazebo实际转向相反,RViz2地图生成时出现方向错乱、残影、角度漂移

        最近在学习ROS2的过程中碰到了一点问题也是折腾了好久,最后找到问题也是让自己有点无语。

        问题的现象:启动键盘控制节点控制机器人,按j默认应该是左转,按l应该是右转,但是实际操作时与此相反,一开始并没有在意。在使用rviz2接收slam_toolbox发布的map话题生成地图时,机器人转动的方向与实际的方向相反,并且会往回闪烁(TF树中odombase_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生成有问题时才来排查这个问题。

(啰啰嗦嗦说了半天就是这么一个小问题哈哈哈哈,发这个出来我也是希望和我遇到同样问题的朋友不要走弯路了)

ROS 2 (Robot Operating System) 中,Gazebo 是一个常用的模拟环境,而 RVIZ2 是一个用于视觉化的工具。为了让 Gazebo 生成的模型和地形在 RVIZ2 中显示为地图,你需要按照以下步骤操作: 1. **安装必要的包**: 确保已经安装了 `rclcpp`, `tf2_ros`, `ament_cmake_gtest`, `gazebo_ros`, 和 `ros2_rviz_plugin` 等依赖包。 2. **创建世界文件**: 使用 Gazebo 的 `.world` 文件格式,在其中添加地形和静态模型。例如,你可以通过 `model://` 命令引用预设的 gazebo 模型,或者自定义模型并指定其位置、大小等属性。 3. **启动 Gazebo**: 运行 `gzserver` 命令启动 Gazebo,并加载你的世界文件,例如: ``` gzserver -s world_file.urdf ``` 4. **生成地图数据**: Gazebo 通常不会直接生成 RVIZ 可用的地图数据,但可以利用 `map_server` 包将 Gazebo 的静态地图转换为 `yaml` 格式的 nav_msgs/MapServer 或 nav_msgs/OccupancyGrid 数据。这需要在 Gazebo 内部配置一些插件如 `gazebo_ros_plugins` 的 static_map_publisher。 5. **将地图发布到话题**: 通过运行类似下面的命令,将地图数据发布到 RVIZ2 可以订阅的主题上: ``` roslaunch gazebo_ros static_map.launch world:=world_file.urdf ``` 这会发布 `/map` 或 `/odom`(取决于你选择的地图数据类型)的话题。 6. **在 RVIZ2 中查看地图**: 启动 RVIZ2 并添加一个 "Occupancy Grid" 或 "Map" 组件,连接到刚才发布的地图主题,就可以看到 Gazebo 生成的地形在 RVIZ2 中了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值