@@ -44,6 +44,8 @@ def __init__(self):
44
44
self .yaw_td = 0.0
45
45
self .angle_t = 0.0
46
46
self .angle_td = 0.0
47
+ self .id1 = 0
48
+ self .id2 = 0
47
49
48
50
49
51
def cal_ob_sigma (d ):
@@ -95,6 +97,7 @@ def calc_edges(xlist, zlist):
95
97
edge .d_t , edge .d_td = dt , dtd
96
98
edge .yaw_t , edge .yaw_td = yawt , yawtd
97
99
edge .angle_t , edge .angle_td = anglet , angletd
100
+ edge .id1 , edge .id2 = t , td
98
101
99
102
edges .append (edge )
100
103
@@ -122,19 +125,27 @@ def graph_based_slam(xEst, PEst, u, z, hxDR, hz):
122
125
123
126
x_opt = copy .deepcopy (hxDR )
124
127
edges = calc_edges (x_opt , hz )
128
+ print ("nedges:" , len (edges ))
125
129
n = len (hz ) * 3
126
130
127
131
for itr in range (MAX_ITR ):
128
- print ("nedges:" , len (edges ))
129
132
130
133
H = np .zeros ((n , n ))
131
134
b = np .zeros ((n , 1 ))
132
135
133
136
for edge in edges :
134
137
A , B = calc_jacobian (edge )
135
138
139
+ id1 = edge .id1 * 3
140
+
141
+ H [id1 :id1 + 3 , id1 :id1 + 3 ] += A .T * edge .omega * A
142
+ # h[self.id1*3:self.id1*3+3, self.id2*3:self.id2*3+3] += (self.matA).T.dot(self.info.dot(self.matB))
143
+ # h[self.id2*3:self.id2*3+3, self.id1*3:self.id1*3+3] += (self.matB).T.dot(self.info.dot(self.matA))
144
+ # h[self.id2*3:self.id2*3+3, self.id2*3:self.id2*3+3] += (self.matB).T.dot(self.info.dot(self.matB))
145
+
136
146
# H[0:3, 0:3] += np.identity(3) * 10000 # to fix origin
137
147
H += np .identity (n ) * 10000 # to fix origin
148
+ print (H )
138
149
139
150
dx = - np .linalg .inv (H ).dot (b )
140
151
# print(dx)
0 commit comments