A unified robot simulation platform built on top of MuJoCo, Genesis, and ManiSkill.
This project provides a common abstraction layer so that you can run your robot across different simulators with a consistent API.
It is designed as a research tool for users of Astribot.


astribot_simulation/
│── astribot_envs/ # Environment wrappers for each simulator
│ ├── astribot_base_env.py
│ ├── astribot_mujoco_env.py
│ ├── astribot_genesis_env.py
│ ├── astribot_maniskill_env.py
│ └── astribot_envs_factory.py
│
│── config/ # YAML configs for different robots & simulators
│ └── astribot_s1/
│ ├── simulation_genesis_param_chassis_fixed.yaml
│ ├── simulation_maniskill_param_chassis_fixed.yaml
│ ├── simulation_mujoco_param_with_hand.yaml
│ └── ...
│
│── astribot_descriptions/ # Robot models
│ ├── urdf/
│ └── mjcf/
│
│── simu_utils/ # Utility functions
│ ├── simu_common_tools.py
│ └── robot_ros_interface.py
│
│── tools/ # Setup scripts
│ ├── install.sh
│ ├── build.sh
│ ├── Miniconda3-py38_4.9.2-Linux-x86_64.sh
│ ├── fix_GLIBCXX_3.4.30_bug.sh
│ └── fix_LIBFFI_BASE_7.0_bug.sh
│
│── astribot_simulation.py # Main entry
│── env.sh # Environment setup
│── README.md
└── __init__.py
git clone https://github.com/Astribot-Dev/astribot_simulation
cd astribot_simulation
git submodule init
git submodule update
bash tools/Miniconda3-py38_4.9.2-Linux-x86_64.sh
bash tools/install.sh
roscore
conda activate astribot_simu
cd <your_path>/astribot_simulation
source env.sh && python3 astribot_simulation.py
If you want to reset the robot state, press Backspace while the simulation is running.
You can switch to another simulator or robot by modifying the YAML file path in astribot_simulation.py:
from astribot_envs.astribot_envs_factory import AstribotEnvsFactory
def main():
# Load param from yaml, create a simulation env using the Factory Pattern
astribot_yaml_file='config/astribot_s1/simulation_genesis_param.yaml'
astribot_envs_factory = AstribotEnvsFactory()
astribot_data = AstribotEnvsFactory.load_yaml_file(astribot_yaml_file)
astribot_simulation_thread = astribot_envs_factory.create_simulation_env(astribot_data)
if __name__ == '__main__':
main()
The config/astribot_s1/ folder contains several YAML files to customize your simulation environment. Each file defines a combination of simulator backend, robot variant, and Hardware configuration:
| YAML File | Description |
|---|---|
simulation_genesis_param_chassis_fixed.yaml |
Genesis backend with fixed chassis configuration. |
simulation_maniskill_param_chassis_fixed.yaml |
ManiSkill backend with fixed chassis configuration. |
simulation_mujoco_param_chassis_fixed.yaml |
MuJoCo backend with fixed chassis configuration. |
simulation_mujoco_param_with_camera.yaml |
MuJoCo backend with three-camera configuration. |
simulation_mujoco_param_with_hand.yaml |
MuJoCo backend with BrainCo hand configuration. |
simulation_mujoco_param.yaml |
MuJoCo backend with default configuration. |
💡 Tip:
To switch simulators or robot setups, modify the astribot_yaml_file variable in astribot_simulation.py to point to the desired YAML file. No code change is needed beyond this.
| Hardware / Software | Recommended Specifications |
|---|---|
| CPU | Intel i5-14600F or higher |
| GPU | NVIDIA RTX 2080 Ti or higher |
| GPU Driver | NVIDIA driver ≥ 535 |
| CUDA | CUDA ≥ 12.0 |
| Python | Python == 3.10 (Conda recommended) |
📌 Note: For GPU-accelerated simulation, ensure the above hardware and driver requirements are met.
If you want to directly control the joints, note: The robot exposes joint-space command topic (e.g., /astribot_arm_left/joint_space_command) for controlling the arm. The interpretation of the command depends on the control mode:
| Control Mode | Command Dimension | Meaning | Notes |
|---|---|---|---|
| Position / Velocity Control | 7–14 | Values 7–14: |
First 7 values: target joint positions
Last 7 values: target joint velocities | Includes velocity compensation and gravity compensation for smoother motion | | Force Control | 7 | Each value represents the torque/force applied to the corresponding joint | ⚠️ Note: This mode does not guarantee sim-to-real accuracy, mainly for simulation purposes |
💡 Tip: If using Astribot SDK, you generally do not need to worry about these details — refer to the Astribot SDK documentation for more information. When using joint-space commands, ensure the control mode matches the command dimension to avoid unexpected behavior.
The robot supports cameras on hands and head. After loading the correct YAML configuration, you can receive image data on the corresponding ROS topics:
/astribot_whole_body/camera/<camera_name>/image_raw /astribot_whole_body/camera/<camera_name>/depth /astribot_whole_body/camera/<camera_name>/point_cloud | Backend | Supported Sensors |
|---|---|
| MuJoCo | RGB-D cameras and point clouds for both hands and the head. |
| ManiSkill | RGB cameras for both hands and the head. |
| Genesis | Currently no sensor support. |
💡 Tip
- To enable sensors in MuJoCo, use: simulation_mujoco_param_with_camera.yaml
- To enable sensors in ManiSkill, use: simulation_maniskill_param_chassis_fixed.yaml
- Currently, examples starting with 3xx in the SDK are not supported in the simulation.
tools/install.sh → environment setup tools/build.sh → build astribot_msgs tools/Miniconda3-py38_4.9.2-Linux-x86_64.sh → install miniconda tools/fix_GLIBCXX_3.4.30_bug.sh → patch for GLIBCXX bug tools/fix_LIBFFI_BASE_7.0_bug.sh → patch for libffi bug astribot_envs/ config/astribot_s1/ simu_utils/ Contributions are welcome!
If you’d like to add support for new simulators or robots, please contact me at [tonywang@astribot.com].
Built on top of:
- MuJoCo
- Genesis
- ManiSkill
GLIBCXX_3.4.30 not found or cv_bridge when installing dependencies
Solution: bash tools/fix_GLIBCXX_3.4.30_bug.sh
libffi.so.7 or cv_bridge when launching the simulation
Solution: bash tools/fix_LIBFFI_BASE_7.0_bug.sh
$ claude mcp add astribot_simulation \
-- python -m otcore.mcp_server <graph>