Note
This guide assumes you've completed the Getting Started guide and have a running evaluation environment.
The simulation environment is defined in the aic_description package and comprises a robot, a task board, and various objects required for the cable insertion task. All 3D models for the scene are stored in the aic_assets package.
The challenge utilizes a Universal Robots UR5e robotic arm, equipped with the following hardware:
-
Gripper: Robotiq Hand-E
-
Force-Torque Sensor: ATI AXIA80-M20
-
Camera: Basler acA2440-20gc with Edmunds lens 58-000 (Resolution: 1152x1024, Frame Rate: 20 FPS)
-
Configuration: The robot's physical properties and setup are defined in the
ur_gz.urdf.xacrofile. -
Control: The robot is operated via the
aic_controller. For detailed interface and usage instructions, please refer to the AIC Controller documentation.
The core component of the challenge is the task board, defined in task_board.urdf.xacro. This modular platform hosts various mounts, connectors, and modules required for the tasks.
Key Components:
- Connectors: Standard fiber optic connectors including SC and SFP types.
- NIC Cards: Network Interface Cards.
- Mounts: Specialized fixtures for securing the connectors and modules.
See Task Board Description for detailed specifications.
The global simulation settings—including lighting, physics properties, and general world setup—are defined in the aic.sdf file.
Now that you have the basic environment running, you can explore different configurations to understand the challenge better and create diverse training scenarios.
Tip
See this guide on how to navigate the scene in Gazebo.
You can customize the simulation environment by passing parameters to the launch command. Whether you're using the eval container or a source build, the parameters are the same.
In the eval container (via distrobox):
/entrypoint.sh [parameters]From source build:
ros2 launch aic_bringup aic_gz_bringup.launch.py [parameters]Tip
To check if your current terminal is inside the eval container:
echo $CONTAINER_ID # Should output: aic_evalHere's a complete example spawning a task board with various components:
spawn_task_board:=true \
task_board_x:=0.3 task_board_y:=-0.1 task_board_z:=1.2 \
task_board_roll:=0.0 task_board_pitch:=0.0 task_board_yaw:=0.785 \
sfp_mount_rail_0_present:=true sfp_mount_rail_0_translation:=-0.08 \
sc_mount_rail_0_present:=true sc_mount_rail_0_translation:=-0.09 \
nic_card_mount_0_present:=true nic_card_mount_0_translation:=0.005 \
sc_port_0_present:=true sc_port_0_translation:=-0.04 \
spawn_cable:=true cable_type:=sfp_sc_cable attach_cable_to_gripper:=true \
ground_truth:=true start_aic_engine:=falseKey parameters for exploration:
ground_truth:=true- Enables ground truth TF frames for easier debugging during developmentstart_aic_engine:=false- Disables automatic trial orchestration so you can freely explorespawn_task_board:=true- Spawns the task board immediatelyspawn_cable:=true- Spawns a cable in the sceneattach_cable_to_gripper:=true- Attaches the cable to the grippercable_type:=sfp_sc_cable- Type of cable (options:sfp_sc_cable,sfp_sc_cable_reversed)
For the complete list of configurable parameters, see the aic_bringup README.
Generate diverse training environments by varying the parameters:
- Launch with different configurations to create randomized scenarios
- The complete world state is automatically saved to
/tmp/aic.sdfafter spawning - Copy the file to preserve multiple scenarios:
cp /tmp/aic.sdf ~/training_scenarios/scenario_001.sdf - Import into other simulators like IsaacLab or MuJoCo for training
Example workflow:
# Scenario 1: NIC card in slot 2
/entrypoint.sh spawn_task_board:=true nic_card_mount_2_present:=true \
spawn_cable:=true cable_type:=sfp_sc_cable ground_truth:=true start_aic_engine:=false
cp /tmp/aic.sdf ~/training_scenarios/nic_slot_2.sdf
# Scenario 2: SC connector on right rail with different pose
/entrypoint.sh spawn_task_board:=true task_board_yaw:=1.57 \
sc_mount_rail_1_present:=true spawn_cable:=true ground_truth:=true start_aic_engine:=false
cp /tmp/aic.sdf ~/training_scenarios/sc_right_rotated.sdfTeleoperate the robot in joint-space or Cartesian-space to:
- Explore the workspace
- Test cable insertion manually
- Understand the robot's reach and limitations
- Practice with and without cable attached
Before teleoperating, we recommend reading the AIC Controller Guide to understand the controller used in the challenge.
See the Robot Teleoperation Guide for detailed instructions.
When using teleoperation to collect training data, be sure to tare the Force/Torque sensors at the start of each training episode. See Taring before Training.
Tip
If the robot can't seem to move when it's near an object, it might be in collision with that object even though it's not touching. To view the collision mesh for an object, right-click on it, click View >, and then Collisions.
The simulation includes a world plugin that automatically exports the complete world state after all entities (robot, task board, cable) are spawned. This feature is particularly useful for AI policy training and cross-platform simulation workflows.
Key Benefits:
- Reproducible Scenarios: Capture randomized configurations created via launch parameters for consistent training environments.
- Cross-Platform Compatibility: Import the exported SDF file into other simulators like IsaacLab or MuJoCo.
- Training Data Generation: Create diverse training scenarios by varying launch parameters and exporting each configuration.
Export Details:
- Default Location:
/tmp/aic.sdf - Plugin Configuration: Defined in
aic.sdfwith parameters:<save_world_path>: Path where the world file is saved (default:/tmp/aic.sdf)<save_world_delay_s>: Delay in simulation seconds before exporting (default:0.0)
Note
MuJoCo Integration: The AIC environment supports exporting and training policies natively in MuJoCo. Exported scenarios can be converted to MJCF format and run with the same ROS 2 control interfaces used in Gazebo. For detailed instructions on simulation setup, converting Gazebo worlds, and using ros2_control in MuJoCo, see the MuJoCo Integration Guide.
Note
Isaac Lab Integration: The AIC environment can also be loaded in NVIDIA's Isaac Lab for data collection and training. For details, see the Isaac Lab Integration Guide.
At the start of each training episode (i.e. before teleoperation and before spawning any cables in the environment), ensure that the Force/Torque Sensor (F/T Sensor) is tared using the following service call:
ros2 service call /aic_controller/tare_force_torque_sensor std_srvs/srv/TriggerNow that you understand the scene:
- Develop your policy: See Policy Integration Guide
- Understand the interfaces: Review AIC Interfaces
- Learn about scoring: Read Scoring
- Explore example policies: Check out
aic_example_policies/
