The complete ROS2 + Gazebo simulation stack for AI-powered robotics. One command to launch. Browser to watch. CLI to control.
Copyright (c) 2026 AIFLOW LABS LIMITED / RobotFlowLabs
make build # Build the simulation image
make sim # Launch the simulationThen open http://localhost:8080 — live 3-camera dashboard with IMU, LiDAR, odometry, and joint states.
graph TB
subgraph SIM["Gazebo Harmonic (Headless)"]
WORLD[6 World Environments]
ROBOT[Mobile Base Robot<br/>Camera + IMU + LiDAR + Depth]
TRON[TRON1 Biped<br/>LimX Dynamics 12-DOF]
PHYSICS[Real-time Physics]
end
subgraph BRIDGE["ROS2 Bridge Layer"]
GZ_BRIDGE[GZ → ROS2 Bridge<br/>All sensor topics]
COMPRESS[Image Compressor<br/>900KB → 7KB JPEG]
ROSBRIDGE[Rosbridge WebSocket<br/>Port 9090]
end
subgraph ACCESS["Access Layer"]
VIEWER[Live Web Viewer<br/>http://localhost:8080]
CLI[ROS2 CLI<br/>ros2 topic pub/echo]
AGENT[AI Agents<br/>via MCP / rosbridge]
end
SIM --> BRIDGE --> ACCESS
style SIM fill:#1A1A1A,color:#FF3B00,stroke:#FF3B00
style BRIDGE fill:#050505,color:#f3f3f3,stroke:#FF3B00
style ACCESS fill:#1A1A1A,color:#f3f3f3,stroke:#FF3B00
Open http://localhost:8080 — no install needed.
- 3 live camera feeds (Robot POV + Overhead + Side)
- Real-time IMU, odometry, joint states
- LiDAR 360° scan visualization
- Message rate monitor
- Auto-discovery with sensor badges
| World | Description | Best For |
|---|---|---|
warehouse.sdf |
Industrial warehouse with shelves + 3 cameras | Logistics, pick-and-place |
warehouse_large.sdf |
Extended warehouse environment | Large-scale navigation |
office.sdf |
Office environment | Service robotics |
home.sdf |
Residential space | Home automation |
factory.sdf |
Manufacturing floor | Industrial robotics |
terrain.sdf |
Outdoor terrain | Field robotics |
WORLD_FILE=office.sdf make simgraph LR
subgraph ROBOT["ANIMA Mobile Base"]
CAM[RGB Camera<br/>640x480 @ 15fps]
DEPTH[Depth Camera<br/>320x240 @ 10fps]
IMU_S[IMU<br/>100Hz]
LIDAR[2D LiDAR<br/>360pts @ 10Hz]
DRIVE[Diff Drive<br/>cmd_vel / odom]
end
CAM --> |/camera/rgb/image_raw| T[ROS2]
DEPTH --> |/depth/image| T
IMU_S --> |/imu| T
LIDAR --> |/lidar/scan| T
DRIVE --> |/odom| T
style ROBOT fill:#050505,color:#FF3B00,stroke:#FF3B00
style T fill:#1A1A1A,color:#f3f3f3,stroke:#FF3B00
| Topic | Type | Rate |
|---|---|---|
/camera/rgb/image_raw |
Image | 15 Hz |
/camera/rgb/image_raw/compressed |
CompressedImage | ~5 Hz |
/depth/image |
Image | 10 Hz |
/imu |
Imu | 100 Hz |
/lidar/scan |
LaserScan | 10 Hz |
/odom |
Odometry | 20 Hz |
/joint_states |
JointState | ~500 Hz |
/cmd_vel |
Twist | subscriber |
LimX Dynamics TRON1 biped robot included (URDF + STL meshes):
- 3 variants: Point-Foot, Wheel-Foot, Sole-Foot
- 12 DOF (6 per leg)
- Shenzhen-built hardware partner
# Drive forward
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.5}, angular: {z: 0.0}}" --rate 10
# Turn
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.2}, angular: {z: 0.5}}" --rate 10
# Stop
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.0}, angular: {z: 0.0}}" --onceOr use the ANIMA ROS2 Bridge:
anima-bridge discover --transport rosbridge --url ws://localhost:9090
anima-bridge publish /cmd_vel geometry_msgs/msg/Twist '{"linear":{"x":0.5}}' \
--transport rosbridge --url ws://localhost:9090graph TD
subgraph DOCKER["Docker: anima_ros2_sim_net"]
subgraph SIM["anima_ros2_gazebo (single container)"]
GZ[Gazebo Harmonic<br/>headless]
BR[ros_gz_bridge<br/>10 topic mappings]
COMP[Image Compressor<br/>3 cameras x JPEG]
RB[Rosbridge WebSocket<br/>Port 9090]
end
VW[anima_ros2_viewer<br/>Web dashboard<br/>Port 8080]
end
GZ -->|Gazebo Transport| BR
BR -->|ROS2 DDS| COMP
COMP -->|ROS2 DDS| RB
RB -->|WebSocket| VW
RB -->|WebSocket| EXT[External: ANIMA Bridge / CLI / AI Agents]
style DOCKER fill:#050505,color:#f3f3f3,stroke:#FF3B00
style SIM fill:#1A1A1A,color:#FF3B00,stroke:#FF3B00
style GZ fill:#050505,color:#FF3B00
style BR fill:#050505,color:#FF3B00
style COMP fill:#050505,color:#FF3B00
style RB fill:#050505,color:#FF3B00
style VW fill:#FF3B00,color:#050505
Why single container? Gazebo Transport uses local IPC (shared memory). The gz bridge must run in the same process space as Gazebo for sensor data to flow.
make build # Build simulation image
make sim # Start simulation
make stop # Stop simulation
make restart # Restart
make logs # Follow logs
make status # Container status
make shell # Shell into gazebo container
make clean # Remove everythingGPU: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d
Autonomous Neural Intelligence for Machine Awareness
- ANIMA ROS2 Bridge — AI agent ↔ ROS2 bridge
- RobotFlowLabs — Website
Built with AI agents. Powered by ROS2 + Gazebo. Made for robots. Copyright (c) 2026 AIFLOW LABS LIMITED / RobotFlowLabs. All rights reserved.
