宇树go2w+ros2 humble+mid360+fastlio2实现
主播机器人工程大四,能力有限,许多地方用了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) | 一键安装与构建脚本 |
所有评论(0)