File size: 3,551 Bytes
6686473 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | # 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.
|