Mô hình hóa và động học robot
Một robot gắp vật trên bàn nghe qua có vẻ là chuyện cơ khí: có tay máy, có động cơ, có cái kẹp ở cuối tay. Nhưng chỉ cần nhìn kỹ hơn một chút, ta sẽ thấy nó phải trả lời một loạt câu hỏi không hề cơ khí thuần túy.
Làm sao robot biết cái ly đang cách nó bao xa? Làm sao nó biết phải đưa đầu kẹp tới điểm nào, theo hướng nào, với tư thế nào? Làm sao nó biết mỗi khớp nên xoay bao nhiêu độ để cái kẹp đi tới đúng vị trí đó? Và nếu cái ly mỏng, dễ vỡ, làm sao nó biết lực kẹp bao nhiêu là đủ giữ, nhưng chưa đến mức làm hỏng vật?
Những câu hỏi này thường khiến người mới nghĩ robotics phải bắt đầu bằng một khối toán học rất dày. Thực ra không nhất thiết như vậy. Toán trong robotics không xuất hiện để làm bài toán trông đáng sợ hơn. Nó xuất hiện vì robot cần một ngôn ngữ chính xác để nói về hình dạng, vị trí, chuyển động và lực. Nếu chưa có ngôn ngữ đó, ta chỉ có một cỗ máy có thể quay các khớp, nhưng chưa biết quay như thế nào để làm việc có chủ đích.
Chuỗi ghi chú trong phân mục này bắt đầu từ phần nhập môn nhất của robotics: modeling và kinematics. Ta chưa cần đi sâu vào control, dynamics, planning hay learning. Ta chỉ cần hiểu một điều căn bản: trước khi robot có thể “thông minh”, nó phải biết cơ thể của nó được tạo thành như thế nào và chuyển động của từng khớp làm thay đổi vị trí của đầu công tác ra sao.
Bài toán gắp vật
Hãy dùng một ví dụ xuyên suốt: một tay robot đặt cạnh bàn, nhiệm vụ của nó là gắp một chiếc cốc. Ở cuối tay robot có một bộ kẹp. Bộ kẹp này là phần trực tiếp tiếp xúc với chiếc cốc, nên mọi quyết định cuối cùng đều phải quy về nó: nó đang ở đâu, đang quay theo hướng nào, cần đi tới đâu, và khi tới nơi thì phải đóng kẹp ra sao.
Nếu nhìn bằng mắt người, bài toán có vẻ đơn giản. Ta thấy chiếc cốc, đưa tay tới gần, mở bàn tay, chạm vào vật rồi nắm lại. Nhưng robot không có cảm giác “đưa tay tới đó” theo nghĩa tự nhiên như con người. Nó chỉ có các biến đo được và các lệnh điều khiển được. Một khớp có thể quay thêm . Một khớp khác có thể duỗi ra thêm vài centimet. Camera có thể trả về ảnh. Encoder có thể trả về góc khớp. Cảm biến lực có thể trả về lực tiếp xúc.
Khoảng cách giữa hai thế giới này là nơi robotics bắt đầu. Ở thế giới nhiệm vụ, ta nói “gắp chiếc cốc”. Ở thế giới máy, ta phải nói “khớp một quay bao nhiêu, khớp hai quay bao nhiêu, đầu kẹp nằm tại tọa độ nào, trục của đầu kẹp hướng về đâu”. Muốn nối hai thế giới đó, trước hết ta cần mô tả được cấu trúc của robot.

Modeling
Modeling là bước biến một ý tưởng robot thành một cấu trúc có thể mô tả, tính toán và phân tích. Nếu nhiệm vụ là gắp vật trên bàn, ta phải quyết định robot có bao nhiêu khớp, mỗi khớp là khớp quay hay khớp tịnh tiến, các đoạn tay dài bao nhiêu, đầu kẹp gắn ở đâu, và robot có thể vươn tới vùng làm việc nào.

