主播机器人工程大四,能力有限,许多地方用了trae(有一说一pro 3刀的第一个月试用太爽了)帮我实现,有些地方还欠思考,欢迎大家指正。谢谢!

先说一下环境,通虚拟机桥接模式,网络编辑器桥接对象选择你和狗子网线连接的网卡,如果你的狗子用网线连接到路由器,那就直接选择你的WiFi网卡就行;我的电脑没有网口,用了一根网卡转usb的转换线,所以就选择这个usb网卡。狗子机载电脑ip:192.168.123.18 mid360:192.168.123.20。推荐后台挂着虚拟机,再trae用ssh连接虚拟机和狗子操作,巨方便。

ok,废话不多说直接上源码:https://github.com/zuyichengkuaishisu/go2w_slam_ws.git

后面还会有在狗子上驱动mid360的源码(非宇树官方驱动mid360),可以私聊我要,还有在狗子上自动在线标定的源码(这个如果用离线标定真的好烦,而且)。

## 架构说明

| 角色 | 说明 |

|------|------|

| **Go2 / Jetson** | 运行 livox_ros_driver2,发布点云与 IMU |

| **本机 (VM/PC)** | 通过 DDS 订阅话题,运行 Fast-LIO2 建图与定位 |

话题默认:`/livox/lidar`(CustomMsg)、`/livox/imu`。狗子需用 livox_ros_driver2 的 **CustomMsg** 格式,不能是普通 PointCloud2。

---

## 前置条件

- Ubuntu 22.04,ROS2 Humble

- 狗子与本机网络互通(有线或同一 WiFi)

- 狗子已发布 Mid360 的 `/livox/lidar` 与 `/livox/imu`

(后面会出一期关于如何在狗子上不用宇树官方的驱动程序启动mid360的博客,我的mid360的ysn码对不上,所以我用不了宇树官方的驱动)

---

## 一、安装与构建

### 1.1 一键安装(推荐)

```bash

cd /home/wzy/go2w_slam_ws

chmod +x scripts/install_fastlio.sh

./scripts/install_fastlio.sh

```

### 1.2 手动构建

若脚本失败,可参考脚本内步骤:安装 Livox-SDK2、Sophus(含 GCC 兼容补丁)、克隆 livox_ros_driver2 与 FAST_LIO2_ROS2,再 `colcon build --symlink-install`。

---

## 二、DDS 与网络(与 Go2 通信)

Unitree Go2 使用 CycloneDDS,本机需一致。

```bash

sudo apt install ros-humble-rmw-cyclonedds-cpp

```

每次运行前(或写入 `~/.bashrc`):

```bash

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

export ROS_DOMAIN_ID=0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

```

- **有线**:狗子常见 IP `192.168.123.18`,本机需同网段。  

- **WiFi**:连狗子热点(如 `go2` / `hotspot123`),并让 CycloneDDS 使用对应网卡。

---

## 三、话题确认

在本机确认能收到狗子话题:

```bash

source /opt/ros/humble/setup.bash

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

export ROS_DOMAIN_ID=0

ros2 topic list

```

应能看到 `/livox/lidar`、`/livox/imu`。若话题名不同,启动时重映射:

```bash

ros2 launch go2_fastlio mapping_mid360_go2.launch.py \

  lid_topic:=/你的/点云话题 imu_topic:=/你的/imu话题

```

---

## 四、运行建图

**环境与 source:**

```bash

cd /home/wzy/go2w_slam_ws

source /opt/ros/humble/setup.bash

source install/setup.bash

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

export ROS_DOMAIN_ID=0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

```

**一键启动 Fast-LIO2(默认假设狗子已开机自启 Mid360):**

```bash

./scripts/start_go2_fastlio.sh

```

- 默认:只在本机启动 Fast-LIO2(带 RViz)。  

- 如需远程拉起 Mid360,可指定:

  - `--remote-bg`:通过 `start_mid360_remote_bg.sh` 后台启动  

  - `--remote-block`:通过 `start_mid360_remote.sh` 前台启动  

  - `--remote-none`:保持默认(不远程启动)

- 其它选项:

  - `--no-rviz`:只跑 Fast-LIO2,不带 RViz  

  - `-- --ros-args ...`:`--` 之后直接传给 `ros2 launch`

**仅启动 Fast-LIO2 + RViz(不上狗子):**

```bash

ros2 launch go2_fastlio mapping_with_rviz.launch.py

```

