ALOHA: A Low-cost Open-source Hardware System for Bimanual Teleoperation
ALOHA:一種用(yòng)于雙手遠(yuǎn)程操作的(de)低成本開源硬件系統
This codebase contains implementation for teleoperation and data collection with the ALOHA hardware. To train imitation learning algorithms, you would also need to install ACT .
該代碼庫包含使用(yòng)ALOHA硬件進行遠(yuǎn)程操作和(hé)數據收集的(de)實現。要訓練模仿學習(xí)算(suàn)法,您還(hái)需要安裝ACT。
Repo Structure
回購(gòu)結構
- config: a config for each robot, designating the port they should bind to, more details in quick start guide.
- launch: a ROS launch file for all 4 cameras and all 4 robots.
- aloha_scripts: python code for teleop and data collection
Quick start guide
快(kuài)速入門指南(nán)
Hardware selection
硬件選擇
We suggest using a "heavy-duty" computer if possible.
如果可(kě)能的(de)話(huà),我們建議(yì)使用(yòng)“重型”計算(suàn)機。
In particular, at least 4 USB3 ports are needed. We have seen in one case that a machine was not able to stably connect to all 4 robot arms simultaneously over USB.
特别是,至少需要4個(gè)USB3端口。我們在一個(gè)案例中看到,一台機器無法通(tōng)過USB同時(shí)穩定地連接到所有4個(gè)機械臂。
Software selection -- OS:
軟件選擇——操作系統:
Currently tested and working configurations:
當前測試和(hé)工作配置:
Ubuntu 18.04 + ROS 1 noetic
Ubuntu 20.04 + ROS 1 noetic
Ongoing testing (compatibility effort underway):
正在進行的(de)測試(正在進行兼容性工作):
ROS 2
Software installation - ROS:
軟件安裝-ROS:
- Install ROS and interbotix software following https://docs.trossenrobotics.com/interbotix_xsarms_docs/
- This will create the directory ~/interbotix_wswhich contains src.
- git clone this repo inside~/interbotix_ws/src
- source /opt/ros/noetic/setup.sh && source ~/interbotix_ws/devel/setup.sh
- sudo apt-get install ros-noetic-usb-cam && sudo apt-get install ros-noetic-cv-bridge
- run catkin_makeinside ~/interbotix_ws, make sure the build is successful
- go to ~/interbotix_ws/src/interbotix_ros_toolboxes/interbotix_xs_toolbox/interbotix_xs_modules/src/interbotix_xs_modules/arm.py, find function publish_positions. Change self.T_sb = mr.FKinSpace(self.robot_des.M, self.robot_des.Slist, self.joint_commands)to self.T_sb = None. This prevents the code from calculating FK at every step which delays teleoperation.
Hardware installation:
硬件安裝:
The goal of this section is to run roslaunch aloha 4arms_teleop.launch, which starts communication with 4 robots and 4 cameras. It should work after finishing the following steps:
Step 1: Connect 4 robots to the computer via USB, and power on. Do not use extension cable or usb hub.
- To check if the robot is connected, install dynamixel wizard here
- Dynamixel wizard is a very helpful debugging tool that connects to individual motors of the robot. It allows things such as rebooting the motor (very useful!), torque on/off, and sending commands. However, it has no knowledge about the kinematics of the robot, so be careful about collisions. The robot will collapse if motors are torque off ie there is no automatically engaged brakes in joints.
-
Open Dynamixel wizard, go into optionsand select:
- Protocal 2.0
- All ports
- 1000000 bps
- ID range from 0-10
- Note: repeat above everytime before you scan.
- Then hit Scan. There should be 4 devices showing up, each with 9 motors.
-
One issue that arises is the port each robot binds to can change over time, eg a robot that is initially ttyUSB0might suddenly become ttyUSB5. To resolve this, we bind each robot to a fixed symlink port with the following mapping:
- ttyDXL_master_right: right master robot (master: the robot that the operator would be holding)
- ttyDXL_puppet_right: right puppet robot (puppet: the robot that performs the task)
- ttyDXL_master_left: left master robot
- ttyDXL_puppet_left: left puppet robot
- Take ttyDXL_master_right: right master robot as an example:
- Find the port that the right master robot is currently binding to, egttyUSB0
- run udevadm info --name=/dev/ttyUSB0 --attribute-walk | grep serialto obtain the serial number. Use the first one that shows up, the format should look similar to FT6S4DSP.
- sudo vim /etc/udev/rules.d/99-fixed-interbotix-udev.rulesand add the following line:
SUBSYSTEM=="tty", ATTRS{serial}=="<serial number here>", ENV{ID_MM_DEVICE_IGNORE}="1", ATTR{device/latency_timer}="1", SYMLINK+="ttyDXL_master_right"
- This will make sure the right master robot is always binding tottyDXL_master_right
- Repeat with the rest of 3 arms.
- To apply the changes, runsudo udevadm control --reload && sudo udevadm trigger
- If successful, you should be able to find ttyDXL*in your/dev
Step 2: Set max current for gripper motors
- Open Dynamixel Wizard, and select the wrist motor for puppet arms. The name of it should be[ID:009] XM430-W350
- Tip: the LED on the base of robot will flash when it is talking to Dynamixel Wizard. This will help determine which robot is selected.
- Find 38 Current Limit, enter 500, then hit saveat the bottom.
- Repeat this for both puppet robots.
- This limits the max current through gripper motors, to prevent overloading errors.
Step 3: Setup 4 cameras
- You may use usb hub here, but maximum 2 cameras per hub for reasonable latency.
- To make sure all 4 cameras are binding to a consistent port, similar steps are needed.
- Cameras are by default binding to /dev/video{0, 1, 2...}, while we want to have symlinks{CAM_RIGHT_WRIST, CAM_LEFT_WRIST, CAM_LOW, CAM_HIGH}
- Take CAM_RIGHT_WRISTas an example, and let's say it is now binding to /dev/video0. run udevadm info --name=/dev/video0 --attribute-walk | grep serialto obtain it's serial. Use the first one that shows up, the format should look similar to 0E1A2B2F.
- Then sudo vim /etc/udev/rules.d/99-fixed-interbotix-udev.rulesand add the following line
SUBSYSTEM=="video4linux", ATTRS{serial}=="<serial number here>", ATTR{index}=="0", ATTRS{idProduct}=="085c", ATTR{device/latency_timer}="1", SYMLINK+="CAM_RIGHT_WRIST"
- Repeat this for {CAM_LEFT_WRIST, CAM_LOW, CAM_HIGH}in additional toCAM_RIGHT_WRIST
- To apply the changes, runsudo udevadm control --reload && sudo udevadm trigger
- If successful, you should be able to find {CAM_RIGHT_WRIST, CAM_LEFT_WRIST, CAM_LOW, CAM_HIGH}in your/dev
At this point, have a new terminal
conda deactivate # if conda shows up by default
source /opt/ros/noetic/setup.sh && source ~/interbotix_ws/devel/setup.sh
roslaunch aloha 4arms_teleop.launch
If no error message is showing up, the computer should be successfully connected to all 4 cameras and all 4 robots.
Trouble shooting
故障排除
Make sure Dynamixel Wizard is disconnected, and no app is using webcam's stream. It will prevent ROS from connecting to these devices.
請确保Dynamixel向導已斷開連接,并且沒有任何應用(yòng)程序正在使用(yòng)網絡攝像頭的(de)流。它将阻止ROS連接到這(zhè)些設備。
Software installation - Conda:
軟件安裝-康達:
conda create -n aloha python=3.8
conda activate aloha
pip install torchvision
pip install torch
pip install pyquaternion
pip install pyyaml
pip install rospkg
pip install pexpect
pip install mujoco
pip install dm_control
pip install opencv-python
pip install matplotlib
pip install einops
pip install packaging
pip install h5py
pip install h5py_cache
Testing teleoperation
測試遠(yuǎn)程操作
Notice : Before running the commands below, be sure to place all 4 robots in their sleep positions, and open master robot's gripper. All robots will rise to a height that is easy for teleoperation.
注意:在運行以下(xià)命令之前,請确保将所有4個(gè)機器人(rén)置于睡(shuì)眠位置,并打開主機器人(rén)的(de)夾具。所有的(de)機器人(rén)都将上升到一個(gè)便于遠(yuǎn)程操作的(de)高(gāo)度。
# ROS terminal
conda deactivate
source /opt/ros/noetic/setup.sh && source ~/interbotix_ws/devel/setup.sh
roslaunch aloha 4arms_teleop.launch
# Right hand terminal
conda activate aloha
cd ~/interbotix_ws/src/aloha/aloha_scripts
python3 one_side_teleop.py right
# Left hand terminal
conda activate aloha
cd ~/interbotix_ws/src/aloha/aloha_scripts
python3 one_side_teleop.py left
The teleoperation will start when the master side gripper is closed.
當主側夾持器關閉時(shí),遠(yuǎn)程操作将開始。
Example Usages
示例用(yòng)法
To set up a new terminal, run:
要設置新終端,請運行:
conda activate aloha
cd ~/interbotix_ws/src/aloha/aloha_scripts
The one_side_teleop.pywe ran is for testing teleoperation and has no data collection. To collect data for an episode, run:
我們運行的(de)one_side_teleop.pywe用(yòng)于測試遠(yuǎn)程操作,沒有數據收集。要收集某一事件的(de)數據,請運行:
python3 record_episodes.py --dataset_dir <data save dir> --episode_idx 0
This will store a hdf5 file at <data save dir>. To change episode length and other params, edit constants.pydirectly.
這(zhè)将在<data save dir>中存儲一個(gè)hdf5文件。要更改劇集長(cháng)度和(hé)其他(tā)參數,請直接編輯constants.py
To visualize the episode collected, run:
要可(kě)視化(huà)收集的(de)劇集,請運行:
python3 visualize_episodes.py --dataset_dir <data save dir> --episode_idx 0
To replay the episode collected with real robot, run:
要回放使用(yòng)真實機器人(rén)收集的(de)劇集,請運行:
python3 replay_episodes.py --dataset_dir <data save dir> --episode_idx 0
To lower 4 robots before eg cutting off power, run:
要在切斷電源之前降低4個(gè)機器人(rén),請運行:
python3 sleep.py
待續
智能佳機器人(rén)
400 099 1872
www.bjrobot.com
購(gòu)買鏈接:智能佳(ZNJ) ViperX 300 6DOF自由度機械臂 Dynamixel X系列伺服舵機 ViperX 300 6DOF【圖片 價格 品牌 報價】-京東 (jd.com)
智能佳(ZNJ) WidowX 250 機械臂 6DOF自由度 更高(gāo)扭矩 智能機械手 6DOF【圖片 價格 品牌 報價】-京東 (jd.com)