# ros_web_gui_app **Repository Path**: AlEX_2473/ros_web_gui_app ## Basic Information - **Project Name**: ros_web_gui_app - **Description**: ros_web_gui_app - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-03 - **Last Updated**: 2026-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TurtleBot3 Nav2 SLAM 仿真系统 基于ROS2 Jazzy和Gazebo Harmonic的TurtleBot3自主导航与SLAM建图仿真系统。 项目使用 - [ros_web_gui_app](https://github.com/chengyangkj/ros_web_gui_app) 提供 Web GUI 支持。 - [topology_msgs](https://github.com/chengyangkj/topology_msgs) 定义拓扑地图消息。 ## 📋 系统要求 - **操作系统**: Ubuntu 24.04 LTS - **ROS版本**: ROS2 Jazzy Jalisco - **Gazebo版本**: Gazebo Harmonic - **TurtleBot3模型**: Burger ## 🚀 快速开始 ### 1. 环境配置 ```bash # 设置TurtleBot3模型 export TURTLEBOT3_MODEL=burger # 编译工作空间 cd ~/ros2 colcon build --symlink-install --packages-select turtle_sim # 加载环境 source install/setup.bash ``` ### 2. 启动完整系统 ```bash # 启动Gazebo仿真 + SLAM + Nav2 ros2 launch turtle_sim nav2_slam.launch.py # 启动Web GUI版本(包含rosbridge和topology_manager) ros2 launch turtle_sim web_nav2_slam.launch.py ``` ### 3. 在RViz中设置导航目标 1. 点击工具栏的 **"Nav2 Goal"** 按钮 2. 在地图上点击并拖动设置目标位置和方向 3. 机器人会自动规划路径并导航到目标点 ## 📁 项目结构 ``` turtle_sim/ ├── launch/ │ ├── turtle3.launch.py # 基础仿真启动文件 │ ├── nav2_slam.launch.py # 完整Nav2+SLAM启动文件(headless模式) │ ├── web_nav2_slam.launch.py # Web GUI版本(含rosbridge+topology_manager) │ └── nav2.launch.py # 独立Nav2启动文件 ├── config/ │ ├── nav2_params.yaml # Nav2参数配置 │ └── turtlebot3_bridge.yaml # ROS-Gazebo桥接配置 ├── rviz/ │ └── turtlebot3_nav2.rviz # RViz配置文件 ├── resource/ │ └── turtle_sim ├── package.xml └── setup.py topology_manager/ ├── topology_manager/ │ └── topology_manager_node.py # 拓扑地图管理节点 ├── launch/ │ └── topology_manager.launch.py # 拓扑管理启动文件 ├── package.xml └── setup.py ``` ## ⚙️ 关键配置 ### 1. cmd_vel话题类型配置 **问题**: ROS2 Jazzy默认使用`TwistStamped`,但Gazebo需要`Twist`类型。 **解决方案**: - [turtlebot3_bridge.yaml](turtle_sim/config/turtlebot3_bridge.yaml) 中配置cmd_vel为`geometry_msgs/msg/Twist` - [nav2_params.yaml](turtle_sim/config/nav2_params.yaml) 中设置`enable_stamped_cmd_vel: false` ### 2. MPPI控制器频率配置 ```yaml controller_server: ros__parameters: controller_frequency: 20.0 # 必须匹配model_dt (0.05s = 20Hz) enable_stamped_cmd_vel: false ``` ### 3. SLAM Toolbox自动激活 ```python slam_toolbox = IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(pkg_slam_toolbox, 'launch', 'online_async_launch.py') ), launch_arguments={ 'use_sim_time': use_sim_time, 'autostart': 'true', # 自动激活SLAM }.items() ) ``` ## 🎯 功能特性 ### ✅ 已实现功能 - [x] Gazebo Harmonic仿真环境 - [x] TurtleBot3 Burger机器人模型 - [x] 激光雷达、IMU、里程计传感器数据 - [x] SLAM Toolbox实时建图 - [x] Nav2自主导航 - [x] 路径规划与避障 - [x] RViz可视化 - [x] cmd_vel话题类型兼容(Twist) - [x] Web GUI支持(rosbridge + rosapi) - [x] 拓扑地图管理(topology_manager) - [x] 拓扑地图消息定义(topology_msgs) ### 🔧 核心组件 #### 1. Gazebo仿真 - 世界环境: `turtlebot3_world` - 机器人初始位置: x=-2.0, y=0.0 - 传感器: 激光雷达、IMU、里程计 #### 2. SLAM建图 - 算法: SLAM Toolbox (Online Async) - 坐标系: map -> odom -> base_link - 自动激活: 启动时自动配置并激活 #### 3. Nav2导航 - 控制器: MPPI Controller (20Hz) - 规划器: NavFn Planner - 代价地图: Voxel Layer + Inflation Layer - 行为树: 默认导航行为树 #### 4. Web GUI支持 - rosbridge_websocket: WebSocket端口9090 - rosapi: ROS服务API - 前端连接: 通过roslib.js连接 #### 5. 拓扑地图管理 - 节点: topology_manager_node - 订阅话题: /map/topology/update, /map/update - 发布话题: /map/topology, /map - 消息类型: topology_msgs/TopologyMap ## 📖 使用指南 ### 键盘控制建图 ```bash # 在新终端中启动键盘控制 export TURTLEBOT3_MODEL=burger source install/setup.bash ros2 run turtlebot3_teleop teleop_keyboard ``` ### 保存地图 ```bash # 保存当前地图 ros2 run nav2_map_server map_saver_cli -f ~/my_map ``` ### 加载已有地图导航 ```bash # 使用已保存的地图进行导航 ros2 launch turtle_sim nav2_slam.launch.py map:=$HOME/my_map.yaml ``` ### 分步启动(调试用) ```bash # 终端1: 启动仿真环境 ros2 launch turtle_sim turtle3.launch.py # 终端2: 启动Nav2导航 ros2 launch turtle_sim nav2.launch.py ``` ## 🔍 故障排查 ### 问题1: 机器人不移动 **检查项**: 1. cmd_vel话题类型是否正确 ```bash ros2 topic info /cmd_vel -v # 应显示: geometry_msgs/msg/Twist ``` 2. Nav2节点是否激活 ```bash ros2 lifecycle list /controller_server ``` ### 问题2: map frame不存在 **解决方案**: ```bash # 检查SLAM Toolbox状态 ros2 lifecycle get /slam_toolbox # 如果未激活,手动激活 ros2 lifecycle set /slam_toolbox configure ros2 lifecycle set /slam_toolbox activate ``` ### 问题3: 控制器频率警告 **警告信息**: `Control loop missed its desired rate of 20.0000 Hz` **说明**: 实际频率高于设定值是正常现象,不影响功能。如果需要优化,可以: - 降低`controller_frequency` - 优化系统性能 ## 🔗 参考资源 - [ROS2 Jazzy Documentation](https://docs.ros.org/en/jazzy/) - [Gazebo Harmonic Documentation](https://gazebosim.org/docs/harmonic) - [TurtleBot3 e-Manual](https://emanual.robotis.com/docs/en/platform/turtlebot3/) - [Nav2 Documentation](https://navigation.ros.org/) - [SLAM Toolbox](https://github.com/SteveMacenski/slam_toolbox) ## 📝 更新日志 ### 2026-03-03 - ✅ 修复cmd_vel话题类型不匹配问题 - ✅ 修复MPPI控制器频率配置 - ✅ 添加SLAM Toolbox自动激活 - ✅ 优化Nav2参数配置 - ✅ 完成系统集成测试 - ✅ 添加Web GUI支持(rosbridge + rosapi) - ✅ 添加拓扑地图管理功能(topology_manager) - ✅ 添加拓扑地图消息定义(topology_msgs) - ✅ 添加web_nav2_slam.launch.py启动文件