- Registered Cloud(PointCloud2):`/cloud_registered`  

- Trajectory(Path):`/path`  

- Odometry:`/aft_mapped_to_init`  

- RViz 固定坐标系:`camera_init`  

仅启动 Fast-LIO2(无 RViz):

```bash

ros2 launch go2_fastlio mapping_mid360_go2.launch.py

```

**建议**:静止启动,启动后保持 10–20 秒再移动,详见 [TROUBLESHOOTING:effective feature num: 0](src/go2_fastlio/TROUBLESHOOTING.md#effective-feature-num-0average-residual--nan)。

---

## 五、保存地图

**推荐:按 s 保存(避免 Ctrl+C 崩溃)**  

建图时另开终端执行 `python3 scripts/save_map_on_key.py`,按 **s** 触发保存,地图写入 `Log/PCD/`。  但是这里有bug,博主一直报段错误,实在是不知道怎么解决

或调用服务:`ros2 service call /save_map std_srvs/srv/Empty`。

**备选:退出时保存**  

1. 编辑 `src/go2_fastlio/config/mid360_go2.yaml`:`pcd_save/pcd_save_en: true`,`pcd_save/interval: -1`。  

2. 首次保存前:`mkdir -p src/FAST_LIO2_ROS2/Log/PCD`。  

3. 正常建图,结束时 **Ctrl+C**(注意:当前 Fast-LIO2 在 Ctrl+C 时可能崩溃,建议使用按 s 保存)。

详细说明见 [TROUBLESHOOTING:如何保存地图](src/go2_fastlio/TROUBLESHOOTING.md#如何保存地图)。

---

## 六、外参标定(可选)

若出现 **点云倾斜、不与地面平行**,建议用 [LiDAR_IMU_Init](https://github.com/hku-mars/LiDAR_IMU_Init) 标定外参。LiDAR_IMU_Init 使用 ROS1,需单独建 ROS1 工作空间。详细步骤见 [scripts/LIDAR_IMU_INIT_CALIBRATION.md](scripts/LIDAR_IMU_INIT_CALIBRATION.md)。标定完成后,将得到的 `extrinsic_R`、`extrinsic_T`、`imu_time_offset` 写入 `src/go2_fastlio/config/mid360_go2.yaml`。

---

## 七、常见问题

| 现象 | 处理 |

|------|------|

| 收不到话题 | 检查 RMW、ROS_DOMAIN_ID、网络、防火墙 |

| `liblivox` 找不到 | `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib` |

| 点云无输出 | 确认狗子发布 **CustomMsg**,不是 PointCloud2 |

| 点云倾斜、不与地面平行 | 静止启动 15–20 秒;核对 imu_time_offset;用 LiDAR_IMU_Init 标定外参;见 [点云倾斜](src/go2_fastlio/TROUBLESHOOTING.md#点云倾斜不与地面平行) |

| effective feature num: 0、漂移 | 静止启动、有结构环境、时间偏移/外参;详见 [TROUBLESHOOTING](src/go2_fastlio/TROUBLESHOOTING.md) |

---

## 文档索引

| 文档 | 内容 |

|------|------|

| [src/go2_fastlio/TROUBLESHOOTING.md](src/go2_fastlio/TROUBLESHOOTING.md) | effective feature 0、点云倾斜、漂移排查、RViz 建图、保存地图 |

| [scripts/LIDAR_IMU_INIT_CALIBRATION.md](scripts/LIDAR_IMU_INIT_CALIBRATION.md) | LiDAR_IMU_Init 外参标定步骤(修正点云倾斜) |

| [src/go2_fastlio/config/mid360_go2.yaml](src/go2_fastlio/config/mid360_go2.yaml) | Fast-LIO2 配置(话题、外参、时间偏移、LIO/预处理/保存等) |

| [scripts/start_go2_fastlio.sh](scripts/start_go2_fastlio.sh) | 一键启动 Fast-LIO2,支持可选远程拉起 Mid360 |

| [scripts/run_fastlio.sh](scripts/run_fastlio.sh) | 仅在本机启动 Fast-LIO2(最简命令) |

| [scripts/start_mid360_remote(_bg).sh](scripts/start_mid360_remote_bg.sh) | 通过 SSH 在狗子上拉起 Mid360(前台/后台) |

| [scripts/install_fastlio.sh](scripts/install_fastlio.sh) | 一键安装与构建脚本 |

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。