功能概览
v1.0 基于 ROS1 Noetic,面向宇树 G1 和 Go2 平台,提供完整的机器人自主导航解决方案。
实时建图
LIO-SAM + LIORF 双 SLAM 算法,支持室内外环境自适应,高精度点云重建与地图保存。
自主导航
A* 全局路径规划 + DWA 局部避障,厘米级定位,支持动态障碍物绕行与安全急停。
路点管理
可视化路点编辑,拖拽调整位置朝向,多点巡航,避障模式切换与回调联动。
Web 管理端
Vue 3 + Flask 架构,地图管理、导航控制、进程管理一体化,支持跳过登录直接使用。
硬件驱动
Unitree SDK2 控制 G1/Go2 运动,Livox MID360 激光雷达驱动,IMU + GPS 多传感器融合。
进程管理
内置进程管理器(端口 9000),Web 面板实时查看状态,支持手动启停与日志下载。
底层导航系统
系统架构
系统采用四层模块化架构,从底层驱动到上层界面层层解耦:
数据流
激光雷达 → Livox驱动 → /velodyne_points → SLAM/LIORF
IMU → 驱动节点 → /imu/data → 融合定位
目标点 → 全局规划器 → 全局路径 → 局部规划器 → 速度指令 → G1机器人
环境安装
系统要求
- Ubuntu 20.04 + ROS Noetic
- GTSAM 4.0+、Google Glog、GFlags
- Livox SDK2
- Unitree SDK2
安装 ROS 依赖
sudo apt install -y \
ros-noetic-velodyne-msgs ros-noetic-teleop-twist-keyboard \
ros-noetic-robot-localization ros-noetic-controller-interface \
ros-noetic-joint-state-controller ros-noetic-joint-state-publisher \
ros-noetic-robot-state-publisher ros-noetic-controller-manager \
ros-noetic-effort-controllers ros-noetic-tf2-sensor-msgs \
ros-noetic-joint-trajectory-controller ros-noetic-xacro ros-noetic-rviz
安装 GTSAM
sudo apt install libgtsam-dev libgtsam-unstable-dev
sudo apt install libgoogle-glog-dev libgflags-dev
安装 Python 依赖
pip3 install -r requirements.txt
编译部署
1. 编译 Livox SDK2
git clone https://github.com/Livox-SDK/Livox-SDK2.git ~/Livox-SDK2
cd ~/Livox-SDK2 && mkdir build && cd build
cmake .. && make -j$(nproc) && sudo make install
2. 编译 Unitree SDK2
mkdir -p ~/navsys/libs && cd ~/navsys/libs
git clone https://github.com/unitreerobotics/unitree_sdk2.git
cd unitree_sdk2 && mkdir build && cd build
cmake .. && make -j$(nproc) && sudo make install
3. 编译 ROS 工作空间
cd ~/navsys
catkin_make
source devel/setup.bash
SLAM 建图
系统集成 LIO-SAM-MID360 和 LIORF 两种 SLAM 算法,支持室内和室外环境。
实时建图
# 机器人端:启动驱动 + 建图
roslaunch base_driver base_driver_g1.launch
roslaunch lio_sam run_no_view.launch
# 本地端:可视化(需配置 ROS_MASTER_URI)
roslaunch lio_sam rviz.launch
保存地图
rosservice call /lio_sam/save_map 0.2 'map_name'
离线建图(数据回放)
# 录制数据
rosbag record -O mapping_data /imu/data /velodyne_points /fix
# 回放建图
roslaunch lio_sam run.launch
rosbag play --clock mapping_data.bag
通过 Web 端建图
在管理界面地图页面点击开始建图,选择室内/室外环境,遥控机器人行走后点击结束建图保存。系统通过 process_manager 自动管理建图进程。
硬件驱动
Unitree G1 机器人
通过 Unitree SDK2 C++ 库控制 G1 运动。base_driver 进程将 /cmd_vel 速度指令转换为 G1 步态控制命令。
roslaunch base_driver base_driver_g1.launch
Livox MID360 激光雷达
通过 livox_ros_driver2 驱动,发布 /velodyne_points 话题供 SLAM 和导航使用。
传感器融合
IMU + 里程计 + LiDAR 多传感器融合,通过 liorf_localization 提供稳定的实时定位。
键盘遥控(调试用)
rosrun teleop_twist_keyboard teleop_twist_keyboard.py -r /cmd_vel:=/cmd_vel_joy
配置文件
ProcessList.txt — 进程管理配置
#name,command,log2file,autostart,autorestart
roscore,roscore,1,1,1
base_driver,roslaunch base_driver base_driver_g1.launch,1,0,1
navigation,sleep 3 && roslaunch navigation navigation.launch,1,0,0
nav_server,cd /root/navsys/web/server/nav_server && python3 run.py,0,1,1
网络配置
# 多机 ROS 通信
export ROS_MASTER_URI=http://192.168.55.2:11311
export ROS_HOSTNAME=192.168.55.7
# 防火墙(如本地无法可视化)
sudo ufw allow 11311/tcp
静态 IP 绑定
| 设备 | MAC | IP |
|---|---|---|
| G1 机器人 | F0:D4:15:DF:7C:21 | 192.168.55.4 |
| 导航主机 | — | 192.168.55.2 |
上层管理界面
快速开始
1. 启动后端服务
cd web/server/nav_server && python3 run.py
2. 打开管理端
浏览器访问 http://localhost:9001,输入服务器地址后进入主页。支持跳过登录直接使用。
3. 主页仪表盘
展示机器人状态(待机/运行)、已加载地图、路点数量。提供导航和地图管理的快捷入口。
地图管理
新建地图(SLAM 建图)
点击开始建图,弹出对话框选择室内/室外环境。确认后系统通过 process_manager 启动 base_driver + liorf 建图进程。页面每秒刷新实时位姿(X/Y/Z/Yaw)。完成后点击结束建图,输入地图名称保存。
设置启动点
进入地图的启动点设置页,地图上显示绿色箭头标记初始位姿。拖拽/旋转箭头对准机器人实际位置后保存。
地图列表
查看所有已保存地图(ID/名称/环境/创建时间),支持设置路点和启动点操作。
路点编辑
在地图上可视化编辑导航目标点,所有路点以蓝色箭头显示。
- 添加路点:点击工具栏按钮,在地图原点生成新箭头
- 拖拽调整:拖拽箭头移动位置,旋转调整朝向
- 编辑属性:双击箭头弹出编辑框,设置编号、名称、避障模式、回调地址
- 避障模式:0-不避障 / 1-停障 / 2-绕障
- 复制路点:从其他地图复制路点配置
- 清空路点:删除当前地图所有路点
系统配置
在设置页面管理键值对配置,支持添加、修改和删除。
常用配置项
| 配置名 | 说明 | 示例值 |
|---|---|---|
| default_map_id | 默认加载的地图 ID | 1 |
| default_map_path | 地图文件存储根目录 | /home/unitree/maps |
进程管理
系统内置进程管理器(端口 9000),负责 ROS 进程的生命周期管理。
管理的进程
| 进程名 | 说明 |
|---|---|
| roscore | ROS 主节点,必须最先启动 |
| base_driver | G1 底层驱动 + LiDAR 驱动 |
| navigation | 导航系统(global_planner + local_planner + liorf_localization) |
| nav_server | Flask API 服务(端口 9001) |
Web 面板
访问 http://localhost:9000 查看进程状态面板,支持手动启动/停止各进程、下载日志。
常见问题
Q: 无法连接机器人?
A: ping 192.168.55.2 检查网络连通性,确认 ROS_MASTER_URI 和 ROS_HOSTNAME 环境变量设置正确。必要时执行 sudo ufw allow 11311/tcp 开放防火墙。
Q: 建图出现重影?
A: 检查 IMU 数据是否正常 rostopic echo /imu/data;确认 GPS 固定状态 rostopic echo /fix(status.status 应为 0);尝试降低录制回放速率。
Q: 导航偏移严重?
A: 初始位姿偏差导致。在设置启动点页面重新校正当前位置后保存。
Q: Web 页面加载不出地图?
A: 确认地图文件存在于配置的路径中,检查 nav_server 后端服务是否正常运行。
Q: 如何调试 ROS 话题?
A: rostopic list 查看所有话题,rostopic echo /topic_name 查看实时数据,rosnode info /node_name 查看节点详情。