基于 ROS 2 Humble + Isaac Sim 的 Unitree G1 导航仿真与实机前期数据链路整理。当前仓库采用两条并行主线:
- 仿真主线:G1 作为上层导航主体,Carter 作为隐藏运动代理,通过
g1_proxy_bridge将 Isaac Sim 中 Carter 的传感器与运动接口抽象为/g1/*,接入 3D LiDAR + IMU + FAST-LIO 做建图/定位。- 实机主线 v0.2:先不让机器人移动,优先打通 5060Ti 实机电脑 ↔ G1 机载电脑 的有线 DDS/ROS2 数据接收、录包、实时点云与地图生成,为后续 Nav2 和真实底盘接口做准备。
Safety note: 实机阶段默认只做只读数据采集与建图,不运行会让 G1 移动的官方导航、
g1_loco_client move、set_velocity或任何速度控制命令。
- ROS 2 Humble 基础导航链路学习与验证
- TurtleBot3 / Gazebo / Cartographer / Nav2 入门闭环
- Isaac Sim 中加载 Nova Carter ROS2 Navigation Sample
- Unitree G1 URDF 导入 Isaac Sim
- G1 绑定 Carter,Carter 作为隐藏运动代理
- 编写
g1_proxy_bridge,统一抽象/g1/*上层接口 - 发布
/g1/cmd_vel、/g1/odom、/g1/lidar_points、/g1/imu - 使用 FAST-LIO 对 3D LiDAR + IMU 做建图测试
- 明确 3090 与 5060Ti 的分工:3090 做 Isaac Sim/离线仿真,5060Ti 连接 G1 实机
- 明确实机阶段先做有线 DDS 接收、录 bag、点云显示、2D 地图生成
- 将 WiFi 作为 ssh/ping 辅助连接,DDS 点云默认切到有线连接排查
- 新增实机安全说明:不让机器人动,不运行官方移动/导航命令
- 新增实机只读检查脚本与录包脚本模板
- 新增实机阶段文档:有线 DDS、数据采集、官方 SLAM → 2D map → Nav2 路线
- 将 FAST-LIO 定位结果统一接入
/g1/odom或/g1/pose - 将定位结果接入 Nav2,完成 Isaac Sim 中 A → B 目标点导航
- 在实机上完成只读点云/IMU/里程计 rosbag 记录
- 基于实机数据完成 3D/2D 地图生成
- 后续再接 Nav2
/cmd_vel到 G1 LocoClient 执行层
当前项目不是直接做完整的 G1 双足动力学控制,而是先验证“感知—建图—定位—导航”的上层软件链路。
核心原则:
- 先仿真、再实机:仿真中用 Carter 代理运动,实机中先只读采集数据;
- 先感知建图、后导航控制:实机阶段暂不碰运动控制;
- 坚持 3D LiDAR + IMU 路线:不把主线退化成
pointcloud_to_laserscan的 2D/scan; - 接口统一:仿真与实机都尽量向
/g1/*接口靠拢; - 安全优先:真实 G1 阶段任何移动命令都必须单独确认、单独隔离。
Isaac Sim Nova Carter Sample
↓
Carter 负责底层运动与仿真传感器
↓
G1 模型绑定到 Carter 并作为可见主体
↓
g1_proxy_bridge 将 Carter 接口抽象成 /g1/*
↓
FAST-LIO 使用 /g1/lidar_points + /g1/imu 建图定位
↓
后续 Nav2 使用 FAST-LIO 位姿结果进行导航
Unitree G1 onboard computer
├── unitree_sdk2-main
├── unitree_sdk2_python
└── sensors / official SLAM data
↓ wired network / DDS
5060Ti lab workstation
├── ~/G1_SLAM
├── g1_slam workspace
├── ROS 2 data receive
├── rosbag record
├── point cloud / map visualization
└── 2D pgm/yaml map generation
↓ later
Nav2 planning
↓ later, after safety isolation
G1 locomotion execution layer
| 场景 | 推荐配置 / 状态 |
|---|---|
| 仿真电脑 | RTX 3090 workstation |
| 实机电脑 | 5060Ti lab workstation |
| OS | Ubuntu 22.04 |
| ROS | ROS 2 Humble |
| Simulator | NVIDIA Isaac Sim |
| 仿真工作空间 | ~/mayibo/ws_g1 |
| 实机工作空间 | ~/G1_SLAM / g1_slam |
| 常用 ROS_DOMAIN_ID | 项目中常用 42,但以实际 DDS 配置为准 |
| 实机网络 | 优先有线,例如 enp6s0 |
| 仿真 LiDAR topic | /front_3d_lidar/lidar_points → /g1/lidar_points |
| 仿真 IMU topic | /chassis/imu → /g1/imu |
Isaac Sim 建议从干净终端启动,不要在 conda/ROS 环境已经污染的终端里直接启动。
g1-isaac-fastlio-nav2/
├── README.md
├── LICENSE
├── third_party.md
├── ROADMAP.md
├── docs/
│ ├── 00_project_overview.md
│ ├── 01_environment_setup.md
│ ├── 02_isaac_sim_scene_setup.md
│ ├── 03_g1_proxy_bridge.md
│ ├── 04_fast_lio_mapping.md
│ ├── 05_nav2_integration_plan.md
│ ├── 06_troubleshooting.md
│ ├── 07_real_robot_wired_dds.md
│ ├── 08_real_robot_data_pipeline.md
│ ├── 09_release_v0_2.md
│ ├── 10_safety_notes.md
│ └── progress_log.md
├── src/
│ └── g1_proxy_bridge/
├── launch/
│ └── g1_proxy_bridge.launch.py
├── config/
│ ├── fast_lio/
│ ├── nav2/
│ └── unitree/
├── scripts/
│ ├── check_topics.sh
│ ├── check_tf.sh
│ ├── record_bag.sh
│ ├── real_g1_network_readonly_check.sh
│ ├── record_real_g1_bag_readonly.sh
│ └── push_v02_update.sh
└── assets/
└── images/
mkdir -p ~/mayibo/ws_g1/src
cd ~/mayibo/ws_g1/src
git clone https://github.com/cs-yb633/g1-isaac-fastlio-nav2.gitcd ~/mayibo/ws_g1
source /opt/ros/humble/setup.bash
colcon build --symlink-install --packages-select g1_proxy_bridge
source install/setup.bash- 从干净终端启动 Isaac Sim;
- 打开保存好的 G1 + Carter 代理场景;
- 确认 ROS2 Bridge extension 已启用;
- 点击 Play;
- 在 ROS 2 终端检查 Carter 原始话题:
ros2 topic list
ros2 topic hz /front_3d_lidar/lidar_points
ros2 topic hz /chassis/imu
ros2 topic hz /chassis/odomcd ~/mayibo/ws_g1
source install/setup.bash
ros2 launch g1_proxy_bridge g1_proxy_bridge.launch.py如果只想做只读验证,不希望 /g1/cmd_vel 转发给 Carter,可以关闭速度转发:
ros2 launch g1_proxy_bridge g1_proxy_bridge.launch.py enable_cmd_vel_forwarding:=false./src/g1-isaac-fastlio-nav2/scripts/check_topics.sh预期看到:
/g1/cmd_vel
/g1/odom
/g1/lidar_points
/g1/imu
并且频率大致为:
/g1/lidar_points 约 35~40 Hz
/g1/imu 约 35~40 Hz
/g1/odom 约 35~40 Hz
仅限 Isaac Sim 代理场景。不要在实机阶段直接照抄这一步。
sudo apt install ros-humble-teleop-twist-keyboard
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r cmd_vel:=/g1/cmd_vel命令链路:
teleop_twist_keyboard
↓
/g1/cmd_vel
↓
g1_proxy_bridge
↓
/cmd_vel
↓
Isaac Sim Carter
↓
G1 跟随运动
实机阶段默认目标是:接收数据、录包、看点云、建图,不让机器人动。
cd ~/G1_SLAM
source /opt/ros/humble/setup.bash
# 如果你的工作空间已经编译:
# source install/setup.bash检查有线网卡和 ROS2/DDS 基础状态:
cd /path/to/g1-isaac-fastlio-nav2
bash scripts/real_g1_network_readonly_check.sh只读录包模板:
bash scripts/record_real_g1_bag_readonly.sh更多步骤见:
docs/07_real_robot_wired_dds.mddocs/08_real_robot_data_pipeline.mddocs/10_safety_notes.md
本仓库不直接包含第三方 FAST-LIO 源码,请按照你使用的 FAST-LIO / FAST-LIO2 / FAST_LIO_LOCALIZATION_HUMANOID 版本自行放置第三方仓库。
仿真核心输入:
LiDAR: /g1/lidar_points
IMU: /g1/imu
可参考模板:
config/fast_lio/g1_isaac_fastlio.template.yaml
config/fast_lio/g1_real_mid360_fastlio.template.yaml
项目中曾观察到的 FAST-LIO 输出包括:
/Laser_map_1
/cloud_registered_1
/path_1
/Odometry_loc
当前 Nav2 接入仍属于 roadmap。优先级为:
- 仿真中验证 FAST-LIO 位姿输出;
- 统一 map / odom / g1_base_link TF;
- 生成 2D 栅格地图
pgm/yaml; - Nav2 加载地图和定位;
- RViz 发送目标点;
- 先在仿真代理场景闭环;
- 实机阶段在安全隔离后,再将 Nav2
/cmd_vel接到底层执行层。
本仓库不会直接分发未确认许可证的 Unitree 官方模型、SDK、Isaac Sim 示例资产或第三方 FAST-LIO 源码。相关内容请参考 third_party.md。
v0.1 = Isaac Sim G1 proxy + FAST-LIO mapping workflow
v0.2 = Real G1 wired DDS read-only data pipeline + safety-first migration notes
v0.2 的重点不是“让 G1 动起来”,而是把仿真仓库扩展成仿真—实机过渡仓库:先把真实 G1 的数据稳定拿到、记录下来、可视化出来,再进入 Nav2 和底层执行。