map_espace.cpp
Go to the documentation of this file.
1 //this package is based on amcl and has been modified to fit gmcl
2 /*
3  * Author: Mhd Ali Alshikh Khalil
4  * Date: 20 June 2021
5  *
6 */
7 
8 //amcl author clarification
9 /*
10  * Player - One Hell of a Robot Server
11  * Copyright (C) 2000 Brian Gerkey & Kasper Stoy
12  * gerkey@usc.edu kaspers@robotics.usc.edu
13  *
14  * This library is free software; you can redistribute it and/or
15  * modify it under the terms of the GNU Lesser General Public
16  * License as published by the Free Software Foundation; either
17  * version 2.1 of the License, or (at your option) any later version.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27  *
28  */
29 
30 
31 
32 #include <stdlib.h>
33 #include "gmcl/map/map.h"
34 #include "gmcl/pf/pf.h"
35 
36 void map_update_espace(energy_map_t *energy_map , map_t *map ,lsensor_scan_t *laser_scan)
37 {
38  int range_num ;
39  double map_range ;
40  pf_vector_t pose;
41 
42  int step = (laser_scan->range_count - 1) / (energy_map->max_beams - 1);
43 
44  for (int j=0 ; j<energy_map->size_y ; j++ )
45  {
46  for (int i=0 ; i<energy_map->size_x ; i++ )
47  {
48  pose.v[0] = energy_map->poses[i + j *energy_map->size_x].pose_x ;
49  pose.v[1] = energy_map->poses[i + j *energy_map->size_x].pose_y ;
50  pose.v[2] = energy_map->poses[i + j *energy_map->size_x].orientation_yaw;
51  // Take account of the laser pose relative to the robot
52  pose = pf_vector_coord_add(laser_scan->laser_pose, pose);
53 
54  double p = 0 ;
55 
56  for (range_num = 0; range_num < laser_scan->range_count; range_num += step)
57  //for (range_num = 0; range_num < laser_scan->range_count; range_num ++)
58  {
59  // Compute the range according to the map
60  map_range = map_calc_range(map, pose.v[0], pose.v[1],
61  pose.v[2] + laser_scan->ranges[range_num][1], laser_scan->range_max);
62 
63  p += 1 - map_range/laser_scan->range_max;
64  }
65 
66 
67  p /= laser_scan->range_count/step ;
68  // p /= laser_scan->range_count ;
69  energy_map->poses[i + j *energy_map->size_x].energy_val += p ; //energy in grid cell
70  // printf("energy_val: %9.6f\n", p);
71  }
72 
73 
74  }
75 
76 }
77 
78 
79 void map_calc_SER(energy_map_t *energy_map , lsensor_scan_t *laser_scan)
80 {
81  int range_num , step ;
82  double p = 0 ;
83  double range ;
84  step = (laser_scan->range_count - 1) / (energy_map->max_beams - 1);
85 
86  for (range_num = 0; range_num < laser_scan->range_count; range_num += step)
87  // for (range_num = 0; range_num < laser_scan->range_count; range_num ++)
88  {
89  range = laser_scan->ranges[range_num][0];
90  if( range < laser_scan->range_max && range == range)
91  p += 1 - range/laser_scan->range_max;
92  }
93 
94 
95 
96  p /= laser_scan->range_count/step ;
97  // p /= laser_scan->range_count ;
98  energy_map->lasers_energy_val +=p ;
99  // printf("lasers_energy_val: %9.6f\n", p);
100 }
101 
102 
103 void map_clear_SER(energy_map_t *energy_map)
104 {
105 
106  energy_map->lasers_energy_val = 0.0 ;
107 }
108 
109 
110 void map_diff_SER(energy_map_t *energy_map)
111 { int accepted_count = 0 ;
112  energy_pose_t* poses = energy_map->poses;
113  int size = energy_map->size_x*energy_map->size_y ;
114  int* accepted_index = energy_map->accepted_index;
115 
116  for (int i=0 ; i<size ; i++ )
117  if(abs(energy_map->lasers_energy_val - poses[i].energy_val) < energy_map->threshold_val)
118  accepted_index[accepted_count++] = i ;
119 
120  energy_map->accepted_count = accepted_count ;
121 
122  map_clear_SER(energy_map);
123  // printf("accepted energy samples: %9.6d\n", accepted_count );
124 }
125 
126 
map_diff_SER
void map_diff_SER(energy_map_t *energy_map)
Definition: map_espace.cpp:110
energy_map_t::size_y
int size_y
Definition: map.h:122
lsensor_scan_t
Definition: map.h:88
energy_map_t::poses
energy_pose_t * poses
Definition: map.h:118
pf.h
pf_vector_t
Definition: pf_vector.h:46
energy_map_t::accepted_count
int accepted_count
Definition: map.h:122
energy_pose_t::pose_y
double pose_y
Definition: map.h:106
energy_map_t::size_x
int size_x
Definition: map.h:122
energy_map_t
Definition: map.h:114
step
unsigned int step
energy_map_t::lasers_energy_val
double lasers_energy_val
Definition: map.h:126
map_clear_SER
void map_clear_SER(energy_map_t *energy_map)
Definition: map_espace.cpp:103
energy_pose_t::pose_x
double pose_x
Definition: map.h:106
lsensor_scan_t::ranges
double(* ranges)[2]
Definition: map.h:98
map_update_espace
void map_update_espace(energy_map_t *energy_map, map_t *map, lsensor_scan_t *laser_scan)
Definition: map_espace.cpp:36
energy_map_t::threshold_val
double threshold_val
Definition: map.h:126
map.h
map_calc_range
double map_calc_range(map_t *map, double ox, double oy, double oa, double max_range)
Definition: map_range.c:46
map_calc_SER
void map_calc_SER(energy_map_t *energy_map, lsensor_scan_t *laser_scan)
Definition: map_espace.cpp:79
map_t
Definition: map.h:67
lsensor_scan_t::range_count
int range_count
Definition: map.h:92
energy_map_t::accepted_index
int * accepted_index
Definition: map.h:124
lsensor_scan_t::range_max
float range_max
Definition: map.h:94
pf_vector_coord_add
pf_vector_t pf_vector_coord_add(pf_vector_t a, pf_vector_t b)
Definition: pf_vector.c:114
energy_map_t::max_beams
int max_beams
Definition: map.h:122
energy_pose_t::orientation_yaw
double orientation_yaw
Definition: map.h:106
energy_pose_t
Definition: map.h:103
energy_pose_t::energy_val
double energy_val
Definition: map.h:109
pf_vector_t::v
double v[3]
Definition: pf_vector.h:53
lsensor_scan_t::laser_pose
pf_vector_t laser_pose
Definition: map.h:90


gmcl
Author(s): Mhd Ali Alshikh Khalil, adler1994@gmail.com
autogenerated on Wed Mar 2 2022 00:20:14