Ở mức nhập môn, modeling không chỉ là vẽ hình dáng bên ngoài của robot. Nó là việc chọn một cơ thể phù hợp với nhiệm vụ. Một robot chỉ cần gắp đồ trong một khay nhỏ không nhất thiết phải có cánh tay dài và nhiều bậc tự do. Ngược lại, một robot cần hàn trong không gian hẹp có thể cần nhiều khớp hơn để đổi tư thế đầu hàn mà vẫn tránh va chạm.
Trong ví dụ tay robot gắp cốc, modeling trả lời các câu hỏi kiểu như:
- Tay robot có đủ dài để chạm tới toàn bộ mặt bàn không?
- Đầu kẹp có thể xoay đúng hướng để tiếp cận thành cốc không?
- Các khớp có bị giới hạn góc làm cho một số vị trí không thể tới được không?
- Cấu trúc robot có quá dư thừa so với nhiệm vụ không?
Những câu hỏi này chưa yêu cầu ta phải điều khiển robot di chuyển. Chúng chỉ yêu cầu ta hiểu “cơ thể” của robot. Khi cơ thể đã được định nghĩa, câu hỏi tiếp theo mới xuất hiện: với cơ thể đó, robot sẽ chuyển động như thế nào?
Kinematics
Kinematics, hay động học, nghiên cứu chuyển động của robot mà chưa xét nguyên nhân gây ra chuyển động đó. Nói cách khác, ta quan tâm tới quan hệ giữa góc khớp và vị trí của đầu công tác, nhưng chưa hỏi mô-tơ cần tạo bao nhiêu moment, ma sát lớn đến đâu, hay vật nặng bao nhiêu.
Điểm này rất quan trọng. Nếu modeling nói robot gồm những đoạn nào và nối với nhau ra sao, thì kinematics nói khi các đoạn đó xoay hoặc trượt, đầu cuối của robot sẽ đi tới đâu. Đây là lớp toán học đầu tiên giúp robot chuyển từ “các khớp rời rạc” thành “một cơ thể có chuyển động có nghĩa”.

Với tay robot gắp cốc, kinematics giúp trả lời hai hướng câu hỏi. Hướng thứ nhất: nếu ta đã biết mọi góc khớp, đầu kẹp đang nằm ở đâu trong không gian? Hướng thứ hai: nếu ta muốn đầu kẹp tới vị trí chiếc cốc, các khớp phải xoay như thế nào? Hai hướng này tương ứng với forward kinematics và inverse kinematics.
Trước khi đi vào hai bài toán đó, cần gọi tên bộ phận mà toàn bộ phép tính xoay quanh: end-effector.
End-effector
End-effector là bộ phận ở cuối robot dùng để tương tác với môi trường. Với tay gắp, đó là gripper. Với robot hàn, đó là mũi hàn. Với robot gắn camera để quan sát, chính camera có thể được xem là end-effector. Trong nhiều bài toán, ta không thật sự quan tâm từng đoạn tay robot nằm ở đâu, miễn là end-effector tới đúng vị trí và đúng tư thế.
Điều này làm cho bài toán robotics trở nên rõ hơn. Khi nói robot cần gắp cốc, ta không ra lệnh trực tiếp cho từng thanh kim loại. Ta muốn end-effector đi tới miệng cốc hoặc thân cốc theo một hướng tiếp cận phù hợp. Nếu end-effector lệch vài centimet, robot có thể kẹp hụt. Nếu end-effector đúng vị trí nhưng sai hướng, nó có thể chạm vào vật từ một phía không thể gắp được.

Vì vậy, trạng thái quan trọng của end-effector thường gồm hai phần: position và orientation. Position cho biết nó ở đâu. Orientation cho biết nó quay theo hướng nào. Trong không gian 3D, chỉ biết vị trí là chưa đủ. Một đầu kẹp nằm đúng tâm chiếc cốc nhưng bị xoay ngang sai hướng vẫn không thể gắp tốt.
Từ đây, ta có thể hiểu vì sao kinematics là cầu nối căn bản. Các khớp là thứ robot trực tiếp điều khiển, còn end-effector là thứ nhiệm vụ thật sự quan tâm. Kinematics mô tả quan hệ giữa hai lớp đó.
Forward Kinematics
Forward kinematics là bài toán đi từ joint space sang task space. Ta biết góc hoặc độ dịch chuyển của từng khớp, rồi tính ra vị trí và tư thế của end-effector.
Trong tay robot hai khớp phẳng, nếu khớp thứ nhất xoay một góc , khớp thứ hai xoay thêm một góc , và hai đoạn tay có chiều dài , vị trí đầu kẹp trên mặt phẳng có thể được viết như sau:
Ở đây, là vị trí của end-effector trong hệ tọa độ gắn với đế robot. Hai công thức này nói một điều rất trực tiếp: mỗi đoạn tay đóng góp một vector vào vị trí cuối cùng. Đoạn thứ nhất quay theo . Đoạn thứ hai không chỉ phụ thuộc vào , mà phụ thuộc vào tổng , vì nó được gắn trên đoạn thứ nhất.

