# tomatobot **Repository Path**: thomas-lzy/tomatobot ## Basic Information - **Project Name**: tomatobot - **Description**: 番茄园采摘机器人巡检导航gazebo仿真 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-05-07 - **Last Updated**: 2026-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TomatoBot Navigation2 导航包 ## 文件结构 ``` nav/ ├── CMakeLists.txt ├── package.xml ├── setup.py ├── README.md ├── config/ │ ├── nav.yaml # Navigation2 配置 │ └── slam.yaml # SLAM Toolbox 配置 ├── launch/ │ ├── slam_launch.py # SLAM 建图启动 │ ├── navigation_launch.py # 导航启动 │ ├── robot_spawn_launch.py # 机器人启动 │ └── save_map_launch.py # 地图保存 ├── rviz/ │ └── navigation.rviz # RViz 配置 ├── maps/ # 地图文件目录 └── nav/ └── __init__.py ``` ## 功能概述 本包为 TomatoBot 机器人提供基于 Navigation2 的自主导航和 SLAM 建图功能。 ## 依赖 - ROS2 Foxy - Navigation2 (nav2_bringup) - SLAM Toolbox - Gazebo ## 修改内容 - 将tomatobot_urdf.urdf文件中的link的地址全部修改为你的绝对地址,例如:‘’ ## 编译 ```bash cd ~/tomatobot_ws colcon build --symlink-install source install/setup.bash ``` ## 使用方法 ### 方法一:SLAM 建图(推荐 - 使用自动探索) **步骤 1:启动 Gazebo 和机器人** ```bash source ~/tomatobot_ws/install/setup.bash ros2 launch tomatobot_description gazebo.launch.py ``` **步骤 2:启动 SLAM 和自动探索** ```bash # 终端 2: 启动 SLAM ros2 launch nav slam_only.py # 终端 3: 启动键盘控制完成建图 ros2 run teleop_twist_keyboard teleop_twist_keyboard ``` **注意**:还有一个旧版本的自动探索 `auto_explore_launch.py`,但 V2 版本使用状态机实现更智能的探索行为。 **步骤 3:保存地图** 建图完成后: ```bash ros2 run nav2_map_server map_saver_cli -f ~/tomatobot_ws/src/nav/maps/tomato_greenhouse ``` ## 方法二:自主导航(使用已有地图) **步骤 1:启动 Gazebo 和机器人** ```bash ros2 launch tomatobot_description gazebo.launch.py ``` **步骤 2:启动 Navigation2** ```bash ros2 launch nav navigate_only.py ``` **步骤 3:发送导航目标** 在 已经建好的地图上导航,并自动控制机器人到达目标点。 ```bash # 在另一个终端运行 source /home/thomas/tomatobot_ws/install/setup.bash ros2 run nav simple_navigate --goal-x 20 --goal-y 10 ``` ## 启动文件说明 | 启动文件 | 功能 | |---------|------| | `slam_launch.py` | SLAM 建图(含 Gazebo) | | `slam_only.py` | SLAM 建图(Gazebo 外置) | | `navigate_only.py` | 自主导航(使用已有地图) | | `auto_explore_launch.py` | 自动探索建图 | | `auto_explore_v2_launch.py` | 自动探索建图 | | `robot_spawn_launch.py` | 机器人仿真启动 | ## 参数配置 ### nav.yaml 主要配置 - **global_costmap / local_costmap**: 代价地图配置 - **controller_server**: DWB 局部控制器 - **planner_server**: Navfn 全局规划器 - **behavior_server**: 行为服务器(spin, backup, wait) - **amcl**: 自适应蒙特卡洛定位 ### slam.yaml 主要配置 - **mode**: mapping(建图) - **map_frame, odom_frame, base_frame**: 坐标系 - **scan_topic**: 激光雷达话题 - **scan_base_frame**: Lidar_Link ### auto_explore_v2 主要参数(推荐) - **linear_speed**: 线速度 (默认 0.5 m/s) - **angular_speed**: 角速度 (默认 0.4 rad/s) - **safe_distance**: 安全距离 (默认 1.5 m) - **探索策略**: 状态机(前进→转向→避障) - **随机转向**: 每 4 秒随机转向增加探索覆盖 ### auto_explore 主要参数(基础版) - **linear_speed**: 线速度 (默认 0.3 m/s) - **angular_speed**: 角速度 (默认 0.5 rad/s) - **safe_distance**: 安全距离 (默认 1.0 m) - **探索策略**: 简单避障(前方障碍则转向) ## 话题列表 | 话题 | 类型 | 描述 | |------|------|------| | `/scan` | sensor_msgs/LaserScan | 激光雷达 | | `/cmd_vel` | geometry_msgs/Twist | 速度控制 | | `/odom` | nav_msgs/Odometry | 里程计 | | `/map` | nav_msgs/OccupancyGrid | SLAM 地图 | | `/goal_pose` | geometry_msgs/PoseStamped | 导航目标 | | `/initialpose` | geometry_msgs/PoseWithCovarianceStamped | 初始定位 | ## 机器人规格 - **base_footprint**: 足底坐标系(地面) - **base_link**: 底盘中心 - **轮子**: 4 个连续转动关节 - **传感器**: - 激光雷达 (8 米量程,360 度) - 摄像头 (640x480) - IMU ## 故障排除 ### 机器人不移动 1. 检查 `ros2 topic echo /cmd_vel` 是否有输出 2. 检查代价地图是否更新 3. 确认目标点在可行区域 ### 定位丢失 1. 使用 RViz2 的 "2D Pose Estimate" 重新定位 2. 检查激光雷达数据 `ros2 topic echo /scan` ### SLAM 建图效果不好 1. 机器人移动速度适中 2. 确保环境特征丰富 3. 避免快速旋转 ### 机器人位置还是上一次 1. 结束gazebo进程`pkill -9 gzclient`