ไดเรกทอรีชุดข้อมูลสาธารณะของ AY-Robots ที่แสดงชุดข้อมูล LeRobot ที่บันทึกบนแขนหุ่นยนต์ระดับ SO-100
ชุดข้อมูลOpen X-EmbodimentDROIDSO-100LeRobot

การใช้ DROID, BridgeData V2 และ Open X บน SO-100

AY-Robots ResearchAugust 23, 202618 นาทีในการอ่าน

DROID, BridgeData V2 และ Open X-Embodiment แปลงเป็นการกระทำของปลายแขนหุ่นยนต์แบบ 7 มิติ บนแขนหุ่นยนต์ 6 และ 7 องศาอิสระ SO-100 ใช้ตำแหน่งข้อต่อ 6 ตำแหน่ง อะไรที่ถ่ายทอดได้ อะไรที่ถ่ายทอดไม่ได้ และควรทำอย่างไรแทน

สรุปโดยย่อ

  • LeRobot ที่สร้างขึ้นทั้งสามแบบใช้ข้อตกลงร่วมกัน: การกระทำของปลายแขนกลแบบ 7 มิติ [x, y, z, roll, pitch, yaw, gripper] และสถานะแบบ 8 มิติพร้อมช่องว่างสำหรับเติม SO-100 ใช้ตำแหน่งข้อต่อสัมบูรณ์หกตำแหน่ง
  • เวกเตอร์ 7 มิตินั้นเป็นผลผลิตของตัวแปลง: ฟิลด์การกระทำ RLDS ของ DROID เองคือความเร็วข้อต่อ 6 ตำแหน่งบวกกับตำแหน่งของกริปเปอร์ โดยมีมุมมองแบบคาร์ทีเซียนอยู่ใน action_dict
  • สี่ความถี่: DROID 15 fps, BridgeData V2 5 fps, ส่วนของ google_robot 3 fps, การบันทึกของ SO-100 ที่ 30 fps
  • คุณไม่สามารถรวมข้อมูลเหล่านี้กับข้อมูลของคุณเองได้ validate_all_metadata จะแจ้งข้อผิดพลาดเมื่อพบความแตกต่างแรกของ fps, robot_type หรือ features และทั้งสามสิ่งนี้ก็แตกต่างกัน
  • สิ่งที่ถ่ายโอนคือ pretrained weights ไม่ใช่ episodes ข้อมูลโอเพนซอร์สคิดเป็น 9.1 เปอร์เซ็นต์ของส่วนผสมการ pre-training ของ pi0
  • การใช้งานจริงที่ถูกที่สุดคืออุปกรณ์ทดสอบ: ตัวอย่าง DROID ขนาด 2 GB จำนวน 100 episode ที่ทราบว่าดีแล้ว ซึ่งพิสูจน์ว่าไปป์ไลน์ของคุณทำงานได้ก่อนที่คุณจะบันทึกข้อมูลตลอดสุดสัปดาห์

มีชุดข้อมูลสาธารณะขนาดหนึ่งล้านวิถีการเคลื่อนที่อยู่บน Google Cloud bucket และ SO-100 อยู่บนโต๊ะซึ่งมีราคาชิ้นส่วน 110 ถึง 150 EUR ทำไมข้อมูลแรกถึงสอนข้อมูลที่สองไม่ได้? มันทำได้บางส่วน แต่การถ่ายโอนแทบไม่เกิดขึ้นในจุดที่คนคาดหวัง และส่วนที่ดูเหมือนง่ายที่สุดกลับใช้งานไม่ได้เลย

ต่อไปนี้คือ: สิ่งที่อยู่ภายใน DROID, BridgeData V2 และ Open X-Embodiment ซึ่งแต่ละชุดข้อมูลจะปะทะกับแขนกล 5-DoF ราคาประหยัด และสิ่งที่ควรทำแทน ตัวเลขทุกตัวด้านล่างมาจากเอกสารวิจัย, การ์ดชุดข้อมูล หรือไฟล์ต้นฉบับที่เกี่ยวข้อง

สิ่งที่ชุดข้อมูลทั้งสามชุดมีอยู่จริง

DROIDBridgeData V2Open X-Embodiment
หุ่นยนต์Franka Panda, 7 DoF, Robotiq 2F-85WidowX 250, 6 DoF, ~4,000 USD rig22 embodiments, 60 datasets, 34 labs
ขนาด76k trajectories, 350 hours60,096 trajectories1M+ trajectories, 527 skills
ความหลากหลาย564 scenes, 84 tasks, 50 collectors24 environments, 13 skills160,266 tasks, 21 institutions
องค์ประกอบควบคุมทางไกลทั้งหมด50,365 teleoperated, 9,731 scriptedต่อห้องปฏิบัติการต้นทาง
อัตราการควบคุม15 Hz5 Hzvaries, 3 fps upwards
กล้อง2 x ZED 2 exterior, 1 x ZED Mini wristสูงสุด 4 ตัว, ส่วนใหญ่ใช้เฉพาะตัวที่ติดตั้งอยู่กับที่ตามที่ห้องปฏิบัติการใช้งาน
ดาวน์โหลดไฟล์ดิบ1.7 TB RLDS, 8.7 TB raw stereoJPEG archivesper-dataset TFDS buckets
จุดเริ่มต้นคือการแปลง LeRobot ไม่ใช่บัคเก็ตดั้งเดิม

มีคนไม่กี่คนที่ยังคงดาวน์โหลด RLDS TFRecords ขนาด 1.7 TB องค์กรชุมชน IPEC-COMMUNITY ได้เผยแพร่ Open X-Embodiment ส่วนใหญ่ซ้ำในรูปแบบ LeRobot dataset พร้อมวิดีโอ AV1 ซึ่ง DROID มีขนาด 392 GB นี่คือเวอร์ชันที่คุณจะใช้งาน และ meta/info.json คือสิ่งที่คุณควรอ่านเป็นอันดับแรก

