# master_launch.py 使用指南 ## 启动顺序 ``` t=0s 底盘驱动 + EKF + TF + IMU (origincar_bringup) t=2s 激光雷达 (lslidar_driver) t=5s SLAM 建图 (slam_toolbox) t=8s Nav2 导航栈 t=10s VLM 图生文 + TTS 语音播报 ``` 每个阶段依赖前一个阶段就绪,属于**严格时间线启动**,不可调换。 --- ## 参数一览 | 参数 | 默认值 | 说明 | |---|---|---| | `use_base` | true | 底盘驱动 + EKF + TF | | `use_lidar` | true | 激光雷达 (lsn10) | | `use_slam` | true | slam_toolbox 建图 | | `use_nav2` | true | Nav2 导航栈 | | `use_vlm` | true | VLM 图生文 + TTS | | `use_tts` | true | TTS 语音播报开关 | | `akmcar` | true | 阿克曼底盘 (false=差速) | | `carto_slam` | false | 使用 Cartographer 替代 EKF | | `vlm_host` | http://192.168.10.189:8000 | VLM 推理服务地址 | | `use_sim_time` | false | 使用仿真时间 | --- ## 常用命令 ### 全部启动 ```bash ros2 launch my_robot_bringup master_launch.py ``` ### 只调试底盘 ```bash ros2 launch my_robot_bringup master_launch.py use_lidar:=false use_slam:=false use_nav2:=false use_vlm:=false ``` ### 只建图(底盘 + 雷达 + SLAM) ```bash ros2 launch my_robot_bringup master_launch.py use_nav2:=false use_vlm:=false ``` ### 只启动 VLM(调试图生文) ```bash ros2 launch my_robot_bringup master_launch.py use_base:=false use_lidar:=false use_slam:=false use_nav2:=false ``` ### 底盘 + 雷达 + SLAM + 导航(不加 VLM) ```bash ros2 launch my_robot_bringup master_launch.py use_vlm:=false use_tts:=false ``` ### 更换 VLM 服务地址 ```bash ros2 launch my_robot_bringup master_launch.py vlm_host:=http://192.168.10.200:8000 ``` ### 差分底盘模式 ```bash ros2 launch my_robot_bringup master_launch.py akmcar:=false ``` ### 使用 Cartographer 替代 EKF ```bash ros2 launch my_robot_bringup master_launch.py carto_slam:=true ``` ### 使用自定义 SLAM 参数 ```bash ros2 launch my_robot_bringup master_launch.py slam_params_file:=/path/to/my_slam.yaml ``` ### 使用自定义 Nav2 参数 ```bash ros2 launch my_robot_bringup master_launch.py nav2_params_file:=/path/to/my_nav2.yaml ``` --- ## 前置条件 1. **VLM 服务** — WSL 中先启动 `python vlm_server.py`(如需使用 VLM) 2. **Portproxy 转发** — Windows 上管理员 PowerShell 执行 `setup_vlm_forward.ps1`(仅需一次,IP 不变则不用重跑) 3. **重刷环境** — 启动前清理残留进程: ```bash pkill -f ros2; pkill -f espeak; pkill -f ffplay ``` --- ## 网络架构(VLM 相关) ``` 机器人 (192.168.10.x) ↓ http://192.168.10.189:8000 Windows 宿主机 (IP 需固定) ↓ netsh portproxy → 127.0.0.1:8000 WSL2 vlm_server.py ``` - Windows IP 不变 → 一切正常 - Windows IP 变化 → 重跑 `setup_vlm_forward.ps1`,启动时传 `vlm_host:=http://新IP:8000` ## 改动的地方 master_launch.py 变更内容 阶段: 1 (t=0s) 原来: 底盘 + EKF + TF + IMU 现在: 不变 ──────────────────────────────────────── 阶段: 2 (t=2s) 原来: 激光雷达 现在: 不变 ──────────────────────────────────────── 阶段: 3 (t=4s) 原来: — 现在: 障碍物检测 (obstacle_scanner.launch.py) ──────────────────────────────────────── 阶段: 4 (t=5s) 原来: SLAM Toolbox 现在: Map Server + AMCL 定位 (预建地图替代 SLAM) ──────────────────────────────────────── 阶段: 5 (t=7s) 原来: Nav2 导航栈 现在: Hybrid A* 路径规划 + Pure Pursuit 轨迹跟随 ──────────────────────────────────────── 阶段: 6 (t=10s) ● Bash(rm -f /c/Users/DHQ/master_launch_new.py) ⎿  Done ● 修改完成。以下是改动总结: master_launch.py 变更内容 ┌───────────┬───────────────────────┬────────────────────────────────────────────┐ │ 阶段 │ 原来 │ 现在 │ ├───────────┼───────────────────────┼────────────────────────────────────────────┤ │ 1 (t=0s) │ 底盘 + EKF + TF + IMU │ 不变 │ ├───────────┼───────────────────────┼────────────────────────────────────────────┤ │ 2 (t=2s) │ 激光雷达 │ 不变 │ ├───────────┼───────────────────────┼────────────────────────────────────────────┤ │ 3 (t=4s) │ — │ 障碍物检测 (obstacle_scanner.launch.py) │ ├───────────┼───────────────────────┼────────────────────────────────────────────┤ │ 4 (t=5s) │ SLAM Toolbox │ Map Server + AMCL 定位 (预建地图替代 SLAM) │ ├───────────┼───────────────────────┼────────────────────────────────────────────┤ │ 5 (t=7s) │ Nav2 导航栈 │ Hybrid A* 路径规划 + Pure Pursuit 轨迹跟随 │ ├───────────┼───────────────────────┼────────────────────────────────────────────┤ │ 6 (t=10s) │ VLM + TTS │ 不变 │ └───────────┴───────────────────────┴────────────────────────────────────────────┘ 具体改动点 1. 移除:cyy_slamtoolbox、gc_navigation2_slamtoolbox、slam_toolbox 节点、nav2_bringup launch 2. 新增:obstacle_scanner 节点(发布 /obstacles) 3. 新增:map_server + amcl + lifecycle_manager 用于定位 4. 新增:grid_astar_theta_node(路径规划,发布 /plan) 5. 新增:topology_pure_pursuit_node.py(轨迹跟随,发布 /cmd_vel) 6. 话题对齐:planner 的 obstacles_topic 参数覆盖为 /obstacles(与 obstacle_scanner 发布的 topic 一致) 7. 原文件已备份为 master_launch.py.bak 常用命令 source /opt/ros/humble/setup.bash source ~/yiliao_ws/install/setup.bash 全部启动 ros2 launch my_robot_bringup master_launch.py 只调试底盘 ros2 launch my_robot_bringup master_launch.py use_lidar:=false use_obstacle:=false use_planner:=false use_vlm:=false 底盘 + 雷达 + 定位 + 规划跟踪(不开障碍物检测和 VLM) ros2 launch my_robot_bringup master_launch.py use_obstacle:=false use_vlm:=false 只启动 VLM(调试图生文) ros2 launch my_robot_bringup master_launch.py use_base:=false use_lidar:=false use_obstacle:=false use_planner:=false 底盘 + 雷达 + 障碍物检测 + 规划跟踪(不加 VLM) ros2 launch my_robot_bringup master_launch.py use_vlm:=false use_tts:=false 只做障碍物检测(不开规划不开 VLM) ros2 launch my_robot_bringup master_launch.py use_planner:=false use_vlm:=false 只做路径规划+跟踪(不开障碍物检测,靠预建地图) ros2 launch my_robot_bringup master_launch.py use_obstacle:=false use_vlm:=false 更换 VLM 服务地址 ros2 launch my_robot_bringup master_launch.py vlm_host:=http://192.168.10.200:8000 差分底盘模式 ros2 launch my_robot_bringup master_launch.py akmcar:=false 使用 Cartographer 替代 EKF ros2 launch my_robot_bringup master_launch.py carto_slam:=true 更换地图文件 ros2 launch my_robot_bringup master_launch.py map_file:=/path/to/my_map.yaml 更换规划器/跟踪器/AMCL 参数文件 ros2 launch my_robot_bringup master_launch.py planner_params_file:=/path/to/planner.yaml ros2 launch my_robot_bringup master_launch.py tracker_params_file:=/path/to/tracker.yaml ros2 launch my_robot_bringup master_launch.py amcl_params_file:=/path/to/amcl.yaml