132 lines
7.2 KiB
Markdown
132 lines
7.2 KiB
Markdown
|
|
# Go2 机器狗导航操作指南
|
|||
|
|
|
|||
|
|
适用目录:`~/go2_autonomous_navigation`。本指南按当前仓库中的脚本和 ROS 2 节点整理,操作顺序为:准备环境、建图(已有现场地图可跳过)、启动导航并定位、测试单点目标、录制航点、执行巡检。
|
|||
|
|
|
|||
|
|
## 1. 启动前检查
|
|||
|
|
|
|||
|
|
1. 确认机器狗电量充足,现场人员能随时停止机器狗,行走区域没有人员和临时障碍物。
|
|||
|
|
2. 确认机器狗与运行 ROS 2 的主机通过有线网络连接。脚本默认使用 `ens160`,实际接口配置见 `scripts/go2_runtime.env` 和 `scripts/go2_env.sh`。
|
|||
|
|
3. 建图、导航和航点标记启动文件都会启动部分机器人驱动节点;切换模式前先停止上一个模式,避免同时运行两套驱动或定位节点。
|
|||
|
|
4. 地图必须对应当前场地。仓库自带的 `src/go2_navigation2/maps/my_room.yaml` 只是示例地图,不要直接用于不匹配的场地。
|
|||
|
|
|
|||
|
|
当前目录没有 `install/setup.bash` 时,先在仓库根目录编译一次:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
source /opt/ros/humble/setup.bash
|
|||
|
|
source ~/unitree_ros2/cyclonedds_ws/install/setup.bash
|
|||
|
|
colcon build --symlink-install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
之后的 `scripts/` 启动脚本会自动加载 ROS 2、Unitree 和本仓库的环境。使用 RViz 的步骤需要在有图形桌面的会话中运行。
|
|||
|
|
|
|||
|
|
## 2. 建图并保存(已有现场地图可跳过)
|
|||
|
|
|
|||
|
|
终端 A:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
./scripts/go2_start_mapping.sh --rviz
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
确认 RViz 中地图持续更新,再用现场已有的遥控方式缓慢走遍需要导航的区域。`CONFIG.txt` 建议直线速度约 0.15–0.25 m/s、转弯角速度低于 0.2 rad/s,并重访部分区域以利于回环检测。本仓库没有提供遥控操作命令。
|
|||
|
|
|
|||
|
|
建图仍在运行时,终端 B 保存地图:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
./scripts/go2_save_map.sh competition_map
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
成功后应看到 `~/go2_maps/competition_map.yaml` 和 `~/go2_maps/competition_map.pgm`。保存成功后回到终端 A 按 `Ctrl+C`;如仍有建图残留进程,再使用 `./scripts/go2_stop_mapping.sh`。**不要在建图进程仍运行时启动导航。**
|
|||
|
|
|
|||
|
|
如果已有地图,不必重新建图,但应确认所选 `.yaml` 引用的 `.pgm` 存在,且地图确实对应现场。本机现有多份 `~/go2_maps/*.yaml`;本指南不替你决定哪一份用于现场。
|
|||
|
|
|
|||
|
|
## 3. 启动 Nav2、设置初始位姿、测试单点目标
|
|||
|
|
|
|||
|
|
在终端 A 指定实际要用的地图。以下以第 2 步新建的地图为例;使用已有地图时,把路径改成已核对的实际 `.yaml` 文件:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
export MAP_YAML="$HOME/go2_maps/competition_map.yaml"
|
|||
|
|
test -f "$MAP_YAML"
|
|||
|
|
./scripts/go2_start_nav.sh "$MAP_YAML"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
导航启动文件会启动机器狗驱动、激光扫描转换、AMCL 定位、Nav2 和(有桌面环境时)RViz,无需另启一套驱动。等待 RViz 显示地图和激光扫描后:
|
|||
|
|
|
|||
|
|
1. 用 **2D Pose Estimate** 在地图上标出机器狗的真实位置和朝向。
|
|||
|
|
2. 等待定位更新,核对地图中的机器人位置、朝向及激光扫描是否与现场一致。位置明显不符时重新设置初始位姿,不要发送导航目标。
|
|||
|
|
3. 用 **Nav2 Goal** 在已知空旷区域选一个近距离目标,拖出最终朝向,先验证单点导航。观察规划路径、障碍物和机器狗实际运动。
|
|||
|
|
4. 测试结束或需要关闭 Nav2 时,在终端 A 按 `Ctrl+C`。执行巡检前则保持 Nav2 运行。
|
|||
|
|
|
|||
|
|
`scripts/go2_start_nav.sh` 不带参数时会查找 `~/go2_maps/competition_map.yaml`。当前本机没有这个默认文件;若跳过建图,必须显式传入已有地图路径。
|
|||
|
|
|
|||
|
|
## 4. 录制巡检航点(需要时)
|
|||
|
|
|
|||
|
|
先保持第 3 步的 Nav2 和定位正常运行。仓库当前的 `config/ros2_patrol_routes/default.yaml` 已有三个航点;如果它们不属于本次选用的地图,请先备份并重新录制,不要直接执行。
|
|||
|
|
|
|||
|
|
终端 B 启动航点记录节点,**显式指定专用 RViz 使用的话题**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
source scripts/go2_env.sh nav
|
|||
|
|
ros2 run go2_patrol waypoint_recorder_node --ros-args \
|
|||
|
|
-p route_file:="$PWD/config/ros2_patrol_routes/default.yaml" \
|
|||
|
|
-p goal_topic:=/go2_patrol/goal_pose
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如需从零录制,先备份原路线,再在记录节点运行期间用另一个已加载同样 ROS 环境的终端清空:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cp config/ros2_patrol_routes/default.yaml config/ros2_patrol_routes/default.yaml.bak
|
|||
|
|
ros2 service call /go2_patrol/clear_route std_srvs/srv/Trigger '{}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
终端 C 打开专用 RViz:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
./scripts/go2_start_patrol_rviz.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
在专用 RViz 中选 **2D Goal Pose**,确认工具话题是 `/go2_patrol/goal_pose`,然后逐个点击航点位置并拖出目标朝向。此话题只供记录节点订阅,**不要把普通导航 RViz 中的 Nav2 Goal 当作安全标点工具**。每标一个点,记录节点都会更新 `config/ros2_patrol_routes/default.yaml`;录完后检查文件中的顺序、坐标和朝向,再按 `Ctrl+C` 关闭记录节点和专用 RViz。
|
|||
|
|
|
|||
|
|
注意:现有 `scripts/go2_record_waypoints.sh` 虽打印 `/go2_patrol/goal_pose`,但未把该话题作为节点参数传入;直接将它与专用 RViz 配对可能录不到点。上面的显式参数命令与专用 RViz 配置一致。
|
|||
|
|
|
|||
|
|
## 5. 执行与取消巡检
|
|||
|
|
|
|||
|
|
保持第 3 步的 Nav2 运行,确认已重新设置正确初始位姿、单点导航正常,且 `config/ros2_patrol_routes/default.yaml` 中所有启用的航点都对应当前地图。
|
|||
|
|
|
|||
|
|
终端 B 启动巡检执行器(启动后不会立刻移动):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
./scripts/go2_start_patrol_executor.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
终端 C 开始一次巡检:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
./scripts/go2_run_patrol.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
执行器依次向 Nav2 发送航点目标,到点后检查并调整朝向,默认每点停留 3 秒。运行中需要取消时,在已加载本仓库 ROS 环境的终端调用:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd ~/go2_autonomous_navigation
|
|||
|
|
source scripts/go2_env.sh nav
|
|||
|
|
ros2 service call /go2_patrol/cancel std_srvs/srv/Trigger '{}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
确认机器狗停止后,按 `Ctrl+C` 结束巡检执行器和 Nav2。需要再次巡检时,先检查定位及路线仍与地图一致。
|
|||
|
|
|
|||
|
|
## 6. 当前文档和网页的差异
|
|||
|
|
|
|||
|
|
- `CONFIG.txt`、`robot_navigation.sh`、`waypoint_setup.sh`、`patrol_mission.sh` 仍引用旧目录 `~/go2_robot_system`,不要原样复制其中的启动命令。上面使用的是当前仓库中的脚本。
|
|||
|
|
- `go2_dashboard/README.md` 所写的网页启动脚本在当前仓库中不存在,网页页面也没有文档所说的“设置初始位姿”“确认定位”按钮。首次操作建议按本指南使用 RViz。
|
|||
|
|
- 网页地图编辑路线保存在 `go2_dashboard/data/inspection_routes/default.json`,但当前网页“开始巡检”后端读取的是 `config/ros2_patrol_routes/default.yaml`。不要以为保存了网页地图路线就已替换实际执行的 ROS 航点路线。
|
|||
|
|
|
|||
|
|
相关实现:`scripts/go2_start_mapping.sh`、`scripts/go2_save_map.sh`、`scripts/go2_start_nav.sh`、`scripts/go2_start_patrol_executor.sh`、`scripts/go2_run_patrol.sh`、`src/go2_navigation2/launch/go2_nav2.launch.py`、`src/go2_patrol/config/go2_patrol_waypoints.rviz`。
|