MRICP
Map Reference ICP.
This is a Map Reference ICP plugin Driver for real time Map building and Localization using Iterative Closest Point laser scan matching and odom correction. Currently The driver is in stable release stage, more modifications might be added later on.
This driver is created to support UTS CAS mobile Platforms. This driver can be quite usefull in a lot of applications where odom correction or matching laser scans is essential. I would appreciate any feedback and recommendations that can lead to improving the performance of this driver.
- Compile-time dependencies
- none
- Provides
The MRICP driver provides the following device interfaces, some of them named:
- "Position" player_interface_position
- This interface returns odometry data.
- "Opaque" player_icp_plugin_interface
- This is a dummy interface supporting requests and commands to the ICP / TODO
- "Map" player_map_interface
- This interface supports map data requests / TODO
- Supported configuration requests
- "Position" player_interface_position:
- PLAYER_POSITION_SET_ODOM_REQ
- PLAYER_POSITION_RESET_ODOM_REQ
- PLAYER_POSITION_GET_GEOM_REQ
- "Map" player_interface_map:
- PLAYER_POSITION_GET_GEOM_DATA
- player_icp_plugin_interface (not clear now, i will know it later)
- PLAYER_ICP_X_REQ
- PLAYER_ICP_Y_REQ
- Configuration file options
- MAXR (double)
- Default: "7.8"
- Maximium Laser Range
- MINR (double)
- Default: "0.05"
- Minimium Laser Range
- period (double)
- Default: "0.5"
- Time in sec between scans to be matched.
- map_resolution (double)
- Default: "0.05"
- Pixel resolution in meter of the map to be build
- map_size (double)
- Default: 20
- This is defined from the origin to the boundary, so is actually half the size of the map PATCH, not the whole map.
- interpolate (bool)
- Default "1"
- 0 - Simple ICP, 1 - ICP with interpolation
- NIT (int)
- Default "10"
- Number of iterations for each scan-matching.
- gate1 (float)
- Default "0.5"
- 1st data association gate for each point in scan
- gate2 (float)
- Default "0.05"
- 2nd data association gate for each point in scan
- debug (bool)
- Default: 0
- Display Debug Messages
- warning (bool)
- Default: 1
- Display Warning Messages about misalignment problems
- Log (bool)
- Default: 0
- Loggs the Odom Data (x,y,theta,ltics,rtics,lspeed,rspeed)
- map_path(string)
- Default: "maps/"
- Specifies the locations where patches and logs are to be saved
- start_in(int)
- Default : 2
- Delay Before starting, unit is in seconds
- robot_id(int)
- Default : 0
- The Robot id assigned for map identification
- number_of_laser(int)
- Default : 1
- The number of lasers to be used in the scan matching (index starts from 0) all lasers should be declared in the requires section
- playerv_debug (bool)
- Default : 0
- If enabled, the map occupancy will be represented by +1, 0, -1 (occupied, unoccupied, unknown), other wise, the probability will be scaled from 0 - 255
- laserX_ranges tuple of (int) where X is an int
- Default : [-90 90]
- Determines the acceptable laser scan ranges, even number of elements should exist in the tuple, smaller range should be first followed by the larger range. You will have to manually assign the value of X: eg. in ur configuration file u should have something like this for 2 lasers: number_of_lasers 2 laser0_ranges [-90 -70 -50 -30 -10 90] laser1_ranges [-120 120]
- this represent the following acceptable ranges: for Laser:0 [-90 -70] [-50 -30] [-10 90] for laser:1 [-120 120]
- use_max_range (float)
- Default: 0
- Specify if you want to use ranges more than the max to update empty spaces in Occupancy grid map, if it's not zero , then the range specified will be used to update the cells within that range only (usefull to reduce the effect of false returns)
- sparse_scans_rate (int)
- Default: 1
- Specifies the number of laser scan samples resolution, 1 means all beams, 2 means every take one every 2 and so on. (OG will not be affected by this, all samples will be use for OG) it reduces the CPU usage.
- use_odom (bool)
- Default: 0
- Specify if you want to use the underlying poisition driver's odom in laser scan correction the existance of an underlying position driver no longer means that u are using the odom automatically since it can be used for passing velocity commands.
- free_space_prob (float) between 0 and 1
- Default: 0.4
- The probability to be used for updating the free space , lower values will help in reducing the false readings effect.
- map_saving_period (float)
- Default : 10 sec
- Determines how long time we should wait before saving the map.
- Example
driver ( name "mricp" provides ["position2d:1" "map:0"] requires ["position2d:0" "laser:0"] number_of_lasers 1 laser0_ranges [-120 120] playerv_debug 0 period 0.2 MAXR 3.9 MINR 0.05 map_resolution 0.05 map_saving_period 5 map_size 10 use_max_range 4 sparse_scans_rate 3 map_path "logs/" debug 0 warning 1 alwayson 1 log 1 )
- Authors
Tarek Taha - Centre of Autonomous Systems - University of Technology Sydney