DROID

เป็นมาตรฐานที่สุดในสามตัวนี้ มีชุดอุปกรณ์เดียวในทุกที่: Franka Panda พร้อมกริปเปอร์ Robotiq 2F-85, กล้องสเตอริโอ ZED 2 ที่ปรับได้สองตัว และ ZED Mini ที่ข้อมือ, ควบคุมทางไกลด้วยคอนโทรลเลอร์ Meta Quest 2, บันทึกผ่าน Polymetis ที่ 15 Hz ทั้งในส่วนของข้อต่อและ ส่วนปลายแขน ภาษา. ป้ายกำกับภาษาถูกเพิ่มเข้ามาภายหลังผ่าน tasq.ai สูงสุดสามป้ายต่อ ตอน.

  • 76k วิถีการเคลื่อนที่, 350 ชั่วโมง, 564 ฉาก, 84 งาน, 50 ผู้รวบรวมข้อมูลในสามทวีป
  • ผลลัพธ์หลักคือการฝึกร่วม (co-training) ไม่ใช่การฝึกแบบเดี่ยว (standalone training): ชุดข้อมูลที่ผสม 50/50 กับการสาธิตในโดเมนเอาชนะวิธีที่ดีที่สุดถัดไปได้ถึง 22 เปอร์เซ็นต์ของความสำเร็จสัมบูรณ์ในการกระจายข้อมูล และ 17 เปอร์เซ็นต์นอกการกระจายข้อมูล
  • IPEC-COMMUNITY/droid_lerobot: 92,233 ตอน, 27,044,326 เฟรม, franka, 15 fps, codebase_version v2.0, สตรีม AV1 สามรายการที่ 180x320, 392 GB.
  • ตัวอย่างการดีบักขนาด 2 GB จำนวน 100 ตอนอยู่ที่ gs://gresearch/robotics/droid_100 เริ่มต้นจากตรงนั้นได้เลย

BridgeData V2

ใกล้เคียงกับการตั้งค่าสำหรับงานอดิเรกมากที่สุด: แขนหุ่นยนต์ WidowX 250 แบบ 6-DoF, 60,096 วิถีการเคลื่อนที่ใน 24 สภาพแวดล้อมและ 13 ทักษะที่ 5 Hz. โปรดสังเกตองค์ประกอบ: การสาธิตโดยผู้เชี่ยวชาญที่ควบคุมจากระยะไกล 50,365 รายการ บวกกับ 9,731 รายการจากนโยบายการหยิบและวางแบบสุ่มที่เขียนสคริปต์ไว้ ดังนั้นประมาณ 16 เปอร์เซ็นต์ไม่ใช่การสาธิตโดยมนุษย์ ซึ่งมีความสำคัญต่อ การเรียนรู้แบบเลียนแบบ คุณภาพ. การดาวน์โหลดปกติ, IPEC-COMMUNITY/bridge_orig_lerobot, รายงาน 53,192 ตอน และ 1,893,026 เฟรมที่ 5 fps, robot_type widowx: น้อยกว่า 60,096 ที่ระบุในเอกสาร ดังนั้นควรอ่านจำนวนจาก meta/info.json แทนที่จะอ้างอิงจากแหล่งใดแหล่งหนึ่ง

Open X-Embodiment

ไม่ใช่ชุดข้อมูลในความหมายเดียวกัน: ชุดข้อมูลหุ่นยนต์ที่มีอยู่ 60 ชุดจาก 34 ห้องปฏิบัติการถูกรวบรวมไว้ในคอลเลกชัน RLDS เดียว ครอบคลุม 22 รูปแบบการใช้งานและวิถีการเคลื่อนที่กว่าหนึ่งล้านครั้ง BridgeData V2 อยู่ภายในนั้นในชื่อ bridge_orig; ส่วน google_robot, fractal20220817_data, แปลงเป็น 87,212 ตอนที่ 3 เฟรมต่อวินาที

การรวบรวมข้อมูลนี้มีข้อควรระวังที่ระบุไว้อย่างชัดเจนในเอกสาร สำหรับการทดลอง RT-X ผู้เขียนแปลงแต่ละแหล่งข้อมูลเป็นการกระทำของปลายแขนกลแบบ 7-DoF แต่ไม่ได้จัดแนวเฟรมพิกัดระหว่างชุดข้อมูล และอนุญาตให้ค่าการกระทำเป็นตำแหน่งสัมบูรณ์หรือสัมพัทธ์ หรือความเร็ว ตามแผนการควบคุมดั้งเดิมของหุ่นยนต์แต่ละตัว ข้อสรุปของพวกเขา: เวกเตอร์การกระทำเดียวกันอาจทำให้เกิดการเคลื่อนไหวที่แตกต่างกันมากสำหรับหุ่นยนต์แต่ละตัว

รายการไดเรกทอรีชุดข้อมูล AY-Robots ที่แสดงชุดข้อมูล LeRobot สาธารณะ พร้อมจำนวนตอนและคำอธิบายงาน
ไดเรกทอรีชุดข้อมูลสาธารณะที่ /directory: ชุดข้อมูลที่อยู่ในรูปแบบ LeRobot แล้ว และตรงกับแขนกลที่รองรับแล้ว

ความไม่ตรงกัน ในสี่ส่วน

ความไม่ตรงกันของกายภาพมักถูกมองว่าเป็นปัญหาคลุมเครือเพียงปัญหาเดียว แต่แท้จริงแล้วมีสี่ประการ ซึ่งแต่ละประการล้มเหลวต่างกัน และสองประการไม่สามารถแก้ไขได้ด้วยการเขียนสคริปต์

