Thí nghiệm AI
Thí nghiệm Dactyl: OpenAI đã dạy bàn tay robot giải Rubik như thế nào?
Kể lại chi tiết thí nghiệm Dactyl của OpenAI: cách bàn tay robot được huấn luyện hoàn toàn trong mô phỏng, chuyển kỹ năng sang thế giới thật, những lỗi xuất hiện và kết quả cuối cùng.
💡Điểm chính của bài viết
- Kể lại chi tiết thí nghiệm Dactyl của OpenAI: cách bàn tay robot được huấn luyện hoàn toàn trong mô phỏng, chuyển kỹ năng sang thế giới thật, những lỗi xuất hiện và kết quả cuối cùng.

Nguồn ảnh: OpenAI, “Solving Rubik’s Cube with a robot hand”. Ảnh: Eric Haines. Trang nguồn: https://openai.com/index/solving-rubiks-cube/
Thí nghiệm này là gì?
Năm 2019, OpenAI công bố một thí nghiệm trong đó bàn tay robot năm ngón có tên Dactyl cầm và giải một khối Rubik ngay trong lòng bàn tay.[1]
Điều khó không nằm ở tốc độ. Dactyl chậm hơn con người rất nhiều. Nhiệm vụ khó ở chỗ robot phải giữ khối Rubik không rơi, đổi cách cầm, xoay đúng từng mặt và lặp lại các thao tác đó qua nhiều bước liên tiếp.
Nhóm nghiên cứu không viết sẵn từng chuyển động cho mỗi ngón. Họ huấn luyện một mạng nơ-ron trong mô phỏng, sau đó chuyển mạng đó sang bàn tay robot thật.
Giai đoạn 1: Tách bài toán thành hai phần
OpenAI bắt đầu theo đuổi mục tiêu này từ tháng 5/2017.[1]
Bàn tay được sử dụng là Shadow Dexterous Hand, một bàn tay robot năm ngón có nhiều khớp. Phần cứng này đã tồn tại từ trước; phần mới của thí nghiệm chủ yếu nằm ở cách huấn luyện phần mềm điều khiển.[1][2]
Nhóm nghiên cứu tách nhiệm vụ thành hai phần:
- Tìm chuỗi nước để giải Rubik.
- Điều khiển bàn tay để thực hiện từng nước.
Mạng nơ-ron không tự nghĩ ra lời giải Rubik. OpenAI dùng thuật toán Kociemba để tạo chuỗi nước giải. AI chỉ phụ trách phần vật lý: giữ khối, lật khối, đưa mặt cần xoay lên trên và xoay đúng 90 độ.[1][2]
Giai đoạn 2: Học trong mô phỏng
Nếu cho robot học trực tiếp trên phần cứng thật, quá trình sẽ rất chậm và dễ làm hỏng thiết bị. Vì vậy, OpenAI dựng một thế giới mô phỏng có bàn tay, khối Rubik và các đặc tính vật lý cơ bản.[2]
Trong mô phỏng, mạng nơ-ron thử lặp lại nhiều hành động:
- co và duỗi từng ngón;
- thay đổi lực giữa các đầu ngón;
- lăn khối Rubik trong lòng bàn tay;
- lật khối để đưa một mặt khác lên trên;
- xoay mặt trên 90 độ;
- ổn định khối sau mỗi lần xoay.
Khi làm đúng mục tiêu, hệ thống nhận phần thưởng. Khi làm rơi khối hoặc không đạt được tư thế yêu cầu, lần thử bị tính là thất bại.
Giai đoạn 3: Mô phỏng không giống hoàn toàn đời thật
Sau khi học tốt trong mô phỏng, mạng nơ-ron vẫn chưa thể hoạt động ổn định trên robot thật.
Các yếu tố như ma sát đầu ngón, khối lượng Rubik, độ trễ động cơ, độ rơ khớp, ánh sáng, camera và độ cứng của từng mặt Rubik rất khó mô phỏng chính xác.
Chỉ một sai lệch nhỏ cũng có thể khiến ngón tay trượt, xoay thiếu góc hoặc làm khối rơi.
Ban đầu, nhóm dùng domain randomization: thay đổi nhiều thông số trong mô phỏng để AI không quen với chỉ một thế giới hoàn hảo. Nhưng cách chỉnh thủ công gặp hai vấn đề:
- ngẫu nhiên quá ít thì robot không chịu được môi trường thật;
- ngẫu nhiên quá nhiều ngay từ đầu thì AI không học nổi.[1]
Giai đoạn 4: Automatic Domain Randomization
Để giải quyết vấn đề đó, OpenAI phát triển Automatic Domain Randomization, viết tắt là ADR.[1][2]
ADR bắt đầu bằng một môi trường tương đối đơn giản. Khi mạng nơ-ron đạt mức hiệu suất nhất định, hệ thống tự tăng độ khó.
Các thông số được thay đổi dần gồm:
- kích thước khối Rubik;
- khối lượng của khối;
- độ ma sát đầu ngón tay;
- màu sắc và vật liệu bề mặt;
- hành vi của khớp;
- độ trễ của hệ thống.
Khi AI thích nghi được, phạm vi lại tiếp tục mở rộng.

