docs(readme): clarify mapping and Nav2 multi-terminal workflow

- Document per-terminal commands for Cartographer SLAM and map save path
- Document Nav2 two-terminal flow and custom map:= usage
- Warn against pasting blocking launch commands in one shell
- Fix Docker comment: compose service name is go2_sim
- Sync README_EN.md with the same structure

Made-with: Cursor
This commit is contained in:
lulijing
2026-04-10 13:53:16 +08:00
parent 239dda8530
commit ed0ef0f437
2 changed files with 119 additions and 15 deletions

View File

@@ -48,7 +48,7 @@ The following commands cover the main Docker workflow:
```bash
cd go2_sim_ws/src/docker
docker compose up -d --build --remove-orphans # Build containers
docker compose up -d go2_sim # Start container in detached mode
docker compose up -d go2_sim # Start in detached mode; go2_sim is the compose service name
docker compose ps # List containers
docker compose exec go2_sim bash # Enter container
docker compose down # Remove containers
@@ -85,20 +85,71 @@ ros2 service call /robot1/robot_behavior_command quadropted_msgs/srv/RobotBehavi
```
## 2.3 Mapping and Navigation
For mapping, run the following commands in terminal:
**Multiple terminals are required.** `ros2 launch ...` blocks the shell until you stop it with Ctrl+C. For mapping you must run **Gazebo, Cartographer, and teleop** at the same time, so use **separate terminals** (or tmux/screen panes). **Do not** paste all commands into one terminal in sequence—the first `launch` will block and the rest will never run.
**In every new terminal**, load the workspace:
```bash
cd go2_sim_ws
source install/setup.bash
```
### Mapping (Cartographer SLAM)
1. **Terminal 1 — Gazebo** (extended sensors, warehouse world):
```bash
ros2 launch gazebo_sim launch.py sensors:=true world:=warehouse.sdf
ros2 launch cartographer go2_cartographer.launch.py
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/robot1/cmd_vel # keyboard control
ros2 run nav2_map_server map_saver_cli -t map -f warehouse_map # save map
```
2. **Terminal 2 — Cartographer + RViz**:
```bash
ros2 launch cartographer go2_cartographer.launch.py
```
3. **Terminal 3 — Keyboard teleop (strongly recommended)** so the robot explores; otherwise the map will stay poor or incomplete.
```bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/robot1/cmd_vel
```
4. **Terminal 4 — Save the occupancy grid** (run when you are happy with the map; writes `warehouse_map.yaml` and `warehouse_map.pgm` in the **current directory**):
```bash
cd go2_sim_ws
source install/setup.bash
mkdir -p maps_out && cd maps_out
ros2 run nav2_map_server map_saver_cli -t map -f warehouse_map
```
If you open a fresh terminal elsewhere, `cd` into `go2_sim_ws`, `source install/setup.bash`, then `cd` to the save directory and run `map_saver_cli`. For Nav2, pass the **absolute path** to `warehouse_map.yaml` as `map:=` (from `maps_out`, run `realpath warehouse_map.yaml`).
![alt text](images/image-21.png)
For navigation, run:
### Navigation (Nav2)
When using the bundled warehouse map, keep the same world as for mapping (`warehouse.sdf`).
1. **Terminal 1 — Gazebo**:
```bash
ros2 launch gazebo_sim launch.py sensors:=true world:=warehouse.sdf
```
2. **Terminal 2 — Nav2** (default map: installed `navigation2/maps/warehouse_map.yaml`):
```bash
ros2 launch navigation2 go2_navigation2.launch.py
```
To use a map you saved yourself:
```bash
ros2 launch navigation2 go2_navigation2.launch.py map:=/absolute/path/to/go2_sim_ws/maps_out/warehouse_map.yaml
```
Set the initial pose and goal in RViz; Nav2 plans and executes—keyboard teleop is not required as the primary interface.
![alt text](images/image-22.png)