src
gmcl
map
map.c
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
* Desc: Global map (grid-based)
31
* Author: Andrew Howard
32
* Date: 6 Feb 2003
33
* CVS: $Id: map.c 1713 2003-08-23 04:03:43Z inspectorg $
34
**************************************************************************/
35
36
#include <
assert.h
>
37
#include <math.h>
38
#include <stdlib.h>
39
#include <string.h>
40
#include <stdio.h>
41
42
#include "
gmcl/map/map.h
"
43
44
45
// Create a new map
46
map_t
*
map_alloc
(
void
)
47
{
48
map_t
*map;
49
50
map = (
map_t
*) malloc(
sizeof
(
map_t
));
51
52
// Assume we start at (0, 0)
53
map->
origin_x
= 0;
54
map->
origin_y
= 0;
55
56
// Make the size odd
57
map->
size_x
= 0;
58
map->
size_y
= 0;
59
map->
scale
= 0;
60
61
// Allocate storage for main map
62
map->
cells
= (
map_cell_t
*) NULL;
63
64
return
map;
65
}
66
67
68
energy_map_t
*
energy_map_alloc
(
map_t
*map ,
double
resoultion_x ,
double
resoultion_y ,
69
size_t
max_beams,
double
laser_min_range ,
double
laser_max_range)
70
{
71
energy_map_t
*energy_map;
72
73
energy_map = (
energy_map_t
*) malloc(
sizeof
(
energy_map_t
));
74
75
// Assume we start at (0, 0)
76
energy_map->
min_x
= map->
origin_x
- (map->
size_x
/2) * map->
scale
;
77
energy_map->
max_x
= map->
origin_x
+ (map->
size_x
/2) * map->
scale
;
78
energy_map->
min_y
= map->
origin_y
- (map->
size_y
/2) * map->
scale
;
79
energy_map->
max_y
= map->
origin_y
+ (map->
size_y
/2) * map->
scale
;
80
// Make the size odd
81
energy_map->
size_x
= abs(floor((energy_map->
max_x
- energy_map->
min_x
)/resoultion_x))+1 ;
82
energy_map->
size_y
= abs(floor((energy_map->
max_y
- energy_map->
min_y
)/resoultion_y))+1 ;
83
84
energy_map->
resoultion_x
= resoultion_x;
85
energy_map->
resoultion_y
= resoultion_y;
86
87
energy_map->
laser_min_range
= laser_min_range;
88
energy_map->
laser_max_range
= laser_max_range;
89
90
energy_map->
max_beams
= max_beams ;
91
92
energy_map->
lasers_energy_val
= 0.0 ;
93
94
// Allocate storage for main map
95
96
energy_map->
poses
= (
energy_pose_t
*) NULL;
97
98
energy_map->
poses
= calloc( energy_map->
size_x
* energy_map->
size_y
,
sizeof
(energy_map->
poses
[0]));
99
100
assert(energy_map->
poses
);
101
102
energy_map->
accepted_index
= calloc (energy_map->
size_x
* energy_map->
size_y
,
sizeof
(
int
));
103
104
assert(energy_map->
accepted_index
);
105
106
for
(
int
j=0 ; j<energy_map->
size_y
; j++ )
107
{
108
for
(
int
i=0 ; i<energy_map->
size_x
; i++ )
109
{
110
energy_map->
poses
[i + j *energy_map->
size_x
].
pose_x
= energy_map->
min_x
+(i *resoultion_x);
111
energy_map->
poses
[i + j *energy_map->
size_x
].
pose_y
= energy_map->
min_y
+(j *resoultion_y);
112
energy_map->
poses
[i + j *energy_map->
size_x
].
orientation_yaw
=
drand48
() * 2 * M_PI - M_PI ;
113
}
114
115
}
116
117
return
energy_map;
118
}
119
120
121
// Destroy a map
122
void
map_free
(
map_t
*map)
123
{
124
free(map->
cells
);
125
free(map);
126
return
;
127
}
128
129
void
energy_map_free
(
energy_map_t
*energy_map)
130
{
131
free(energy_map->
poses
);
132
free(energy_map->
accepted_index
);
133
free(energy_map);
134
return
;
135
}
136
// Get the cell at the given point
137
map_cell_t
*
map_get_cell
(
map_t
*map,
double
ox,
double
oy,
double
oa)
138
{
139
int
i, j;
140
map_cell_t
*cell;
141
142
i =
MAP_GXWX
(map, ox);
143
j =
MAP_GYWY
(map, oy);
144
145
if
(!
MAP_VALID
(map, i, j))
146
return
NULL;
147
148
cell = map->
cells
+
MAP_INDEX
(map, i, j);
149
return
cell;
150
}
151
energy_map_t::size_y
int size_y
Definition:
map.h:122
energy_map_t::poses
energy_pose_t * poses
Definition:
map.h:118
energy_map_alloc
energy_map_t * energy_map_alloc(map_t *map, double resoultion_x, double resoultion_y, size_t max_beams, double laser_min_range, double laser_max_range)
Definition:
map.c:68
energy_pose_t::pose_y
double pose_y
Definition:
map.h:106
energy_map_t::resoultion_x
double resoultion_x
Definition:
map.h:120
energy_map_t::resoultion_y
double resoultion_y
Definition:
map.h:120
energy_map_t::max_y
double max_y
Definition:
map.h:116
energy_map_t::size_x
int size_x
Definition:
map.h:122
energy_map_t
Definition:
map.h:114
drand48
static double drand48(void)
Definition:
portable_utils.hpp:13
energy_map_t::lasers_energy_val
double lasers_energy_val
Definition:
map.h:126
map_get_cell
map_cell_t * map_get_cell(map_t *map, double ox, double oy, double oa)
Definition:
map.c:137
map_t::origin_x
double origin_x
Definition:
map.h:70
energy_pose_t::pose_x
double pose_x
Definition:
map.h:106
map_t::cells
map_cell_t * cells
Definition:
map.h:79
MAP_INDEX
#define MAP_INDEX(map, i, j)
Definition:
map.h:207
map.h
map_alloc
map_t * map_alloc(void)
Definition:
map.c:46
map_t::scale
double scale
Definition:
map.h:73
energy_map_free
void energy_map_free(energy_map_t *energy_map)
Definition:
map.c:129
map_t::size_x
int size_x
Definition:
map.h:76
energy_map_t::laser_max_range
double laser_max_range
Definition:
map.h:116
map_t
Definition:
map.h:67
map_t::size_y
int size_y
Definition:
map.h:76
map_t::origin_y
double origin_y
Definition:
map.h:70
energy_map_t::accepted_index
int * accepted_index
Definition:
map.h:124
energy_map_t::min_y
double min_y
Definition:
map.h:116
MAP_GXWX
#define MAP_GXWX(map, x)
Definition:
map.h:200
energy_map_t::max_x
double max_x
Definition:
map.h:116
MAP_GYWY
#define MAP_GYWY(map, y)
Definition:
map.h:201
map_cell_t
Definition:
map.h:52
assert.h
map_free
void map_free(map_t *map)
Definition:
map.c:122
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_map_t::laser_min_range
double laser_min_range
Definition:
map.h:116
energy_map_t::min_x
double min_x
Definition:
map.h:116
MAP_VALID
#define MAP_VALID(map, i, j)
Definition:
map.h:204
gmcl
Author(s): Mhd Ali Alshikh Khalil, adler1994@gmail.com
autogenerated on Wed Mar 2 2022 00:20:14