English | 简体中文
A simulation project for the reBot Arm B601-RS and an optional four-wheel AGV base. It includes a browser-based MuJoCo demo, ROS 2 MuJoCo simulation, a Gazebo laboratory, and SLAM / Nav2 navigation, together with standalone RS robot descriptions and AGV v1 chassis CAD resources.
Start with the web demo to explore manipulation and mobile-base control. Use the ROS 2 workspace for ROS topics, mapping, and navigation.
Experience the reBot Arm B601-RS MuJoCo digital twin directly in your browser — no installation required. Switch between the standard arm and AGV configurations, control joints and TCP, view the overhead and D405 wrist cameras, and run the automated put-away and stacking demos. The initial model download may take a moment; Chrome or Edge is recommended.
▶ Launch the reBot Arm Interactive Demo
- Robot arm: six-axis joint and gripper control, TCP dragging, object grasping, color sorting, and stacking demos.
- Mobile base: four-wheel chassis, keyboard driving, point-and-click obstacle-avoiding navigation, and docking at the grasping station.
- Visualization: overhead and D405 wrist cameras, part selection and isolation, staged exploded views, and a multilingual interface.
- ROS 2: MuJoCo joint synchronization, simulation driver, IK / trajectory interfaces, and camera and object-state publishing.
- Laboratory navigation: MuJoCo and Gazebo backends sharing the laboratory map and SLAM Toolbox / Nav2 configuration.
Web navigation uses its own grid-based A* planner; ROS navigation uses Nav2. The web demo runs independently without ROS or a physical robot. The ROS object-detection node generates detections from simulated object states.
Node.js 22 (matching CI) and Chrome or Edge are recommended. From the repository root:
cd web_mujoco
npm ci
npm run devOpen the URL printed in the terminal, usually http://127.0.0.1:5173.
| Configuration | Entry point | Scene |
|---|---|---|
| Standard arm (default) | /?variant=arm |
rs_grasp_scene.xml, including the workbench and graspable objects |
| AGV base | /?variant=agv |
rs_agv_scene.xml, including the mobile base and laboratory |
| AGV campus streets | /?variant=agv-campus |
rs_agv_campus_scene.xml, with three apartment buildings, a junction and service bays |
Switch configurations at the top of the page. In AGV mode, drive with WASD / arrow keys, stop with Space, select a floor navigation target, or use “Go to grasp area.” Run grasping tasks after docking. The first load downloads the scene meshes.
Campus mode adds charging / delivery navigation shortcuts and a follow camera. These bays demonstrate navigation and docking; charging state and delivery jobs are not simulated. The detailed campus is rendered in the browser; native MuJoCo uses simplified building proxies, and ROS / Nav2 campus maps are not configured.
Build and preview locally:
npm run build
npm run previewThe GitHub Pages workflow handles deployment. In the repository's Settings → Pages, select GitHub Actions, then push to main or run the workflow manually. The build sets the deployment base path from the current repository name.
See the web documentation for interaction and loading details.
reBot_RS_Sim/
├── web_mujoco/ # Browser UI, MuJoCo WASM, web navigation and grasping
├── rebotarm_mujoco_rs/ # ROS 2 MuJoCo nodes and runtime models (XML / STL)
├── rebotarm_gazebo/ # Gazebo scenes and SLAM / Nav2 launch files for both backends
├── rebotarm_msgs/ # ROS 2 messages, services, and actions
├── RS/ # Standalone RS URDF / STL; input for Gazebo model generation
├── mobile_base/
│ ├── cad/agv_v1/ # Parametric chassis scripts, STEP / STL, and validation resources
│ └── docs/ # Wheel-option research
├── tools/ # RS + AGV MuJoCo scene generation
└── docs/ # Robot-description documentation
Main resource dependencies:
Web ────────────────────────────┐
ROS 2 MuJoCo ──────────────────┼─> rebotarm_mujoco_rs/models/
Generated Gazebo robot SDF ──────┘ (Gazebo reads meshes from this directory)
RS/urdf/ReBot_Arm_RS.urdf ─────────> Gazebo SDF generation script
mobile_base/cad/agv_v1/stl/ ───────> MuJoCo AGV scene generation script
The 10 detailed gripper collision STL files shared by RS and DM are kept in rebotarm_mujoco_rs/models/meshes/. The root DM description package and duplicate detailed collision files in the RS description have been removed. The RS URDF retains its own visual and whole-part collision meshes; MuJoCo uses the detailed collision meshes in the runtime directory.
For ROS 2 Jazzy, prepare colcon and rosdep; the Gazebo backend uses Harmonic. Dependencies include Nav2, SLAM Toolbox, RViz, and ros_gz, as declared in each package's package.xml.
The MuJoCo backend also requires Python mujoco, which is currently not declared in package.xml and must be installed separately. The Python environment running ROS nodes must be able to import mujoco, numpy, and scipy. The joint-slider window also requires tkinter.
Build from the repository root after initializing rosdep:
source /opt/ros/jazzy/setup.bash
rosdep install --from-paths rebotarm_msgs rebotarm_mujoco_rs rebotarm_gazebo --ignore-src -r -y
colcon build --symlink-install --packages-select \
rebotarm_msgs rebotarm_mujoco_rs rebotarm_gazebo
source install/setup.bashThe required runtime XML / STL files are committed, so model regeneration is unnecessary for the first launch. Source the ROS and workspace environments in each new terminal.
Run one simulation backend and one workflow at a time:
| Workflow | MuJoCo | Gazebo |
|---|---|---|
| Laboratory and robot | mujoco_lab.launch.py |
lab_world.launch.py |
| Online mapping | mujoco_slam.launch.py |
lab_slam.launch.py |
| Mapping and navigation | mujoco_slam_nav.launch.py |
lab_slam_nav.launch.py |
| Localization and navigation with an existing map | mujoco_navigation.launch.py |
lab_navigation.launch.py |
All launch files above belong to rebotarm_gazebo. For example:
ros2 launch rebotarm_gazebo mujoco_slam_nav.launch.pyFor headless navigation, add use_viewer:=false use_rviz:=false to the MuJoCo command or gui:=false use_rviz:=false to the Gazebo command. The default navigation map is rebotarm_gazebo/maps/rebotarm_lab.yaml.
For the arm driver, cameras, and task interfaces, use the core launch entry point:
ros2 launch rebotarm_mujoco_rs mujoco_rs.launch.py \
simulation_mode:=physics use_viewer:=trueThe core entry point enables the simulation driver and task tools by default. mujoco_lab.launch.py disables these tools by default to focus on base navigation. Start the joint sliders in another terminal:
ros2 launch rebotarm_mujoco_rs joint_slider_gui.launch.pyThe main navigation topics are /cmd_vel, /clock, /odom, /scan, and /imu. MuJoCo publishes the navigation TF chain odom → base_footprint → base_link → laser / imu_link; SLAM Toolbox or AMCL publishes map → odom. Arm and task topics use the /rebotarm_rs/ namespace by default.
See the MuJoCo package documentation and laboratory / navigation documentation for interfaces and parameters.
| Resource | Purpose |
|---|---|
rs_arm.xml |
RS arm, gripper, wrist camera, and collision model |
rs_grasp_scene.xml |
Includes rs_arm.xml and adds the grasping station |
rs_agv_scene.xml |
Generated complete RS + AGV laboratory scene |
RS/urdf/ReBot_Arm_RS.urdf |
Standalone robot description and input for Gazebo SDF generation |
mobile_base/cad/agv_v1/ |
Chassis STEP / STL files, assembly references, and dimensions |
After changing the base MuJoCo scenes or chassis STL files, regenerate the AGV scene from the repository root:
python3 tools/build_rs_agv_model.pyThe script reads rs_arm.xml and rs_grasp_scene.xml, copies six chassis STL types into the runtime directory, and generates rs_agv_scene.xml. Put persistent scene changes in the inputs or generation script.
After changing the RS URDF or static laboratory layout, update Gazebo models and maps as needed:
python3 rebotarm_gazebo/scripts/generate_rs_agv_sdf.py
python3 rebotarm_gazebo/scripts/generate_lab_map.pyCAD regeneration requires CadQuery. The CAD script's default base-mesh path still points to the old project, so specify the file in this repository explicitly:
python3 mobile_base/cad/agv_v1/generate_agv_v1.py \
--repository-base rebotarm_mujoco_rs/models/meshes/base_link.STLURDF / arm meshes use meters; chassis CAD and wrist-bracket meshes use millimeters, with the corresponding scale set in MJCF. Preserve the relative directory structure between URDF and meshes/, including filename case. Wheel and fastener models marked placeholder are for assembly checks.
Run web checks in web_mujoco/; ROS is not required:
npm run smoke
npm run test:loading
npm run test:reset
npm run test:variants
npm run test:campus
npm run test:explodeRun ROS 2 model and bridge tests after sourcing the workspace environment:
colcon test --packages-select rebotarm_mujoco_rs
colcon test-result --verboseSee the MuJoCo package documentation for RS MuJoCo model sources and usage boundaries, and the third-party model notes for the D405 wrist bracket's source, version, and license. See the robot-description notes for classification and maintenance conventions.