# TrajOpt Implementation Guide (Robot Franka Panda) ## 1. Mục tiêu Tài liệu này chỉ đặc tả cách cài đặt **TrajOpt** cho bài toán của hệ thống: - Đầu vào: - Trạng thái khớp hiện tại `q_start` - Grasp pose `T_grasp` (đã được module khác xác định) - Target placement pose `T_target` - Robot model (URDF) - Collision meshes - Môi trường - Đầu ra: - Quỹ đạo khớp liên tục từ `q_start -> grasp -> target`. TrajOpt **không** sinh grasp pose. TrajOpt **không** giải IK. TrajOpt chỉ tối ưu quỹ đạo. --- # 2. Biến tối ưu Mỗi waypoint: `q_t = [q1,...,q7]` Toàn bộ trajectory: `Q=[q1,q2,...,qT]` Nếu T=30 thì số biến là 210. TrajOpt tối ưu đồng thời toàn bộ waypoint. --- # 3. Khởi tạo quỹ đạo Không sử dụng random, RRT hay PRM. Khởi tạo bằng nội suy tuyến tính: - q_start -> q_grasp - q_grasp -> q_target Quỹ đạo ban đầu được phép xuyên vật cản. --- # 4. Hàm mục tiêu Mục tiêu chính: J = Σ ||q(t+1)-q(t)||² Có thể bổ sung acceleration cost nếu cần quỹ đạo mượt hơn. --- # 5. Hard Constraints ## Joint limits Mọi waypoint đều phải thỏa: q_min ≤ q_t ≤ q_max Giới hạn lấy từ URDF. ## Grasp constraint Waypoint grasp phải thỏa: FK(q_k)=T_grasp Đây là hard equality constraint. ## Placement constraint Waypoint cuối: FK(q_T)=T_target Đây cũng là hard equality constraint. --- # 6. Collision World TrajOpt không đọc trực tiếp PyBullet. Cần xây dựng Collision World gồm: - Robot collision mesh - Object collision mesh - Table - Ground - Static obstacles Mỗi object cần: - Mesh - World pose - Collision margin - AABB Trước mỗi lần planning phải đồng bộ pose từ PyBullet sang Collision World. --- # 7. Continuous Collision Checking Không chỉ kiểm tra tại waypoint. TrajOpt kiểm tra chuyển động giữa hai waypoint liên tiếp. Đối với mỗi robot link: - xây dựng swept volume - tính signed distance - lấy contact normal - lấy closest points Nếu signed distance < d_safe thì sinh gradient đẩy quỹ đạo ra xa vật cản. --- # 8. Tuyến tính hóa Khoảng cách va chạm được tuyến tính hóa quanh nghiệm hiện tại: sd(q) ≈ sd(q0)+∇sd(q0)(q-q0) Gradient được tính từ: - contact normal - robot Jacobian Sau đó chuyển thành ràng buộc tuyến tính trong bài toán QP. --- # 9. SQP Mỗi iteration: 1. Forward Kinematics 2. Collision Query 3. Jacobian 4. Linearization 5. Xây dựng Quadratic Program 6. Giải QP 7. Cập nhật trajectory 8. Kiểm tra hội tụ Thông thường 10–30 iteration. --- # 10. Điều kiện hội tụ Thuật toán dừng khi: - Không còn vi phạm khoảng cách an toàn. - Các hard equality constraints được thỏa mãn trong giới hạn chính xác số học của solver. - Chi phí thay đổi giữa hai iteration nhỏ hơn ngưỡng. - Trust region không còn cải thiện nghiệm. Nếu không hội tụ trước số iteration tối đa thì planner trả về thất bại. --- # 11. Lưu ý - TrajOpt không tìm grasp pose. - TrajOpt không giải IK. - IK phải được giải trước. - Collision World phải được cập nhật trước mỗi lần lập kế hoạch. - Khi attach object, collision model phải cập nhật để quỹ đạo sau grasp tính cả vật được gắp.