Code Organization
Code Organization#
Here we list the core files and folders in the codebase. The codebase is organized as follows:
furniture_bench
|- __init__.py # Register gym environments
|- assets
|- franka_description_ros # Franka Panda URDF, mesh for simulation
|- furniture # Furniture URDF, mesh for simulation
|- config.py # The configuration file for the environment. It contains the configuration for the robot, camera, furniture, and the device interface etc
|- sim_config.py # Configuration file for the simulation environment
|- controllers
|- control_utils.py # Utility functions for controlling the robot
|- osc.py # Implementation of OSC controller in PyTorch (will run in the `server` workstation)
|- data
|- collect_enum.py # Define data collection status
|- data_collector.py # Define data collection class that rollout the environment, get action from the interface (e.g., teleoperation, automatic scripts), and save data
|- envs
|- policy_envs # Environment with different observation spaces for the policy
|- furniture_bench_image_feature.py # FurnitureBench with image features (R3M or VIP) as observation instead of visual observations
|- furniture_bench_image.py # FurnitureBench with 224x224 wrist and front RGB images and robot states as observation
|- furniture_sim_image_feature.py # FurnitureSim with image features (R3M or VIP) as observation instead of visual observations
|- ...
|- furniture_bench_env.py # FurnitureBench environment
|- furniture_sim_env.py # FurnitureSim environment
|- initialization_mode.py # Initialization mode for the environment (e.g., randomness, skill modes)
|- observation.py # Define constant of observation keys
|- furniture
|- furniture.py # Define base class for all furniture. It contains the core functions and properties for the furniture (e.g., furniture parts, computing reward function, getting observation,etc.)
|- square_table.py # Define square_table furniture
|- chair.py # Define chair furniture
|- ... # Other furniture classes
|- parts
|- part.py # Define base class for all furniture parts. It contains the core functions and properties for the furniture parts (e.g., reset pose, AprilTag detector, etc.)
|- cabinet_body.py # Define cabinet body part
|- cabinet_door.py # Define cabinet door part
|- ... # Other furniture part classes
|- device
|- keyboard_interface.py # Control the robot using keyboard
|- oculus_interface.py # Control the robot using Oculus
|- device_interface.py # ABC for device interface
|- key_enum.py # Define key enum for keyboard interface
|- keyboard_oculus_interface.py # Control the robot using keyboard and Oculus
|- __init__.py # Utility functions for device interface (e.g., factory function for the device interface)
|- perception
|- apriltag.py # Define AprilTag detector class
|- image_utils.py # Utility functions for image processing (e.g., image cropping, image resizing used for the policy)
|- realsense.py # Define Realsense camera class
|- robot
|- panda.py # Panda robot class which build interface to actual robot
|- robot_state.py # Define enum for properties of the robot and robot error. Also define utility functions for the robot states (e.g., flatten robot states.)
|- scripts
|- calibration.py # Script for extrinsic calibration of front camera
|- collect_data.py # Script for data collection
|- preprocess_data.py # Script for preprocessing the data
|- reset.py # Move the robot to the initial position
|- run_cam_apriltag.py # Show camera image and AprilTag detection
|- show_trajectory.py # Show the trajectory of the saved dataset
|- utils # Utility functions for the geometry, camera, robot control etc. (e.g., rotation matrix, quaternion, etc.)
|- detection.py # Define functions for camera reading and AprilTag pose estimation
|- pose.py # Utility for pose (e.g., rotation matrix, quaternion, etc.)
|- ...