Gazebo simulation package for the Unitree Go2 robot, designed to work with OM1.
This repo provides a minimal simulation environment with lidar-based obstacle avoidance — no SLAM, Nav2, or mapping stack required.
OM1 (Python/LLM) <--> Zenoh <--> zenoh-bridge-ros2dds <--> ROS2 (OM1-sim) <--> Gazebo
| Component | Purpose |
|---|---|
go2_sim |
Main simulation package: launch file, topic remapping, sport API bridge, battery mock |
om_path |
Lidar-based path feasibility node — publishes safe movement directions to /om/paths |
go2_description |
Robot URDF, meshes, and Gazebo worlds |
champ / champ_base |
Quadruped locomotion controller (CHAMP framework) |
champ_msgs |
CHAMP custom message definitions |
unitree_api / unitree_go |
Unitree message definitions |
om_api |
OpenMind message definitions (Paths, etc.) |
- SLAM (
slam_toolbox) - Nav2 navigation stack
- Frontier exploration
- Orchestrator / REST API
- Localization (AMCL, scan matching)
- D435 depth camera processing
- Watchdog
- ROS 2 Humble
- Gazebo (Harmonic or Fortress)
- OM1 for the AI agent
# Install ROS 2 dependencies
sudo apt install ros-humble-ros-gz-sim ros-humble-ros-gz-bridge \
ros-humble-gz-ros2-control ros-humble-ros2-control ros-humble-ros2-controllers \
ros-humble-robot-state-publisher ros-humble-joint-state-publisher \
ros-humble-xacro ros-humble-joy ros-humble-teleop-twist-joy \
ros-humble-rmw-cyclonedds-cpp
# Install zenoh bridge
echo "deb [trusted=yes] https://download.eclipse.org/zenoh/debian-repo/ /" | sudo tee /etc/apt/sources.list.d/zenoh.list
sudo apt update && sudo apt install zenoh-bridge-ros2dds
# Build the workspace
source /opt/ros/humble/setup.bash
cd OM1-sim
colcon build --symlink-install
source install/setup.bashdocker compose build# Native
source install/setup.bash
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
ros2 launch go2_sim go2_launch.py
# Or with Docker (headless, no RViz)
docker compose upexport RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
zenoh-bridge-ros2dds -c zenoh/zenoh_bridge_config.json5# In the OM1 repo
cd ../OM1
python src/run.py --config config/go2_sim_autonomy.json5The corresponding OM1 config is OM1/config/go2_sim_autonomy.json5. It provides:
- Autonomy mode: Move around with lidar-based obstacle avoidance
- Conversation mode: Chat with the robot
- Guard mode: Autonomous patrol with status reports
| Argument | Default | Description |
|---|---|---|
use_sim_time |
true |
Use Gazebo clock |
rviz |
true |
Launch RViz |
world |
home_world.sdf |
Gazebo world file |
robot_name |
go2 |
Robot name in Gazebo |
world_init_x/y/z |
0/0/0.375 |
Initial robot position |
publish_map_tf |
true |
Publish static map→odom TF |
Gazebo /scan (LaserScan)
--> om_path node --> /om/paths
--> Zenoh bridge --> om/paths (Zenoh topic)
--> OM1 SimplePathsProvider
--> LLM decides direction
--> SportClient --> /api/sport/request
--> go2_sport_node --> /cmd_vel --> Gazebo
MIT