1. องศาอิสระ

หุ่นยนต์ SO-100 มีข้อต่อแขนห้าข้อบวกกับกริปเปอร์ เมื่อนับเป็นมอเตอร์ จะเป็นแขน 6-DoF และเอกสาร SmolVLA ก็เรียกเช่นนั้น; เมื่อนับเป็นกลไกการวางตำแหน่ง จะเป็น 5-DoF และ LeRobot ก็เรียกเช่นนั้นใน docstring ของ inverse-kinematics ซึ่งอธิบาย IK แบบ soft-orientation บน SO-101 แบบ 5-DOF ที่ข้อมือติดตามการวางแนวเพียงบางส่วน หุ่นยนต์ Franka มีข้อต่อการวางตำแหน่งเจ็ดข้อ ช่องว่างนี้เป็นตัวกำหนดว่าท่าทางใดบ้างที่มีอยู่: แขน 5-DoF โดยทั่วไปไม่สามารถเข้าถึงตำแหน่งและการวางแนวที่กำหนดเองได้พร้อมกัน ดังนั้นตัวแก้ปัญหาจะส่งคืนตำแหน่งที่ใกล้ที่สุดเท่าที่จะทำได้ ซึ่งเป็นการเคลื่อนไหวที่แตกต่างจากที่สาธิตไว้ ข้อมูลพื้นฐาน: องศาอิสระ.

python
# src/lerobot/robots/so_follower/so_follower.py
motors = {
    "shoulder_pan":  Motor(1, "sts3215", norm_mode_body),
    "shoulder_lift": Motor(2, "sts3215", norm_mode_body),
    "elbow_flex":    Motor(3, "sts3215", norm_mode_body),
    "wrist_flex":    Motor(4, "sts3215", norm_mode_body),
    "wrist_roll":    Motor(5, "sts3215", norm_mode_body),
    "gripper":       Motor(6, "sts3215", MotorNormMode.RANGE_0_100),
}
# action keys are "<motor>.pos"; send_action sync_writes them to
# "Goal_Position"  ->  a 6-D ABSOLUTE JOINT POSITION command


# openpi/src/openpi/policies/droid_policy.py
def make_droid_example() -> dict:
    return {
        "observation/exterior_image_1_left": np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
        "observation/wrist_image_left":      np.random.randint(256, size=(224, 224, 3), dtype=np.uint8),
        "observation/joint_position":        np.random.rand(7),   # seven Franka joints
        "observation/gripper_position":      np.random.rand(1),
        "prompt": "do something",
    }
# state = concat(joint_position, gripper_pos)  ->  8-D
ซ้าย: SO follower ของ LeRobot จาก src/lerobot/robots/so_follower/so_follower.py ขวา: อินพุต DROID policy ของ openpi หกเทียบกับแปด

ดังนั้น DROID checkpoint ที่สร้างสำเร็จรูปจึงไม่ใช่ทางลัด Physical Intelligence จัดส่ง pi05_droid ที่ gs://openpi-assets/checkpoints/pi05_droid และ README เดียวกันที่ยกย่องความครอบคลุมของมันก็เตือนว่า expert checkpoint เหล่านี้อาจไม่สามารถนำไปใช้กับระบบของคุณได้ สถานะของมันคือตัวเลขข้อต่อ Franka แปดตัว และคีย์รูปภาพของมันคือ exterior_image_1_left และ wrist_image_left ไม่มี flag ใดที่เปลี่ยนสิ่งนั้นให้เป็นคำสั่ง SO-100 แบบหกมอเตอร์ได้

2. สิ่งที่ action vector บอกจริงๆ

ลึกซึ้งกว่ามิติ ในการแปลง LeRobot ทั้งสามตัวระบุว่า gripper ควรไปที่ใดในพื้นที่ Cartesian SO-100 ระบุว่าเซอร์โวหกตัวควรไปที่ใด การแปลงต้องใช้ kinematic model และ solver ไม่ใช่การปรับรูปร่างใหม่

คุณสมบัติOXE, DROID และ Bridge ในรูปแบบ LeRobotSO-100 ใน LeRobot
Action vector7-D: x, y, z, roll, pitch, yaw, gripper6-D: หนึ่งตำแหน่งเป้าหมายต่อมอเตอร์
State vector8-D, พร้อมช่อง pad (google_robot ใช้ quaternion)6-D, หนึ่งต่อมอเตอร์
เฟรมCartesian, ไม่สอดคล้องกันในชุดข้อมูลjoint space, การปรับเทียบต่อแขน
สัมบูรณ์หรือสัมพัทธ์อย่างใดอย่างหนึ่ง, ตัดสินใจโดยห้องปฏิบัติการต้นทางตำแหน่งเป้าหมายสัมบูรณ์
หน่วยทำให้เป็นมาตรฐานต่อชุดข้อมูล, จากนั้นทำให้เป็นค่าไม่ต่อเนื่ององศาโดยค่าเริ่มต้น (use_degrees=True), มิฉะนั้น -100 ถึง 100
ความล้มเหลวแบบเงียบค่าเดลต้าที่อ่านเป็นค่าสัมบูรณ์แขนที่ไม่ได้ปรับเทียบ
เวกเตอร์คาร์ทีเซียน 7 มิติเป็นข้อตกลงของตัวแปลง ไม่ใช่ของ DROID