Đây là lý do robot nhiều khớp không thể được hiểu bằng cách nhìn từng khớp riêng lẻ. Chuyển động của khớp gần đế kéo theo toàn bộ các khớp phía sau. Một thay đổi nhỏ ở khớp đầu có thể làm end-effector dịch chuyển rất xa, trong khi một thay đổi nhỏ ở khớp gần cuối có thể chỉ tinh chỉnh tư thế.
Forward kinematics thường là bài toán “dễ” hơn, vì nó đi theo chiều tự nhiên của cấu trúc robot. Ta đã biết cấu hình khớp, chỉ cần nhân và cộng các biến đổi hình học để ra pose cuối. Nhưng trong nhiệm vụ thật, ta thường không bắt đầu bằng góc khớp. Ta bắt đầu bằng vị trí của chiếc cốc.
Inverse Kinematics
Inverse kinematics là bài toán ngược lại: ta biết end-effector cần tới đâu, rồi tính xem các khớp phải nhận giá trị nào. Với robot gắp cốc, camera hoặc hệ perception có thể cho ta biết vị trí cốc trong không gian. Nhưng robot không thể ra lệnh trực tiếp “đi tới tọa độ đó” nếu chưa đổi tọa độ mục tiêu thành các góc khớp cụ thể.
Về mặt ý tưởng, inverse kinematics có vẻ chỉ là đảo ngược forward kinematics. Nếu forward kinematics là:
\mathbf{x} = f(\mathbf{q})\thì inverse kinematics muốn tìm:
Trong đó, là vector trạng thái khớp, còn là pose của end-effector trong task space. Nhưng ký hiệu dễ làm bài toán trông đơn giản hơn thực tế. Với nhiều robot, hàm ngược này không tồn tại dưới dạng duy nhất, thậm chí có khi không tồn tại nghiệm.
Cùng một vị trí end-effector có thể đạt được bằng nhiều cấu hình khớp khác nhau. Con người cũng vậy: ta có thể chạm tay vào một điểm trên bàn với khuỷu tay nâng cao hoặc hạ thấp. Với robot, các nghiệm khác nhau này có thể dẫn đến khác biệt lớn về tránh vật cản, giới hạn khớp, độ ổn định và khả năng sinh lực.
Ngược lại, có những mục tiêu robot không thể với tới. Chiếc cốc có thể nằm ngoài workspace. Hoặc vị trí thì với tới được, nhưng orientation yêu cầu đầu kẹp quay theo một hướng vượt quá giới hạn cơ khí. Khi đó, inverse kinematics không chỉ là “tính góc”, mà còn phải phát hiện rằng mục tiêu không khả thi.

