@@ -48,21 +48,21 @@ void Localizer::estimate()
4848 {
4949 delta_yaw = delta_yaw - 360 ;
5050 }
51- if (std::abs (del_yaw) > 1 )
51+ if (std::abs (del_yaw) > 0.5 )
5252 return ;
5353
5454 int num_pairs = 0 ;
5555
5656 double curr_shift_x = 0 , curr_shift_y = 0 ;
5757 int i, j, count_x = 0 , count_y = 0 ;
5858 double first_distance, first_angle, second_distance, sec_angle;
59- count = 0 ;
60- /* for (i = 0; i < sz ; i++)
59+ int size_max = std::min (sz, 2 ) ;
60+ for (i = 0 ; i < size_max ; i++) // sz limited to 2
6161 {
6262 // Simple Averaging approach
6363 LineMatcher::Pair curr_pair = matched_pairs[i];
6464
65- if (std::abs(curr_pair.L2.angle - curr_pair.L1.angle) > 35 || std::abs(curr_pair.L2.angle - curr_pair.L1.angle) < 0.01) // False values
65+ if (std::abs (curr_pair.L2 .angle - curr_pair.L1 .angle ) > 35 ) // || std::abs(curr_pair.L2.angle - curr_pair.L1.angle) < 0.01) // False values
6666 {
6767 if (std::abs (curr_pair.L2 .angle - curr_pair.L1 .angle ) > 35 )
6868 {
@@ -76,6 +76,9 @@ void Localizer::estimate()
7676
7777 first_distance = curr_pair.L1 .distance - curr_pair.L2 .distance ;
7878
79+ if (first_distance > 0.5 )
80+ continue ;
81+
7982 first_angle = (curr_pair.L1 .angle + curr_pair.L2 .angle ) / 2 ;
8083 ROS_INFO (" first_angle :%f" , first_angle);
8184 first_angle = first_angle * PI / 180 ;
@@ -91,72 +94,36 @@ void Localizer::estimate()
9194
9295 ROS_INFO (" curr_d_x: %lf" , d_x);
9396 ROS_INFO (" curr_d_y: %lf" , d_y);
94- }*/
95-
96-
97- for (int i = 0 ; i < sz; i++)
98- {
99- LineMatcher::Pair curr_pair = matched_pairs[i];
100-
101- if ((std::abs (curr_pair.L2 .angle - curr_pair.L1 .angle ) > 35 ) || std::abs (curr_pair.L2 .distance - curr_pair.L1 .distance ) > 10 ) // False values
102- {
103- continue ;
104- }
105-
97+ }
10698
107- if (sz == 1 )
99+ // Following logic was based on Line Intersection - Didn't work out very well
100+ /* if (sz == 1)
108101 {
109- first_distance = curr_pair.L1 .distance - curr_pair.L2 .distance ;
110- first_angle = (curr_pair.L1 .angle + curr_pair.L2 .angle ) / 2 ;
111- first_angle = first_angle * PI / 180 ;
112- curr_shift_x += first_distance * std::cos (first_angle);
113- curr_shift_y += first_distance * std::sin (first_angle);
114- break ;
102+ curr_shift_x += first_distance * std::cos(first_angle);
103+ curr_shift_y += first_distance * std::sin(first_angle);
104+ count++;
105+ break;
115106 }
116-
117107 for (j = i+1; j < sz; j ++)
118108 {
119109 LineMatcher::Pair sec_pair = matched_pairs[j];
110+ second_distance = sec_pair.L1.distance - sec_pair.L2.distance;
111+ sec_angle = (sec_pair.L1.angle + sec_pair.L2.angle) / 2;
112+ sec_angle = sec_angle * PI / 180;
120113
121- if ((std::abs (sec_pair.L2 .angle - sec_pair.L1 .angle ) > 35 ) || std::abs (sec_pair.L2 .distance - sec_pair.L1 .distance ) > 10 )// False values
122- {
123- continue ;
124- }
125-
126- if (std::abs (sec_pair.L1 .angle - curr_pair.L1 .angle ) < 10 )
127- continue ;
128-
129- double x_old = getXEstimate (curr_pair.L1 .distance , curr_pair.L1 .angle * PI / 180 , sec_pair.L1 .distance , sec_pair.L1 .angle * PI / 180 );
130- double x_new = getXEstimate (curr_pair.L2 .distance , curr_pair.L2 .angle * PI / 180 , sec_pair.L2 .distance , sec_pair.L2 .angle * PI / 180 );
131- double y_old = getYEstimate (curr_pair.L1 .distance , curr_pair.L1 .angle * PI / 180 , sec_pair.L1 .distance , sec_pair.L1 .angle * PI / 180 );
132- double y_new = getYEstimate (curr_pair.L2 .distance , curr_pair.L2 .angle * PI / 180 , sec_pair.L2 .distance , sec_pair.L2 .angle * PI / 180 );
133-
134- ROS_INFO (" (x_old): %lf" , x_old);
135- ROS_INFO (" (x_new): %lf" , x_new);
136- ROS_INFO (" (y_old): %lf" , y_old);
137- ROS_INFO (" (y_new ): %lf" , y_new );
138-
139- curr_shift_x += (x_old - x_new);
140- curr_shift_y += (y_old - y_new);
141-
142- // ROS_INFO("curr_shift_x: %f", curr_shift_x);
143- // ROS_INFO("curr_shift_y: %f", curr_shift_y);
114+ curr_shift_x += getXEstimate(first_distance, first_angle, second_distance, sec_angle);
115+ curr_shift_y += getYEstimate(first_distance, first_angle, second_distance, sec_angle);
144116 count++;
145117 }
146- }
118+ }*/
147119
120+ ROS_INFO (" count_x: %d" , count_x);
121+ ROS_INFO (" count_y: %d" , count_y);
148122
149-
150- /* if (count_x != 0)
123+ if (count_x != 0 )
151124 curr_shift_x = curr_shift_x / count_x;
152125 if (count_y != 0 )
153- curr_shift_y = curr_shift_y / count_y;*/
154-
155- if (count != 0 )
156- {
157- curr_shift_x = curr_shift_x / count;
158- curr_shift_y = curr_shift_y / count;
159- }
126+ curr_shift_y = curr_shift_y / count_y;
160127
161128 estimateGlobalPosition (curr_shift_x, curr_shift_y);
162129
@@ -168,14 +135,14 @@ void Localizer::estimateGlobalPosition(double curr_shift_x, double curr_shift_y)
168135 delta_yaw = 0 ;
169136 double curr_ang = delta_yaw * M_PI / 180 ;
170137 double glob_curr_shift_x = -(std::cos (curr_ang) * curr_shift_x - std::sin (curr_ang) * curr_shift_y);
171- double glob_curr_shift_y = ( std::sin (curr_ang) * curr_shift_x + std::cos (curr_ang) * curr_shift_y) ;
138+ double glob_curr_shift_y = std::sin (curr_ang) * curr_shift_x + std::cos (curr_ang) * curr_shift_y;
172139
173140 shift_x += glob_curr_shift_x;
174141 shift_y += glob_curr_shift_y;
175142}
176143
177144// Utility Methods for Line Intersection Logic
178-
145+ /*
179146double Localizer::getXEstimate(double fir_dist, double fir_angle, double sec_dist, double sec_angle)
180147{
181148 return (sec_dist * std::sin(fir_angle) - fir_dist * std::sin(sec_angle)) / std::sin(fir_angle - sec_angle);
@@ -184,4 +151,4 @@ double Localizer::getXEstimate(double fir_dist, double fir_angle, double sec_dis
184151double Localizer::getYEstimate(double fir_dist, double fir_angle, double sec_dist, double sec_angle)
185152{
186153 return (sec_dist * std::cos(fir_angle) - fir_dist * std::cos(sec_angle)) / std::sin(sec_angle - fir_angle);
187- }
154+ }*/
0 commit comments