ไฟล์ README ของ openx2lerobot ได้บันทึกสถานะ 8 มิติและแอคชัน 7 มิติที่เป็นหนึ่งเดียวกันสำหรับทุกชุดข้อมูลที่แปลง ซึ่งเป็นที่มาของช่อง pad สคีมา RLDS ของ DROID เองนั้นแตกต่างกัน: action ระดับบนสุดของมันคือเวกเตอร์ 7 มิติของ ความเร็วข้อต่อ 6 ค่าบวกตำแหน่งกริปเปอร์ 1 ค่า โดยมี cartesian_position, cartesian_velocity, joint_position และ joint_velocity อยู่ภายใต้ action_dict openpi อ่านมุมมองในพื้นที่ข้อต่อ ส่วน LeRobot build จะให้มุมมองแบบคาร์ทีเซียนแก่คุณ ทั้งสองอย่างไม่ใช่ค่ามุมเซอร์โวสัมบูรณ์หกค่า

LeRobot มีส่วนที่ขาดหายไป: SO follower มีโปรเซสเซอร์จลนศาสตร์ที่มีขั้นตอน InverseKinematicsEEToJoints และ ForwardKinematicsJointsToEE คีย์ของมันคือ ee.x, ee.y, ee.z บวกกับเวกเตอร์การหมุน ee.wx, ee.wy, ee.wz และ ee.gripper_pos ดังนั้นแม้แต่การเข้ารหัสทิศทางก็ยังแตกต่างจาก roll-pitch-yaw ในไฟล์ ขั้นตอน IK ใช้ orientation_weight ซึ่งมีค่าเริ่มต้น 0.01 โดย docstring ระบุให้ตั้งค่าเป็น 0.0 สำหรับ IK เฉพาะตำแหน่งบนแขนกลที่ควบคุมได้ไม่เต็มที่ คุณสามารถสร้างสะพานเชื่อมได้ แต่ครึ่งหนึ่งของแอคชันที่ยืมมาซึ่งเกี่ยวข้องกับทิศทางจะยังคงเป็นการประมาณค่า

3. อัตราการควบคุม

DROID ทำงานที่ 15 Hz, BridgeData V2 ที่ 5 Hz, ส่วน google_robot ที่ 3 fps; ผู้เขียน pi0 อธิบายส่วนโอเพนซอร์สของส่วนผสมของพวกเขาว่าเป็นการควบคุมความถี่ต่ำระหว่าง 2 ถึง 10 Hz DatasetRecordConfig ของ LeRobot มีค่าเริ่มต้นเป็น fps 30, episode_time_s 60, reset_time_s 60, num_episodes 50 ที่ฝึกด้วยข้อมูล 5 Hz เรียนรู้ว่าหนึ่งแอคชันครอบคลุม 200 ms หากเล่นซ้ำที่ 30 Hz แขนกลจะเคลื่อนที่ช้ามาก; หากสุ่มตัวอย่างใหม่แบบง่ายๆ คุณจะทำให้เฟรมที่กริปเปอร์ปิดเบลอ นอกจากนี้ยังทำงานได้ไม่ดีกับ : ส่วน 100 ขั้นตอนคือ 20 วินาทีที่ 5 Hz และ 3.3 วินาทีที่ 30 Hz

4. กล้อง

BridgeData V2 สุ่มตำแหน่งกล้องสองตำแหน่งทุกๆ 50 วิถี และหน้าโปรเจกต์ของมันระบุว่าข้อมูลส่วนใหญ่มีเพียงมุมมองคงที่อยู่แล้ว DROID ใช้ฐานยึด ZED 2 ที่ปรับได้พร้อมกับ ZED Mini ที่ข้อมือ คุณมีเว็บแคม USB สองตัวที่จัดตำแหน่งด้วยสายตา ตำแหน่งกล้องไม่ใช่ตัวแปรที่ก่อกวนสำหรับ ; มันเป็นส่วนสำคัญที่ตัวเข้ารหัสภาพใช้ และไม่มีอะไรในรูปแบบไฟล์ที่บอกคุณว่าตำแหน่งแตกต่างกัน

กับดักที่กินเวลาไปทั้งวัน

ส่วนประกอบต่างๆ เข้ากันได้ดีพอที่จะทำงานได้ ชุดข้อมูลโหลดขึ้น การฝึกเริ่มขึ้น ค่าความเสียหายลดลง จุดตรวจสอบปรากฏขึ้น ไม่มีข้อผิดพลาดใดๆ จากนั้นนโยบายก็ไม่ทำอะไรที่จดจำได้บนแขนหุ่นยนต์ และคุณใช้เวลาทั้งวันในการตามล่าหาข้อผิดพลาดในสคริปต์การฝึกของคุณ ไม่มีข้อผิดพลาด: โมเดลได้เรียนรู้การกระจายการกระทำแบบคาร์ทีเซียนสำหรับหุ่นยนต์ที่ไม่มีอยู่ในห้องของคุณ เริ่มต้นที่ ค่าความเสียหายลดลง แต่นโยบายไม่ทำอะไร ไม่ใช่ที่ไฮเปอร์พารามิเตอร์ของคุณ

จะเกิดอะไรขึ้นเมื่อคุณพยายามรวมข้อมูลอยู่ดี

