# G1Nav_Fastlio2
**Repository Path**: EricGao2020/G1Nav_Fastlio2
## Basic Information
- **Project Name**: G1Nav_Fastlio2
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: dev/my_change
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-19
- **Last Updated**: 2026-07-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 宇树G1机器人 Docker容器部署HongTu/G1Nav2D仓库指南
## 文档说明
本文档整理了基于Ubuntu arm64架构(宇树G1机器人),通过Docker容器部署HongTu/G1Nav2D仓库的完整步骤、常见报错及解决方案,可直接用于复现部署流程。
## 一、环境基础信息
- 机器人系统:Ubuntu 20.04 arm64
- ROS版本:Noetic (ROS1)
- 核心依赖:Livox-SDK2、GTSAM、map_server、tf2-sensor-msgs等
- 容器名称:ros1_noetic_hongtu
- 镜像名称:ros1_noetic_arm64:v1
## 二、完整部署流程
### 2.1 启动/复用Docker容器
#### 2.1.1 启动新容器(首次部署)
```bash
docker run -it \
--name ros1_noetic_hongtu \
--net=host \
--privileged \
-v /home/unitree/HongTu:/root/HongTu \ # 映射代码目录
-v /dev:/dev \
-v /etc/localtime:/etc/localtime:ro \
ros1_noetic_arm64:v1 /bin/bash
```
#### 2.1.2 复用旧容器(非首次部署)
```bash
#启动docker
docker start fastlio2-nav
#进入docker
docker exec -it fastlio2-nav /bin/bash
#赋予xhost权限(转播docker的rviz gui)
DISPLAY=:0 XAUTHORITY=/run/user/1000/gdm/Xauthority xhost +SI:localuser:root
```
#### 2.1.3 容器基础操作
- 临时退出容器(保持运行):`Ctrl + P + Q`
- 退出并停止容器:`exit`
### 2.2 容器内环境初始化
#### 2.2.1 修复ROS GPG Key过期问题
```bash
# 删除过期Key
sudo apt-key del F42ED6FBAB17C654 2>/dev/null
# 验证Key是否删除(无输出则成功)
apt-key list | grep -i ros
# 导入最新ROS GPG Key
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 清理重复ROS源(可选,消除警告)
sudo rm /etc/apt/sources.list.d/ros1.list
# 更新源
sudo apt update
```
#### 2.2.2 ROS Environment
Append these lines to `/root/.bashrc` in the container:
```bash
source /opt/ros/noetic/setup.bash
export LIVOX_LIDAR_SDK_LIBRARY=/usr/local/lib/liblivox_lidar_sdk_shared.so
export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH
```
Reload:
```bash
source /root/.bashrc
```
#### 2.2.3 安装基础依赖
```bash
# 安装编译工具&ROS基础依赖
sudo apt install -y \
cmake g++ libusb-1.0-0-dev pkg-config \
curl gnupg2 lsb-release \
ros-noetic-map-server ros-noetic-tf2-sensor-msgs \
ros-noetic-amcl ros-noetic-move-base \
libboost-all-dev libtbb-dev libgtest-dev
```
### 2.3 编译安装Livox-SDK2(雷达驱动)
```bash
# 进入容器内的Livox-SDK2目录
cd /root/HongTu/Livox-SDK2
mkdir -p build && cd build
# 清空旧缓存(避免路径冲突)
rm -rf *
# 编译配置(适配arm64)
cmake \
-DCMAKE_SYSTEM_PROCESSOR=arm64 \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
..
# 编译(arm64用-j1,避免算力不足)
make -j1
# 安装+更新库缓存
sudo make install
sudo ldconfig
# 验证安装成功(输出liblivox_lidar_sdk.so即成功)
ls /usr/local/lib/liblivox*.so
```
### 2.4 编译安装GTSAM(fastlio依赖)
```bash
# 下载GTSAM源码
cd /root/Hongtu
git clone --depth 1 --branch 4.2.0 https://github.com/borglab/gtsam.git
cd gtsam && mkdir build && cd build
# 编译配置
cmake -DGTSAM_BUILD_EXAMPLES=OFF -DGTSAM_BUILD_TESTS=OFF ..
# 编译安装
make -j1
sudo make install
```
### 2.5 编译HongTu/G1Nav2D仓库
```bash
source /opt/ros/noetic/setup.bash
export LIVOX_LIDAR_SDK_LIBRARY=/usr/local/lib/liblivox_lidar_sdk_shared.so
export GTSAM_DIR=/root/HongTu/gtsam/build
export CMAKE_PREFIX_PATH=/root/HongTu/gtsam/build:/usr/local:$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=/root/HongTu/gtsam/build/gtsam:/usr/local/lib:$LD_LIBRARY_PATH
```
Then build:
```bash
cd /root/HongTu/G1Nav2D/src/livox_ros_driver2-master
rm -rf ../../build/ ../../devel/ ../../install/
./build.sh ROS1
cd /root/HongTu/G1Nav2D
catkin_make -DROS_EDITION=ROS1 --pkg livox_ros_driver2
catkin_make -DROS_EDITION=ROS1 --pkg fastlio
catkin_make -DROS_EDITION=ROS1
```
### 2.6 保存地图到指定目录
#### 2.6.1 主机端创建目录并赋权
```bash
# 机器人主机执行(非容器内)
mkdir -p /home/unitree/HongTu/map/
sudo chmod 777 /home/unitree/HongTu/map/
```
#### 2.6.2 容器内保存地图
```bash
# 容器内执行(映射路径:/root/HongTu ↔ /home/unitree/HongTu)
rosrun map_server map_saver map:=/projected_map -f /root/HongTu/map/mymap
# 验证保存成功(容器内查看)
ls /root/HongTu/map/
# 主机端验证
# ls /home/unitree/HongTu/map/
```
## 三、常见报错及解决方案
| 报错信息 | 报错原因 | 解决方案 |
|----------|----------|----------|
| `catkin_make: command not found` | 未加载ROS1环境变量 | 执行:`source /opt/ros/noetic/setup.bash` |
| `Could not find a package configuration file provided by "map_server"` | 未安装map_server依赖 | 执行:`sudo apt install ros-noetic-map-server` |
| `LIVOX_LIDAR_SDK_LIBRARY set to NOTFOUND` | Livox-SDK2未安装/路径未识别 | 1. 重新编译安装Livox-SDK2
2. 执行:`sudo ldconfig`
3. 导出环境变量:`export LIVOX_LIDAR_SDK_LIBRARY=/usr/local/lib/liblivox_lidar_sdk.so` |
| `CMake Error: The source directory "/root" does not appear to contain CMakeLists.txt` | 在Livox-SDK2根目录执行cmake | 进入build子目录后执行:`cmake ..` |
| `CMake Error: The current CMakeCache.txt directory ... is different` | 缓存路径与实际路径冲突 | 清空build目录:`rm -rf /root/Livox-SDK2/build/*` |
| `Couldn't save map file to ...` | 路径不存在/权限不足 | 1. 主机端创建目录:`mkdir -p /home/unitree/HongTu/map/`
2. 赋权:`sudo chmod 777 /home/unitree/HongTu/map/`
3. 容器内用`/root/HongTu/map/`路径保存 |
| `gedit: command not found`/`nano: command not found` | 容器未安装编辑器 | 安装nano(推荐):`sudo apt install -y nano`
编辑文件:`nano 目标文件路径` |
| `make: *** No rule to make target 'install'. Stop.` | 未执行cmake生成Makefile | 先执行:`cmake ..` 生成Makefile后再执行`make install` |
| `NO_PUBKEY F42ED6FBAB17C654` | ROS GPG Key过期/缺失 | 导入最新Key:`curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -` |
## 四、容器内文件编辑操作
### 4.1 安装编辑器
```bash
# 新手推荐nano(操作简单)
sudo apt install -y nano
# 可选:安装vim(功能强大)
sudo apt install -y vim
```
### 4.2 nano编辑器使用
```bash
# 打开文件
nano /root/HongTu/G1Nav2D/src/fastlio2/src/map_builder_node.cpp
# 核心操作
# 保存:Ctrl + O → 回车确认 → Ctrl + X 退出
# 撤销/删除:直接按Delete键
```
### 4.3 vim编辑器使用
```bash
# 打开文件
vim /root/HongTu/G1Nav2D/src/fastlio2/src/map_builder_node.cpp
# 核心操作
# 编辑模式:按 i
# 保存退出:Esc → :wq → 回车
# 强制退出(不保存):Esc → :q! → 回车
```
## 五、关键验证点
1. **Livox-SDK2安装成功**:`ls /usr/local/lib/liblivox*.so` 能看到`liblivox_lidar_sdk.so`;
2. **ROS环境正常**:`which catkin_make` 输出`/opt/ros/noetic/bin/catkin_make`;
3. **编译成功**:执行`./build.sh ROS1`无CMake错误,生成`livox_ros_driver2_node`可执行文件;
4. **地图保存成功**:`/home/unitree/HongTu/map/`下有`mymap.pgm`和`mymap.yaml`文件。
## 六、注意事项
1. arm64架构(Jetson/宇树G1)编译时需用`-j1`,避免内存溢出导致编译中断;
2. 容器内路径与主机路径映射关系:`/root/HongTu` ↔ `/home/unitree/HongTu`;
3. 所有ROS命令执行前需加载环境变量:`source /opt/ros/noetic/setup.bash`;
4. 开发环境下给目录赋`777`权限可快速解决权限问题,生产环境需按需缩小权限。
### 语音交互
基于[pyxiaozhi](https://github.com/huangjunsen0406/py-xiaozhi),ubuntu20.04默认python版本不符合,安装小智需要配置虚拟环境。
- 基础要求
Python版本:3.9 - 3.12
操作系统:Windows 10+、macOS 10.15+、Linux
音频设备:麦克风和扬声器设备
网络连接:稳定的互联网连接(用于AI服务和在线功能)
- 安装依赖
``` bash
cd PythonProject/py-xiaozhi-main/
pip install -r requirements.txt
```
- 语音导航至目标点简易版
1. 全局搜索关键词“电梯”,将所有“电梯”替换成你需要的关键词,例如“卧室”、“卫生间”等。
2. 在Pythonproject/point_nav/point2.py修改改点坐标,修改位置在该程序最底部。(坐标可以通过导航发布目标点时,监听/move_base/goal话题获取,手动输入,当前为测试版本,每个目标点为不同的启动程序)
- 导航到目标点MCP服务
``` bash
#以导航至电梯目标点为例
# 在该文件的第1232行,修改或添加导航至目标点的关键词
PythonProject/py-xiaozhi-main/src/application.py
# 在该文件的第334行,修改或添加mcp服务的注册信息
PythonProject/py-xiaozhi-main/src/mcp/mcp_server.py
#在该文件的第15至第17行,选择该mcp服务拉起的python程序,以及启动该程序的编译器路径
PythonProject/py-xiaozhi-main/src/mcp/tools/daohang_dianti/tools.py
#在该文件的第10至第13行,选择拉起的导航点程序,以及启动该程序的编译器路径
PythonProject/daohang/daohang-dianti.py
#在该文件修改目标点的坐标
PythonProject/point_nav/point1.py
```
- 启动语音程序
``` bash
cd PythonProject/py-xiaozhi-main/
python3 main.py
```
实现语音交互导航需要同时开启语音、运控、导航。