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.