แผนที่ชัดเจนคือการรวม: DROID หลายพันตอนบวกกับ 50 ตอนของคุณ LeRobot ปฏิเสธ และการปฏิเสธนั้นระบุสามสิ่งที่แตกต่างกัน

  1. 1
    ดึงตัวอย่าง 100 ตอน ไม่ใช่ 1.7 TB เต็ม

    2 GB ก็เพียงพอที่จะเห็นโครงสร้างแล้ว

    bash
    pip install gsutil tensorflow tensorflow-datasets
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  2. 2
    แปลง RLDS เป็นรูปแบบ LeRobot

    openx2lerobot ห่อหุ้มการแปลงมาตรฐาน OXE และระบุประเภทหุ่นยนต์และความถี่ในการควบคุม README ระบุสิ่งนี้ไว้ใน convert.sh

    bash
    git clone https://github.com/Tavish9/any4lerobot.git
    cd any4lerobot/openx2lerobot
    
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  3. 3
    อ่าน meta/info.json ก่อนสิ่งอื่นใด

    ไฟล์นี้เป็นตัวตัดสินว่าส่วนที่เหลือของวันของคุณจะทำงานได้หรือไม่

    bash
    python -c "import json;d=json.load(open('meta/info.json'));\
    print(d['codebase_version'], d['robot_type'], d['fps']);\
    print(d['features']['action']['shape'], d['features']['observation.state']['shape'])"
  4. 4
    ลองรวมและอ่านข้อผิดพลาด

    merge โหลดทุกชุดข้อมูล จากนั้น validate_all_metadata จะตรวจสอบ fps, robot_type และ features เทียบกับรายการแรกในลิสต์ โดยจะแจ้งข้อผิดพลาดเมื่อพบความไม่ตรงกันครั้งแรก

    bash
    lerobot-edit-dataset \
        --new_repo_id you/mixed \
        --operation.type merge \
        --operation.repo_ids "['you/droid100_lerobot', 'you/my_so100_task']"
    
    # ValueError: Same fps is expected, but got fps=30 instead of 15.

ค่าอ้างอิงมาจากชุดข้อมูลใดก็ตามที่คุณระบุไว้เป็นอันดับแรก ซึ่งเป็นเหตุผลที่ข้อความบ่นเกี่ยวกับ 30 fps ของคุณแทนที่จะเป็น 15 fps ของ DROID แก้ไข fps แล้วคุณจะเจอการตรวจสอบ robot_type แก้ไขสิ่งนั้นแล้วคุณจะเจอการตรวจสอบ feature โดย 7 เทียบกับ 6 สำหรับ action ไม่มีลำดับใดผ่านไปได้ และการป้องกันเดียวกันนี้จะทำงานในเวลาบันทึกผ่าน sanity_check_dataset_robot_compatibility

อย่าฮาร์ดโค้ด robot_type เพื่อหลีกเลี่ยงการตรวจสอบ

ใน LeRobot main ปัจจุบัน so100_follower และ so101_follower ทั้งคู่ถูกลงทะเบียนบน SOFollowerRobotConfig ที่ใช้ร่วมกัน ดังนั้นสตริงจากการบันทึกจริงจึงไม่จำเป็นต้องเป็นสิ่งที่คุณคาดหวัง อ่านจาก meta/info.json ของคุณเอง และถือว่าการตรวจสอบที่คุณต้องปิดใช้งานเป็นการตรวจสอบที่กำลังบอกบางสิ่งบางอย่างแก่คุณ

แล้วอะไรที่ถ่ายทอดได้จริงบ้าง?

น้ำหนักโมเดล ไม่ใช่ตอนการเรียนรู้ นโยบายทั่วไปที่ทันสมัยทุกตัวได้ดูดซับบางส่วนของการเรียนรู้ล่วงหน้า และเมื่อคุณ จากที่เผยแพร่ออกมา คุณจะได้รับมรดกที่ได้รับการปรับปรุงแก้ไขแล้วโดยผู้ที่มีกำลังประมวลผลเพียงพอที่จะทำได้อย่างถูกต้อง เอกสารของ pi0 เปิดเผยสัดส่วนอย่างตรงไปตรงมา: 9.1 เปอร์เซ็นต์ของส่วนผสมการเรียนรู้ล่วงหน้า ซึ่งนับเป็นไทม์สเต็ป เป็นข้อมูลโอเพนซอร์ส รวมถึง OXE, Bridge v2 และ DROID ตัวเลขนี้เป็นของ pi0; ส่วนผสมของผู้จำหน่ายแต่ละรายจะแตกต่างกันไป

ข้อมูลข้ามกายภาพสาธารณะในโครงการ SO-100
ข้อดี
  • ความรู้พื้นฐานด้านภาพและภาษา: ตัวเข้ารหัสได้เห็นห้องครัวและแก้วกาแฟนับพันใบ และรู้ว่า "บล็อกสีแดง" หมายถึงอะไร
  • ความรู้พื้นฐานเกี่ยวกับโครงสร้างการจัดการ: เข้าใกล้, ปิด, ยก, ขนส่ง, ปล่อย, เป็นอิสระจากกายภาพแม้ว่าตัวเลขจะไม่ใช่ก็ตาม
  • ชุดข้อมูลที่ทราบว่าดีสำหรับการทดสอบ หากงานของคุณไม่สามารถโอเวอร์ฟิต 100 DROID episodes ได้ ปัญหาคือการตั้งค่าของคุณ
  • จุดอ้างอิง: ในโดเมนชุดข้อมูลขนาดเล็ก RT-1-X มีอัตราความสำเร็จเฉลี่ยสูงกว่าวิธีการดั้งเดิมหรือ RT-1 ถึง 50 เปอร์เซ็นต์ และ RT-2-X เอาชนะ RT-2 ได้ประมาณ 3 เท่าในทักษะที่เกิดขึ้นใหม่
