Files
ROS2-Gazebo-GO2/README.md
lulijing ed0ef0f437 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
2026-04-10 13:53:16 +08:00

140 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[English Version/英文版](README_EN.md)
# 1. 项目描述
本项目为宇树机器狗系列第一章ROS2-Gazebo仿真的基础项目仓库该仓库会随着系列项目的推进不定时进行更新当前计划可查看本人飞书查看项目情况[项目飞书](https://ai.feishu.cn/wiki/CVpbwLIiMiwGnekKjhMcLXTRnag?from=from_copylink),这个项目预计将会是一个超长期项目。
# 2. 项目使用
## 2.1 直接编译使用
进入到工作空间
```bash
cd go2_sim_ws
colcon build
source install/setup.bash
```
`gazebo_sim` 会在 `source` 后自动设置 **Gazebo 模型搜索路径**`GZ_SIM_RESOURCE_PATH` / `IGN_GAZEBO_RESOURCE_PATH`)以及 **CycloneDDS** 配置文件路径(`CYCLONEDDS_URI` 指向包内 `dds/cyclonedds.xml`,避免使用 `file://~/...` 导致 `~` 无法展开)。若需使用自己的 DDS 配置,可在 `source` 之后执行 `unset CYCLONEDDS_URI` 或重新 `export` 为绝对路径(`file:///home/...`)。
![alt text](images/image-17.png)
启动,第一次启动会比较久,因为需要下载相应的场景资源。
```bash
ros2 launch gazebo_sim launch.py
```
成功启动后会如下图所示。
![alt text](images/image-18.png)
本项目配备了一个狗的前置普通单目摄像头用以模拟GO2本身的前置摄像头同时配备了两个激光雷达一个为模拟GO2的前置L1激光雷达一个为模拟外界的VLP16激光雷达两个激光雷达都可同时发布LaserScan类型数据和PointCloud2类型数据为后续的建图和导航工作提供了便利而后续也会更新加入D435i摄像头已经加入D435i摄像头
```bash
cd go2_sim_ws
source install/local_setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/robot1/cmd_vel
```
在终端中执行上述命令后就可以使用键盘对其进行简单的控制了,同时可以使用下面的服务完成对机器狗的控制,支持的服务有walk、up、sit分别对应走、站、趴。
```bash
ros2 service call /robot1/robot_behavior_command quadropted_msgs/srv/RobotBehaviorCommand "{command: 'walk'}"
```
## 2.2 docker使用
在使用docker前请简单的阅读docker搭建流程指南因为每个人的情况还是会有些许差别而为我使用的是外挂卷的形式完成的任务。
使用下面的命令可以很快的帮您完成想要的操作。
```bash
cd go2_sim_ws/src/docker
docker compose up -d --build --remove-orphans #容器构建
docker compose up -d go2_sim #启动容器,-d 为后台运行go2_sim 为 compose 中的服务名
docker compose ps #容器查看
docker compose exec go2_sim bash #进入容器
docker compose down #容器删除
```
进入到docker后可以按照前面直接安装的操作来
```bash
colcon build
source install/setup.bash
```
![alt text](images/image-19.png)
启动,第一次启动会比较久,因为需要下载相应的场景资源。
```bash
ros2 launch gazebo_sim launch.py # 启动无扩展传感器go2
ros2 launch gazebo_sim launch.py sensors:=true world:=warehouse.sdf # 启动带扩展传感器go2,并选定地图
```
成功启动后会如下图所示。
![alt text](images/image-20.png)
本项目配备了一个狗的前置普通单目摄像头用以模拟GO2本身的前置摄像头同时配备了两个激光雷达一个为模拟GO2的前置L1激光雷达一个为模拟外界的VLP16激光雷达两个激光雷达都可同时发布LaserScan类型数据和PointCloud2类型数据为后续的建图和导航工作提供了便利而后续也会更新加入D435i摄像头。
```bash
cd go2_sim_ws
source install/local_setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/robot1/cmd_vel
```
在终端中执行上述命令后就可以使用键盘对其进行简单的控制了,同时可以使用下面的服务完成对机器狗的控制,支持的服务有walk、up、sit分别对应走、站、趴。
```bash
ros2 service call /robot1/robot_behavior_command quadropted_msgs/srv/RobotBehaviorCommand "{command: 'walk'}"
```
## 2.3 建图和导航
**是否需要多个终端**:需要。`ros2 launch ...` 会持续占用当前终端直到你 Ctrl+C 结束;建图时要让 **Gazebo、Cartographer、键盘遥控** 同时运行,因此必须在 **不同终端**(或 tmux/screen 分屏)中分别启动。**不要**把下面多条 `launch`/`run` 无修饰地粘进同一个终端顺序执行,否则第一条会一直阻塞,后面的命令不会执行。
**每个新终端的公共前提**(在仓库根目录进入工作空间并加载环境):
```bash
cd go2_sim_ws
source install/setup.bash
```
### 建图Cartographer SLAM
1. **终端 1 — Gazebo 仿真**(带扩展传感器与仓库世界):
```bash
ros2 launch gazebo_sim launch.py sensors:=true world:=warehouse.sdf
```
2. **终端 2 — Cartographer 与 RViz**
```bash
ros2 launch cartographer go2_cartographer.launch.py
```
3. **终端 3 — 键盘遥控(强烈建议)**:控制机器狗在环境中移动,激光才能扫到足够区域,地图质量才有保障。
```bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/robot1/cmd_vel
```
4. **终端 4 — 保存占据栅格地图**(建图效果满意后再执行;会在**当前工作目录**生成 `warehouse_map.yaml``warehouse_map.pgm`
```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
```
若你在其他目录新开终端,请先 `cd``go2_sim_ws``source install/setup.bash`,再 `cd` 到保存目录后执行 `map_saver_cli`。导航时把 `map:=` 设为该 `warehouse_map.yaml` 的**绝对路径**(在 `maps_out` 下可执行 `realpath warehouse_map.yaml` 查看)。
![alt text](images/image-21.png)
### 导航Nav2
使用功能包自带的 `warehouse` 地图时,仿真世界需与建图时一致(仍为 `warehouse.sdf`)。
1. **终端 1 — Gazebo**
```bash
ros2 launch gazebo_sim launch.py sensors:=true world:=warehouse.sdf
```
2. **终端 2 — Nav2**(默认加载已安装的 `navigation2/maps/warehouse_map.yaml`
```bash
ros2 launch navigation2 go2_navigation2.launch.py
```
若使用你在建图步骤中自行保存的地图,请传入 **绝对路径**(指向 `.yaml`
```bash
ros2 launch navigation2 go2_navigation2.launch.py map:=/绝对路径/go2_sim_ws/maps_out/warehouse_map.yaml
```
启动后在 RViz 中使用 Nav2 插件设置初始位姿与目标点即可;导航栈会自动规划路径,**不必**再开键盘遥控作为主控方式。
![alt text](images/image-22.png)