Đây là lý do inverse kinematics thường được xem là bài toán nhập môn khó nhất nhưng thực tế nhất. Khó vì nó có thể có nhiều nghiệm, không có nghiệm, hoặc nghiệm không phù hợp. Thực tế vì gần như mọi nhiệm vụ robot đều bắt đầu từ mong muốn trong task space: gắp vật ở đây, đặt vật ở kia, đưa camera nhìn vào vùng này, đưa mũi hàn đi theo đường đó.
Workspace
Workspace là vùng không gian mà end-effector có thể chạm tới. Nó phụ thuộc vào chiều dài các đoạn tay, loại khớp, giới hạn góc, và cả yêu cầu orientation. Trong ví dụ gắp cốc, nếu mặt bàn rộng hơn workspace của robot, có những chiếc cốc robot sẽ không bao giờ chạm tới dù thuật toán điều khiển tốt đến đâu.
Khái niệm workspace giúp nối modeling với kinematics. Khi thiết kế robot, ta muốn workspace phủ được vùng nhiệm vụ. Khi điều khiển robot, ta phải kiểm tra mục tiêu có nằm trong workspace không. Nếu modeling ban đầu không phù hợp, kinematics không thể cứu bài toán bằng tính toán.
Một nhầm lẫn phổ biến là nghĩ robot càng nhiều khớp càng tốt. Nhiều khớp có thể làm workspace và khả năng đổi tư thế phong phú hơn, nhưng cũng làm inverse kinematics khó hơn. Robot có thể có vô số cấu hình để đạt cùng một điểm, và lúc đó ta phải chọn nghiệm theo tiêu chí phụ: tránh va chạm, tránh giới hạn khớp, giữ chuyển động mượt, hoặc tiết kiệm năng lượng.
Vì vậy, workspace không chỉ là một vùng hình học. Nó là cách ta kiểm tra xem thiết kế robot có ăn khớp với nhiệm vụ hay không. Khi workspace đã hợp lý, ta mới có nền để nói về chuyển động mượt.
Joint space và task space
Robotics thường phải qua lại giữa hai không gian. Joint space là không gian của các biến khớp: góc quay, độ trượt, hoặc các biến cấu hình khác. Task space là không gian của nhiệm vụ: vị trí và tư thế của end-effector, đường đi của đầu hàn, điểm nhìn của camera, hoặc vị trí cần gắp.
Forward kinematics đi từ joint space sang task space. Inverse kinematics đi từ task space về joint space. Sự khác biệt này nghe đơn giản, nhưng nó giải thích rất nhiều khó khăn của robotics.

Người dùng thường ra lệnh trong task space. Ta muốn đầu kẹp tới chiếc cốc, không phải muốn khớp số hai quay . Nhưng phần cứng robot lại nhận lệnh ở joint space. Động cơ nằm ở các khớp. Encoder đo các khớp. Giới hạn cơ khí cũng nằm ở các khớp. Vì vậy, một hệ robot luôn cần cơ chế dịch giữa hai không gian này.
Khi robot di chuyển, ta cũng phải cẩn thận với việc “đường thẳng” trong không gian nào. Một đường thẳng mượt trong joint space chưa chắc làm end-effector đi theo đường thẳng trong task space. Ngược lại, ép end-effector đi theo đường thẳng trong task space có thể làm một số khớp phải chuyển động rất phức tạp. Đây là lý do chỉ hiểu forward và inverse kinematics ở mức công thức chưa đủ; ta còn phải hiểu chúng được dùng trong chuỗi quyết định nào.
Chuỗi xử lý cơ bản
Quay lại bài toán gắp cốc. Một pipeline đơn giản có thể được hiểu như sau.
Trước hết, hệ perception tìm vị trí chiếc cốc trong ảnh hoặc trong point cloud. Vị trí đó được đổi về hệ tọa độ của robot. Lúc này ta có một mục tiêu trong task space: end-effector cần tới gần chiếc cốc với một pose phù hợp.
Tiếp theo, inverse kinematics tìm một cấu hình khớp có thể tạo ra pose đó. Nếu có nhiều nghiệm, hệ thống chọn nghiệm ít va chạm, không sát giới hạn khớp, và thuận lợi cho chuyển động tiếp theo. Sau đó, planner hoặc controller tạo ra một quỹ đạo từ cấu hình hiện tại tới cấu hình mục tiêu. Trong quá trình robot di chuyển, forward kinematics có thể được dùng liên tục để ước lượng end-effector hiện đang ở đâu.

Đến gần chiếc cốc, robot có thể cần cảm biến lực để điều chỉnh thao tác kẹp. Phần lực này đã bắt đầu chạm sang dynamics và control, nên ta chưa đi sâu ở đây. Nhưng ta có thể thấy rõ nền móng: nếu không biết pose của end-effector, không biết mục tiêu trong task space, và không biết cách chuyển mục tiêu đó thành cấu hình khớp, robot chưa thể bước vào bài toán lực một cách đáng tin cậy.
Nhìn theo chuỗi này, modeling và kinematics không phải hai chương lý thuyết tách rời. Modeling tạo ra cơ thể robot. Kinematics cho cơ thể đó một bản đồ chuyển động. Các tầng cao hơn như planning, control và learning đều dựa lên bản đồ đó.