ข้อแลกเปลี่ยน
  • ไม่มีการกำกับดูแลการกระทำที่ใช้งานได้จริง เป้าหมายคาร์ทีเซียน 7 มิติ ไม่ใช่คำสั่งข้อต่อ 6 มิติ
  • ไม่มีการถ่ายทอดท่าทางกล้อง และไม่มีสิ่งใดในข้อมูลที่บอกว่าท่าทางแตกต่างกัน
  • ไม่มีการถ่ายทอดเวลา: แหล่งที่มา 3, 5 และ 15 fps เทียบกับเครื่องบันทึก 30 fps
  • ไม่มีการถ่ายทอดตัวจับยึด Robotiq 2F-85 และก้ามหนีบที่พิมพ์บน STS3215 มีความแตกต่างกันในด้านแรง ระยะชัก และพลวัต
  • ขนาดเพียงอย่างเดียวไม่เพียงพอแม้แต่สำหรับผู้เขียน: ในโดเมนชุดข้อมูลขนาดใหญ่ RT-1-X ไม่สามารถเอาชนะ RT-1 ที่ฝึกด้วยชุดข้อมูลนั้นเพียงอย่างเดียวได้
  • ไม่มีการลดจำนวนตอนที่คุณต้องการเอง
เลเยอร์ของโมเดลถ่ายทอดได้หรือไม่?เหตุผล
Vision encoderใช่, อย่างมากวัตถุและฉากเป็นอิสระจากกายภาพ
Language groundingใช่คำสั่งเป็นข้อความ ไม่ใช่เรขาคณิต
Cross-modal fusionส่วนใหญ่ให้ความสนใจกับวัตถุที่ระบุในข้อความแจ้ง
Proprioception encoderไม่มิติอินพุตและความหมายของข้อต่อแตกต่างกัน
Action headไม่ฝึกบนพื้นที่คาร์ทีเซียน 7 มิติที่คุณไม่ได้อยู่
Normalisation statisticsไม่, และอันตรายสถิติภายนอกทำให้ทุกคำสั่งคลาดเคลื่อน

นี่คือเหตุผลว่าทำไม SmolVLA จึงทำงานแตกต่างกันบนแขนกลราคาประหยัด งานวิจัยของมันเลือกชุดข้อมูลชุมชน 481 ชุดจาก Hugging Face โดยกรองตามประเภทของตัวหุ่นยนต์ จำนวนตอน คุณภาพข้อมูล และความครอบคลุมของเฟรม: 22.9K ตอน, 10.6M เฟรม, ประเมินผลบนแขนกล SO-100 และ SO-101 จริง ขนาดเล็กและตรงกันดีกว่าขนาดใหญ่และไม่ตรงกัน เปรียบเทียบกับ ACT เทียบกับ SmolVLA.

สามเส้นทางที่น่าสนใจ

เส้นทาง A: ปรับแต่งจากจุดตรวจสอบที่ได้ดูดซับข้อมูลไปแล้ว

คนส่วนใหญ่ควรเลือกเส้นทางนี้ คุณไม่จำเป็นต้องยุ่งกับ DROID หรือ Open X-Embodiment: เลือกนโยบายที่การฝึกอบรมล่วงหน้าได้ดูดซับข้อมูลข้ามตัวหุ่นยนต์ไปแล้ว บันทึกตอนของคุณเอง แล้วปรับแต่ง

นโยบายพารามิเตอร์จำนวนตอนขั้นต่ำรูปแบบชุดข้อมูลระดับ GPUการอนุมานจุดตรวจสอบพื้นฐาน
GR00T N1.7~3 B, ~40 M ฝึกฝนในการปรับแต่งอย่างละเอียด50LeRobot v2.0 or v2.1A100 or H100 80 GB152 ms per stepnvidia/GR00T-N1.7-3B
GR00T N1.5~3 B50LeRobot v2.0 or v2.1A100 or H100 80 GB165 msnvidia/GR00T-N1.5-3B
Pi0.5~3 B, แกนหลัก PaliGemma50LeRobot v3.0A100 or H100 80 GB485 mslerobot/pi05_base
SmolVLA~450 M30LeRobot v3.0RTX 4090 or any 24 GB245 mslerobot/smolvla_base
ACT~80 M50LeRobot v3.0RTX 4090 or any 24 GB20 msไม่มี, เริ่มต้นใหม่ทั้งหมด

ACT เป็นกรณีพิเศษที่ตรงไปตรงมา: ไม่มีโมเดลพื้นฐาน ดังนั้นจึงไม่มีข้อมูลสาธารณะใดๆ เข้าถึงได้โดยตรง นี่ไม่ใช่ข้อเสียโดยอัตโนมัติ เนื่องจากที่ 20 มิลลิวินาทีต่อขั้นตอนการดำเนินการ มันเป็นเพียงหนึ่งในห้าโมเดลที่สามารถปิดลูปได้อย่างรวดเร็ว ดังที่ หน้า ACT ระบุไว้ เลือกตามงานโดยใช้ ทั้งห้าแบบเปรียบเทียบกัน, GR00T N1.7 เทียบกับ Pi0.5 และผลการทดสอบมาตรฐาน 332 รายการจาก 85 โมเดลใน อารีน่า.

เส้นทาง B: ใช้ DROID เป็นอุปกรณ์ทดสอบ

ตัวอย่าง 100 ตอนเป็นข้อมูล 2 GB ที่ดีที่สุดที่คุณจะดาวน์โหลดในเดือนนี้ และไม่ใช่สำหรับการฝึกอบรม มันคือชุดข้อมูลที่คุณรู้ว่าถูกต้อง รันตัวแปลง ตัวโหลด และงาน GPU สั้นๆ บนข้อมูลนี้ สิ่งใดก็ตามที่ล้มเหลวคือข้อผิดพลาดโครงสร้างพื้นฐานที่พบในขณะที่ยังแก้ไขได้ง่าย NVIDIA ทำเช่นเดียวกันในระดับใหญ่: การ์ด GR00T N1.7 ระบุรุ่นที่ผ่านการฝึกอบรมเพิ่มเติมสี่แบบ สำหรับ Bridge และ Fractal ใน SimplerEnv, DROID และ LIBERO.

