# Inference Deployment on Piper Real-time inference deployment for OpenPi policies on Agilex Piper dual-arm robots. --- ## Prerequisites ### System Requirements - **OS**: Ubuntu 20.04 - **ROS**: ROS Noetic ### Hardware Setup **1. Piper Dual Arms** Configure master + slave arms following the [Piper Arm Setup Guide](../deploy/Piper_ros_private-ros-noetic/README.md). **2. RealSense Cameras** Install ROS wrapper: ```bash sudo apt-get install ros-noetic-realsense2-camera ``` Update camera serials in `deploy/multi_camera.launch`: ```xml ``` Deploy and test: ```bash cp deploy/multi_camera.launch /opt/ros/noetic/share/realsense2_camera/launch/ roslaunch realsense2_camera multi_camera.launch ``` --- ## Installation **1. Create Environment** ```bash conda create -n deploy python=3.10 -y conda activate deploy ``` **2. Install Dependencies** ```bash cd deploy pip install -r requirements.txt pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118 ``` > For other CUDA versions, see [PyTorch Installation Guide](https://pytorch.org/get-started/locally/) **3. Install openpi-client** ```bash cd deploy/packages/openpi-client pip install -e . ``` --- ## Running Inference Start the [openpi policy server](https://github.com/Physical-Intelligence/openpi) on your GPU machine first. **Launch in 3 terminals:** ```bash # Terminal 1: Cameras roslaunch realsense2_camera multi_camera.launch # Terminal 2: Robot Arms bash deploy/Piper_ros_private-ros-noetic/can_config.sh roslaunch piper start_ms_piper.launch mode:=1 auto_enable:=true # Terminal 3: Inference conda activate deploy python deploy/piper_deploy.py \ --host 172.16.99.11 \ --port 8000 \ --ctrl_type joint \ --use_temporal_smoothing \ --chunk_size 50 \ --lang_embeddings "Pick and sort bricks on the conveyor." ``` --- ## Data Collection Both scripts save data in HDF5 format with synchronized images, joint states, and actions. **Output Structure:** ``` dataset_dir/ ├── task_name/ │ ├── episode_0.hdf5 │ ├── episode_1.hdf5 │ └── video/ │ ├── cam_high/ │ ├── cam_left_wrist/ │ └── cam_right_wrist/ └── aloha_mobile/ # for inference data ├── aloha_mobile_success/ └── aloha_mobile_fail/ ``` ### Teleoperation Collection Manual control via master-slave setup. ```bash # Terminal 1: Cameras roslaunch realsense2_camera multi_camera.launch # Terminal 2: Arms (master-slave mode) bash deploy/Piper_ros_private-ros-noetic/can_config.sh roslaunch piper start_ms_piper.launch mode:=0 auto_enable:=false # Terminal 3: Collection conda activate deploy cd deploy/data_collection python collect_data.py \ --max_timesteps 5000 \ --export_video \ --dataset_dir ~/data/my_task \ --episode_idx 0 ``` **Controls:** Press `Space` to stop and save early. ### Inference Collection Record autonomous policy execution. Requires running policy server. ```bash # Terminal 1: Cameras roslaunch realsense2_camera multi_camera.launch # Terminal 2: Arms (inference mode) bash deploy/Piper_ros_private-ros-noetic/can_config.sh roslaunch piper start_ms_piper.launch mode:=1 auto_enable:=true # Terminal 3: Collection conda activate deploy cd deploy/data_collection python collect_inference_data.py \ --use_temporal_smoothing \ --ctrl_type joint \ --export_video \ --chunk_size 50 \ --host 172.16.99.11 \ --port 8000 \ --dataset_dir ~/data/rl_task ``` **Workflow:** 1. Press `Enter` to start recording 2. Press `s` to stop robot 3. Label episode: `1` (success) or `0` (failure)