Nguồn ảnh: OpenAI. Hình minh họa các biến thể màu sắc, ánh sáng và bề mặt trong quá trình domain randomization. Trang nguồn: https://openai.com/index/solving-rubiks-cube/
Nhờ ADR, mạng không thể học thuộc một phiên bản vật lý duy nhất. Nó phải liên tục điều chỉnh theo nhiều phiên bản khác nhau của cùng một nhiệm vụ.[1]
Giai đoạn 5: Tập từ khối đơn giản đến Rubik đầy đủ
Nhóm nghiên cứu không bắt đầu ngay bằng Rubik thông thường. Họ tạo nhiều nguyên mẫu để kiểm tra từng kỹ năng riêng:[1][2]
- Locked cube: khối bị khóa, không mặt nào xoay được; robot chỉ học giữ và đổi hướng.
- Face cube: chỉ một phần chuyển động mặt được cho phép.
- Full cube: đủ sáu mặt xoay, có hệ thống theo dõi trạng thái.
- Giiker cube: Rubik có cảm biến bên trong để báo góc xoay.
- Regular Rubik’s Cube: khối gần thông thường, được theo dõi bằng camera.

Nguồn ảnh: OpenAI. Từ trái sang phải: locked cube, face cube, full cube, Giiker cube và Rubik thông thường. Trang nguồn: https://openai.com/index/solving-rubiks-cube/
Cách chia nhỏ này giúp nhóm biết robot đang thất bại ở kỹ năng giữ khối, lật khối, xoay mặt hay nhận biết trạng thái.
Giai đoạn 6: Xây dựng hệ thống quan sát trên robot thật
Hệ thống vật lý gồm:
- bàn tay Shadow Dexterous Hand;
- ba camera RGB;
- hệ thống motion capture theo dõi đầu ngón;
- mạng thị giác ước lượng vị trí và hướng của Rubik;
- mạng điều khiển quyết định chuyển động tiếp theo.[2]
Ở một số nguyên mẫu, trạng thái các mặt được lấy từ cảm biến bên trong. Với phiên bản gần Rubik thông thường, camera phải ước lượng trạng thái khối.
OpenAI cũng sửa phần cứng để ổn định hơn: đưa dây cảm biến vào trong ngón, thêm cao su ở đầu ngón và thiết kế lại khung đặt robot để việc hiệu chỉnh camera ít bị xê dịch.[2]
Một lượt giải Rubik diễn ra thế nào?
Một lần thử hoàn chỉnh diễn ra theo trình tự:
- Khối Rubik được xáo trộn.
- Thuật toán Kociemba tính chuỗi nước giải.
- Chuỗi đó được chia thành các mục tiêu nhỏ.
- Nếu mặt cần xoay chưa ở trên, robot phải lật khối trong lòng bàn tay.
- Các ngón đổi vị trí để kẹp chắc.
- Một hoặc nhiều ngón xoay mặt trên 90 độ.
- Camera và cảm biến kiểm tra trạng thái mới.
- Hệ thống chuyển sang nước tiếp theo.
- Quá trình lặp lại cho đến khi khối được giải, bị rơi hoặc hết thời gian.[1][2]
Robot không chạy một hoạt cảnh cố định. Sau mỗi thao tác, nó lại quan sát và điều chỉnh cách cầm.
Những lỗi xuất hiện
1. Làm rơi khối Rubik
Đây là lỗi phổ biến nhất. Một lần giải có thể cần nhiều lần lật và xoay. Chỉ cần một ngón trượt hoặc lực kẹp không đủ, Rubik sẽ rơi khỏi tay. Theo quy tắc đánh giá, làm rơi khối được tính là thất bại.[1]
OpenAI nhận thấy robot thường dễ thất bại hơn trong vài lần lật và xoay đầu tiên, vì lúc đó mạng vừa phải thực hiện nhiệm vụ vừa phải thích nghi với đặc tính vật lý thật.[1]
2. Hết thời gian
Nếu robot mất quá lâu để hoàn thành, lượt thử cũng bị tính là thất bại.[1]
Dactyl thường dừng lại để đổi cách kẹp và điều chỉnh ngón. Một lỗi nhỏ chưa chắc làm rơi khối ngay, nhưng có thể khiến cả chuỗi thao tác kéo dài quá mức.
3. Đặt ngón sai vị trí
Nếu ngón tay chạm quá gần cạnh hoặc tỳ sai mặt, lực xoay có thể không đủ. Mặt Rubik có thể chỉ xoay một phần, lệch khỏi 90 độ hoặc làm cả khối trượt khỏi lòng bàn tay.
4. Nhìn sai tư thế của Rubik
Ngón tay có thể che khuất khối. Ánh sáng và góc camera cũng thay đổi. Nếu mạng thị giác dự đoán sai vị trí hoặc hướng, mạng điều khiển có thể đưa ngón đến sai chỗ.[2]
5. Thế giới thật vẫn khác mô phỏng
ADR cải thiện việc chuyển kỹ năng sang robot thật nhưng không loại bỏ hoàn toàn chênh lệch. Ma sát thay đổi, phần cứng bị mòn, các khối Rubik không cứng giống nhau và camera luôn có nhiễu.
Thử gây nhiễu cho robot
Để kiểm tra độ ổn định, nhóm cố tình gây nhiễu khi robot đang làm việc.
OpenAI công bố cảnh Dactyl tiếp tục thao tác khi bị một con hươu cao cổ nhồi bông chọc vào. Nhóm cũng thử các thay đổi khác liên quan đến chuyển động và quan sát.[1][2]
Trong nhiều trường hợp, robot vẫn hoàn thành được thao tác, nhưng chậm hơn. Sau khi điều kiện thay đổi, thời gian cho một lần lật hoặc xoay thường tăng lên, rồi giảm dần khi mạng thích nghi.[1]
Kết quả cuối cùng
OpenAI báo cáo hai mức kết quả chính:[1]
- Với lần xáo trộn cần khoảng 15 lần xoay mặt, Dactyl giải thành công khoảng 60%.
- Với bài khó tối đa cần 26 lần xoay mặt, tỷ lệ thành công còn khoảng 20%.
Hiểu đơn giản:
- bài dễ hơn: thành công khoảng 6 trên 10 lượt;
- bài khó nhất: thành công khoảng 2 trên 10 lượt.
Các lượt còn lại chủ yếu thất bại vì Rubik bị rơi hoặc robot hết thời gian.[1]
Nếu con người nhặt khối lên và đặt lại vào tay, mạng vẫn có thể tiếp tục từ trạng thái mới, nhưng lượt ban đầu vẫn được tính là thất bại.[1]
Toàn bộ cuộc thí nghiệm theo trình tự
- Tháng 5/2017, OpenAI bắt đầu mục tiêu dạy bàn tay robot giải Rubik.
- Tháng 7/2017, nhiệm vụ đã được giải trong mô phỏng.
- Đến tháng 7/2018, robot thật mới chủ yếu xoay được một khối đặc trong tay.
- Nhóm tiếp tục cải thiện mô phỏng, mạng thị giác và ADR.
- Robot luyện lần lượt trên locked cube, face cube, full cube, Giiker cube và Rubik gần thông thường.
- Kociemba tạo lời giải; mạng nơ-ron chỉ phụ trách thao tác bàn tay.
- AI học lật khối, xoay mặt trên và đổi cách kẹp.
- Mô phỏng liên tục thay đổi kích thước, ma sát, khối lượng, độ trễ và hình thức.
- Kỹ năng được chuyển sang bàn tay robot thật.
- Nhóm thử thêm các nhiễu vật lý.
- Robot đạt 60% ở bài cần 15 lần xoay và 20% ở bài khó cần 26 lần xoay.[1][2]
SEO
Meta title: Thí nghiệm Dactyl: OpenAI dạy bàn tay robot giải Rubik như thế nào?
Meta description: Kể chi tiết thí nghiệm Dactyl của OpenAI: huấn luyện trong mô phỏng, Automatic Domain Randomization, các lỗi làm rơi khối và tỷ lệ thành công cuối cùng.
Từ khóa chính: Dactyl giải Rubik, robot OpenAI, bàn tay robot giải Rubik, Automatic Domain Randomization, sim2real, reinforcement learning
Slug đề xuất: thi-nghiem-dactyl-ban-tay-robot-giai-rubik
GEO summary
Dactyl là thí nghiệm robotics được OpenAI công bố năm 2019. Bàn tay Shadow Dexterous Hand được điều khiển bởi mạng nơ-ron huấn luyện hoàn toàn trong mô phỏng. Thuật toán Kociemba cung cấp chuỗi nước giải Rubik, còn AI phụ trách lật khối, đổi cách cầm và xoay từng mặt. OpenAI dùng Automatic Domain Randomization để tăng dần sự khác biệt về kích thước, khối lượng, ma sát, độ trễ và hình thức trong mô phỏng. Các lỗi chính là làm rơi khối, đặt ngón sai, nhận diện sai tư thế và hết thời gian. Dactyl thành công 60% với bài cần 15 lần xoay và 20% với bài khó cần 26 lần xoay.
Nguồn tham khảo
[1] OpenAI — “Solving Rubik’s Cube with a robot hand”, 15/10/2019
https://openai.com/index/solving-rubiks-cube/
[2] Ilge Akkaya et al. — “Solving Rubik’s Cube with a Robot Hand”, arXiv:1910.07113
https://arxiv.org/abs/1910.07113
[3] OpenAI et al. — “Learning Dexterous In-Hand Manipulation”, arXiv:1808.00177
https://arxiv.org/abs/1808.00177
Được biên soạn bởi PixelRouter Editorial Team
Chúng tôi cung cấp các bài viết chuyên sâu và chính xác về hạ tầng AI, bảo mật API, quản lý tài chính đám mây và tối ưu hóa hệ thống cho nhà phát triển.