เส้นทาง C: บันทึกข้อมูลของคุณเองอย่างตั้งใจ

สามสิบถึงห้าสิบ อาจดูน้อยเมื่อเทียบกับ 76,000 จนกว่าคุณจะจำได้ว่าข้อมูลของคุณเป็นชุดเดียวที่มีแขนกล กล้อง และโต๊ะของคุณ ตามค่าเริ่มต้นของ LeRobot, 50 ตอนใช้เวลาจริง 100 นาที ดู , และ .

หน้าบทช่วยสอนการบันทึกของ AY-Robots ที่แสดงขั้นตอนการจับภาพชุดข้อมูล LeRobot จากเซสชันการควบคุมระยะไกล
ขั้นตอนการบันทึกข้อมูลที่ /learn/record-your-first-dataset: ขั้นตอนนี้เป็นสิ่งที่ข้อมูลสาธารณะไม่สามารถทดแทนได้

สองวิธีในการเปลี่ยนจากข้อมูลสาธารณะไปสู่นโยบายที่ใช้งานได้จริง

All of this runs on your own machine plus a rented GPU. Knowing the manual path matters because when something breaks you will know which layer broke.

  1. 1
    Install LeRobot with the extras the scripts need

    The record and train entry points each declare their own extra.

    bash
    pip install 'lerobot[core_scripts]'   # lerobot-record
    pip install 'lerobot[training]'      # lerobot-train
    pip install gsutil tensorflow tensorflow-datasets
  2. 2
    Get a small, known-good slice

    100 DROID episodes, 2 GB.

    bash
    gsutil -m cp -r gs://gresearch/robotics/droid_100 ~/tensorflow_datasets/
  3. 3
    Convert to LeRobot form

    Writes the unified 8-D state and 7-D action, annotating robot type and control frequency.

    bash
    python openx_rlds.py \
        --raw-dir ~/tensorflow_datasets/droid_100/1.0.0 \
        --local-dir ~/lerobot_droid100 \
        --repo-id you/droid100_lerobot \
        --use-videos
  4. 4
    Check the version against your trainer

    The converter README documents v3.0 output; the published IPEC-COMMUNITY datasets report v2.0. GR00T wants v2.0 or v2.1 and crashes on v3.0; Pi0.5, SmolVLA and ACT want v3.0. Mind the gap: the only conversion script on LeRobot main goes 2.1 to 3.0.

    bash
    python src/lerobot/scripts/convert_dataset_v21_to_v30.py \
        --repo-id=you/droid100_lerobot
  5. 5
    Record your own episodes

    Defaults: 30 fps, 60 s per episode, 60 s reset, 50 episodes. The teleoperator type is so100_leader.

    bash
    lerobot-record \
      --robot.type=so100_follower \
      --robot.port=/dev/ttyACM0 \
      --robot.cameras="{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}" \
      --teleop.type=so100_leader \
      --teleop.port=/dev/ttyACM1 \
      --dataset.repo_id=you/so100_pick_block \
      --dataset.num_episodes=50 \
      --dataset.single_task="Pick up the red block and put it in the bowl"
  6. 6
    Fine-tune on your data only

    Weights from public data, actions from your own. Do not mix the datasets.

    bash
    lerobot-train \
      --policy.path=lerobot/smolvla_base \
      --dataset.repo_id=you/so100_pick_block \
      --policy.device=cuda \
      --batch_size=4 \
      --steps=20000
Where the time actually goes

Not in training; the GPU job is hours. The conversion, the version mismatch and the moment you find your dataset is v2.0 and your trainer wants v3.0 are days. Read dataset rejected as v3 first.

หน้าดาวน์โหลดไคลเอนต์เดสก์ท็อป AY-Robots ซึ่งเป็นไคลเอนต์ที่บันทึกชุดข้อมูลรูปแบบ LeRobot จากเซสชันการควบคุมระยะไกล
ไคลเอนต์เดสก์ท็อปที่ /download เขียนชุดข้อมูล LeRobot โดยตรงจากการควบคุมระยะไกล โดยไม่ต้องผ่านการแปลง RLDS

ค่าใช้จ่ายของแต่ละเส้นทาง

เส้นทางพื้นที่จัดเก็บเวลาที่ใช้โดยมนุษย์ค่าใช้จ่าย GPUโอกาสที่แขนหุ่นยนต์จะเคลื่อนไหว
DROID ที่แปลงแล้ว (เดี่ยว)392 GBวันในการแปลง4 to 12 USDต่ำมาก, พื้นที่การกระทำไม่ถูกต้อง
DROID ที่รวมกับตอนของคุณbothถูกบล็อกโดย validate_all_metadatan/aไม่มี, ไม่ทำงาน
SmolVLA, 30 ถึง 50 ตอนของคุณเองไม่กี่ GBบันทึก 100 นาที1 to 3 USDสูง
GR00T N1.7, 50 ตอนของคุณเองไม่กี่ GBบันทึก 100 นาที4 to 12 USDสูง
ACT จากศูนย์, 50 ตอนของคุณเองไม่กี่ GBบันทึก 100 นาที1 to 3 USDสูง, การอนุมาน 20 มิลลิวินาที
ตัวอย่าง DROID สำหรับการทดสอบ2 GBช่วงบ่ายการรันสั้นๆ หนึ่งครั้งสูง, เพื่อการตรวจสอบ

ความไม่สมมาตรคือประเด็นสำคัญ: เส้นทางที่ยืมข้อมูลมากที่สุดคือเส้นทางที่แพงที่สุดและมีโอกาสน้อยที่สุดที่จะขยับแขนของคุณ การใช้เวลาไม่ถึงสองชั่วโมงในการทำ การควบคุมระยะไกล ดีกว่าข้อมูล Franka ของคนอื่นเป็นเทราไบต์ ยังไม่มีแขนหุ่นยนต์ใช่ไหม? /live สตรีม SO-100 จริงโดยไม่ต้องลงทะเบียน จากนั้น ฝึกนโยบายแรกของคุณ, และ SmolVLA บน SO-100 สำหรับคู่มือเฉพาะ

แผนเริ่มต้นที่สมเหตุสมผล

ดาวน์โหลดตัวอย่าง DROID ขนาด 2 GB และใช้เพื่อพิสูจน์ไปป์ไลน์ของคุณ ไม่ต้องสนใจข้อมูลส่วนที่เหลือ 1.7 TB บันทึก 50 ตอนของงานเดียวด้วยกล้องที่ติดตั้งอยู่กับที่ Fine-tune SmolVLA ก่อน เพราะด้วยจำนวนตอนขั้นต่ำ 30 ตอนบนการ์ด 24 GB ทำให้การทดลองซ้ำมีค่าใช้จ่ายถูกที่สุด จากนั้นลองใช้ GR00T N1.7 กับข้อมูลชุดเดียวกัน เปรียบเทียบกับงานของคุณเอง ไม่ใช่กับเกณฑ์มาตรฐาน

บันทึกชุดข้อมูลที่ตรงกับแขนกลของคุณ

ไคลเอนต์เดสก์ท็อปเขียนชุดข้อมูลรูปแบบ LeRobot ได้โดยตรงจากการควบคุมระยะไกล: แขนที่ถูกต้อง, อัตราเฟรมที่ถูกต้อง, พื้นที่การกระทำที่ถูกต้อง ไม่มีการแปลง RLDS ไม่มีการแมปใหม่

รับไคลเอนต์เดสก์ท็อป
ฉันสามารถฝึกนโยบายบน DROID และรันบน SO-100 ของฉันได้หรือไม่?

ไม่โดยตรง ใน LeRobot build การกระทำของ DROID คือคำสั่ง end-effector แบบ 7 มิติบน Franka Panda ที่ 15 fps; ใน RLDS ดั้งเดิม พวกมันคือความเร็วข้อต่อ 6 ค่าบวกกับตำแหน่งของกริปเปอร์ SO-100 ใช้ตำแหน่งข้อต่อสัมบูรณ์ 6 ค่า คุณจะต้องมีเลเยอร์ inverse-kinematics และแม้กระนั้น ข้อมือแบบ 5-DoF ก็ไม่สามารถสร้างท่าทาง 6-DoF แบบสุ่มได้

ฉันสามารถผสมตอนของ DROID หรือ Bridge กับตอน SO-100 ของฉันเองได้หรือไม่?

ไม่ได้ validate_all_metadata ต้องการ fps, robot_type และ feature schema ที่เหมือนกัน และจะส่ง ValueError เมื่อพบความไม่ตรงกันครั้งแรก ทั้งสามอย่างแตกต่างกัน: 15 หรือ 5 fps เทียบกับ 30, franka หรือ widowx เทียบกับแขนกลของคุณ, รูปแบบการกระทำ 7 เทียบกับ 6 การเขียน metadata ใหม่เพื่อให้ผ่านการตรวจสอบไม่ได้แก้ไขความหมาย

แล้ว Open X-Embodiment ไม่มีประโยชน์สำหรับแขนกลราคาประหยัดใช่หรือไม่?

ไม่ แต่คุณค่าของมันมาถึงคุณผ่านน้ำหนักที่ผ่านการฝึกอบรมล่วงหน้า ไม่ใช่ผ่านตอนต่างๆ ชุดข้อมูลโอเพนซอร์สรวมถึง OXE, Bridge v2 และ DROID คิดเป็น 9.1 เปอร์เซ็นต์ของส่วนผสมการฝึกอบรมล่วงหน้าของ pi0 และ NVIDIA จัดส่ง GR00T N1.7 รุ่นที่ผ่านการฝึกอบรมหลังการฝึกอบรมบน Bridge, Fractal, DROID และ LIBERO สิ่งที่คุณไม่สามารถทำได้คือการผนวกตอนเหล่านั้นเข้ากับการบันทึกของคุณเอง

นโยบายใดที่ได้รับประโยชน์สูงสุดจากข้อมูล cross-embodiment สาธารณะ?

Pi0.5 และโมเดล GR00T มีการฝึกอบรมล่วงหน้าแบบ cross-embodiment มากที่สุด แต่ SmolVLA มักจะทำงานได้ดีที่สุดบนแขนกลราคาประหยัด: ชุดการฝึกอบรมล่วงหน้าของมันคือชุดข้อมูลชุมชน 481 ชุด, 22.9K ตอน และ 10.6M เฟรม ซึ่งได้รับการประเมินบนแขนกล SO-100 และ SO-101 จริง ACT ตรงกันข้าม: ไม่มีโมเดลพื้นฐาน, 20 ms ต่อขั้นตอนการกระทำ

ฉันต้องการตอนของฉันเองกี่ตอนกันแน่?

30 สำหรับ SmolVLA, 50 สำหรับ GR00T N1.7, GR00T N1.5, Pi0.5 และ ACT ที่ค่าเริ่มต้นของ LeRobot ที่ 60 วินาทีต่อตอน และ 60 วินาทีในการรีเซ็ต, 50 ตอนคือ 100 นาทีของเวลาจริง ข้อมูล cross-embodiment ที่ยืมมาไม่ได้ลดจำนวนเหล่านั้นลง

Sources

Ready for high-quality robotics data?

AY-Robots connects your robots to skilled operators worldwide.

Get Started